gpt4 book ai didi

ios - 带有 VTDecompressionSession 的 AVSampleBufferDisplayLayer

转载 作者:行者123 更新时间:2023-11-29 12:06:55 29 4
gpt4 key购买 nike

我一直在与 AVSampleBufferDisplayLayer 作斗争,因为它真的很不稳定,有很多 Action 。当我的直播中有运动时,它会变成像素化和半卡住状态,同时显示多个帧。但是,一旦我添加了以下代码,一切就迎刃而解了:

VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression 
| kVTDecodeFrame_EnableTemporalProcessing;
VTDecodeInfoFlags flagOut;
VTDecompressionSessionDecodeFrame(decompressionSession, sampleBuffer, flags,
(void*)CFBridgingRetain(NULL), &flagOut);

请注意,我之前确实创建了解压 session ,但我实际上并未在回调中执行任何操作。我仍在调用 enqueueSampleBuffer: on AVSampleBufferDisplayLayer,这就是视频在屏幕上的显示方式。

是否必须为 AVSampleBufferDisplayLayer 调用 VTDecompressionSessionDecodeFrame 才能正确显示?我认为 AVSampleBufferDisplayLayerr 会在内部使用 VTDecompressionSessionDecodeFrame。这是因为在 iOS 模拟器上吗?

最佳答案

AVSampleBufferDisplayLayer 和 VTDecompressionSession 是两个不同的东西,虽然 AVSampleBufferDisplayLayer 可能在引擎盖下使用 VTDecompressionSession(我不知道)。您不要将它们一起使用,它是一个或另一个,其中 VTDecompressionSession 的级别低于 AVSampleBufferDisplayLayer。您不会也不应该调用 VTDecompressionSessionDecodeFrame() 来使用 AVSampleDisplayLayer enqueueSampleBuffer()。

根据您的描述,您的 PTS(演示时间戳)似乎存在时间问题。确保正确设置时基。

参见此处:Set rate at which AVSampleBufferDisplayLayer renders sample buffers

此外,请确保您按编码器顺序(它们从编码器中出来的顺序)而不是显示顺序提供 AVSampleBufferDisplayLayer 帧。

最后,确保您没有在网络上的某个地方丢弃数据包,尤其是在您使用 UDP 时。

关于ios - 带有 VTDecompressionSession 的 AVSampleBufferDisplayLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664109/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com