[英]iOS ALAssetsLibrary and NSFileHandle reading file contents
[英]NSFileHandle reading corrupt data from Video file
我正在使用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的文件之间进行比较时,这是错误的字节(即使两者的大小完全相同):
对于这种陌生人的行为,我真的一无所知,如果您遇到类似的问题,我很乐意为您提供帮助。
我要在这里走出去,说NSFileHandle
不可能给您错误的数据。 我认为正在发生的是,该数据实际上是被改变(由被写出来的程序),你已经得到的数据之后 。
我不知道您到底想完成什么,所以我不能建议更好的方法。
我有一些类似的代码,可以从另一个进程正在写出的文件中读取数据,只有我使用readabilityHandler
而不是NSFileHandleDataAvailableNotification
。 我没有太多理由相信这可以解决您的问题,但这是一种尝试。 我知道您可能会遇到NSNotification
线程问题,因此可能需要考虑一下。
您可能应该使用[NSFileHandle offsetInFile]
(并根据接收到的数据与您的预期位置进行比较),以检查是否倒回东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.