繁体   English   中英

NSFileHandle从视频文件读取损坏的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM