我正在使用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中的文件之间执行 diff 时,这里的字节错误(即使两者的大小完全相同):
我真的对这种陌生人的行为一无所知,如果你遇到类似的问题,我会非常乐意帮助你。
答案 0 :(得分:0)
我会在这里走出去,说NSFileHandle
没有办法给你不正确的数据。我认为正在发生的事情是数据实际上正在被更改(通过正在编写的程序)在获得数据之后。
我不知道你想要完成什么,所以我不能建议一个更好的方法。
我有一些类似的代码从另一个进程写出的文件中读取数据,只有我使用readabilityHandler
代替NSFileHandleDataAvailableNotification
。我没有太多理由相信这会解决你的问题,但这是一个尝试。我知道您可能遇到NSNotification
的线程问题,因此可能需要注意。
您可能应该使用[NSFileHandle offsetInFile]
(并根据收到的数据与您的预期位置进行比较)来检查事情是否正在倒闭或其他事情。