1

NSFileHandle用来获取正在录制的视频数据。

它在通知方面工作得很好,我正在使用NSFileHandleDataAvailableNotification. 问题是视频文件最终不起作用。

每次将原始文件与使用 NSFileHandle 数据创建的文件进行比较时,总是只有几个字节是错误的,这意味着 NSFileHandle 读取它们不正确。

这就是我附加数据的方式

-(void) gotData: (NSNotification *) not{
    NSFileHandle *handle    = not.object;
    NSData *data            = [handle availableData];

    if(data.length){
        NSLog(@"got %d", data.length);
        [test appendData: data];
        [handle waitForDataInBackgroundAndNotify];
    }else{
        NSLog(@"Ended");
        [[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleDataAvailableNotification object: handle];
    }
}

这就是我最终写入数据的方式:

[test writeToFile:[NSTemporaryDirectory() stringByAppendingPathComponent:@"x.mp4"] atomically:YES];

当在原始文件和来自 NSFileHandle 的文件之间进行差异时,这里的字节错误(即使两者的大小完全相同): 在此处输入图像描述

我对这种奇怪的行为一无所知,如果您遇到类似的问题,我希望您能提供帮助。

4

1 回答 1

0

我要在这里冒个险,说没有办法NSFileHandle给你不正确的数据。我认为正在发生的是,在您获取数据之后,数据实际上正在被更改(由正在写出它的程序)。

我不知道你到底想要完成什么,所以我不能提出更好的方法。

我有一些类似的代码从另一个进程正在写出的文件中读取数据,只有我的使用readabilityHandler而不是NSFileHandleDataAvailableNotification. 我没有太多理由相信这会解决您的问题,但值得一试。我知道您可能会遇到线程问题,NSNotification因此可能需要考虑一下。

您可能应该使用[NSFileHandle offsetInFile](并根据收到的数据与您的预期位置进行比较)来检查事情是否正在倒带或其他东西。

于 2014-08-01T21:26:12.710 回答