我一直在努力解决 AVSampleBufferDisplayLayer 的动作非常不稳定。当我的直播流中有运动时,它会像素化并半冻结,同时显示多个帧。但是,一旦我添加了以下代码,一切都解决了:
VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression
| kVTDecodeFrame_EnableTemporalProcessing;
VTDecodeInfoFlags flagOut;
VTDecompressionSessionDecodeFrame(decompressionSession, sampleBuffer, flags,
(void*)CFBridgingRetain(NULL), &flagOut);
请注意,我之前确实创建了解压会话,但实际上我并没有在回调中做任何事情。我仍在调用 enqueueSampleBuffer: 在 AVSampleBufferDisplayLayer 上,这就是视频在屏幕上的显示方式。
您是否必须为 AVSampleBufferDisplayLayer 调用 VTDecompressionSessionDecodeFrame 才能正确显示?我认为 AVSampleBufferDisplayLayerr 会在内部使用 VTDecompressionSessionDecodeFrame。这是因为在 iOS 模拟器上吗?