NSFileHandleReadCompletionNotification not posting



我有NSFileHandleReadCompletionNotification不张贴的问题。我正在将一个ntask的结果传送到另一个ntask中。无论出于何种原因,我的getData方法都不会被调用。什么好主意吗?这两个任务都工作正常,因为我正在将预期的文件写入硬盘驱动器。只是没有通知。

- (void) encodeVideo:(NSString*)path
{
    NSString* ffmpegPath = [[NSBundle mainBundle] pathForResource:@"ffmpeg" ofType:@""];
    NSString* presetFile = [[NSBundle mainBundle] pathForResource:@"128" ofType:@"ffpreset"];
    NSTask* encodeTask = [[NSTask alloc] init];
    NSMutableArray* arguments = [[NSMutableArray alloc] init];
    [arguments addObject:@"-y"];
    [arguments addObject:@"-i"];
    [arguments addObject:path];
    [arguments addObject:@"-f"];
    [arguments addObject:@"mpegts"];
    [arguments addObject:@"-ac"];
    [arguments addObject:@"2"];
    [arguments addObject:@"-fpre"];
    [arguments addObject:presetFile];
    [arguments addObject:@"-s"];
    [arguments addObject:@"320x240"];
    [arguments addObject:@"-aspect"];
    [arguments addObject:@"320:240"];
    [arguments addObject:@"-async"];
    [arguments addObject:@"2"];
    [arguments addObject:@"-"];
    [encodeTask setLaunchPath: ffmpegPath];
    [encodeTask setArguments: arguments];
    [encodeTask setStandardOutput:[NSPipe pipe]];
    NSMutableArray* segmentArguments = [[NSMutableArray alloc] init];
    [segmentArguments addObject:@"-t"];
    [segmentArguments addObject:@"10"];
    [segmentArguments addObject:@"-f"];
    [segmentArguments addObject:@"/Users/Morgan/Desktop/LiveStreamServer/video"];
    [segmentArguments addObject:@"-S"];
    [segmentArguments addObject:@"1"];
    NSString* segmenterPath = [[NSBundle mainBundle] pathForResource:@"mediastreamsegmenter" ofType:@""];
    NSLog(@"%@", segmenterPath);
    NSTask* segmentTask = [[NSTask alloc] init];
    [segmentTask setLaunchPath: segmenterPath];
    [segmentTask setArguments: segmentArguments];
    [segmentTask setStandardInput:[encodeTask standardOutput]];
    [segmentTask setStandardOutput:[NSPipe pipe]];
    [segmentTask setStandardError:[NSPipe pipe]];
    NSFileHandle *file = [[segmentTask standardOutput] fileHandleForReading];
    [file readInBackgroundAndNotify];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getData:) name:NSFileHandleReadCompletionNotification object:file];
    [segmentTask launch];
    [encodeTask launch];
    [arguments release];
    [segmentArguments release];
}
- (void) getData: (NSNotification *)aNotification
{
    NSData *data = [[aNotification userInfo] objectForKey:@"NSFileHandleNotificationDataItem"];
    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", string);
    [[aNotification object] readInBackgroundAndNotify];
}

也需要在后台读取stdererror。将它输出到管道中,但没有读取它,因此缓冲区被填满了。

最新更新