0
我正在写一个应用程序,它使用AVKit读取一个视频文件,并对每一帧执行一些操作,最后生成一个输出图像。AVAssetReaderTrackOutput有时提供空白视频帧
首先,我将资源加载,与AVURLAssetPreferPreciseDurationAndTimingKey
设置为YES
,然后我找到的第一个视频轨道,并创建一个资产读者,并设置为kCVPixelFormatType_32BGRA
减压设置的资产读卡器输出 - 根据文档,这是一个这里少数允许的值。
然后我打电话copyNextSampleBuffer
在一个循环,并做所产生的CMSampleBufferRef
如下:
CVImageBufferRef movieFrame = CMSampleBufferGetImageBuffer(sampleBuffer);
NSCIImageRep *imageRep = [NSCIImageRep
imageRepWithCIImage:[CIImage imageWithCVImageBuffer:movieFrame]];
NSImage *image = [[NSImage alloc] initWithSize:[imageRep size]];
[image addRepresentation:imageRep];
在大多数情况下,这工作正常。但是,有些视频会生成偶尔的空白帧,还有一些视频会为每个帧留出空白。我在这里做了明显错误的事吗?