iOS 11 SDK上的VideoToolbox工作很奇怪

时间:2018-03-14 13:47:04

标签: swift h.264 compression ios11.2

我开发了H264播放器(大多数想法来自How to use VideoToolbox to decompress H.264 video stream),它完全适用于XCode 8.2.1。 但是现在我在XCode 9.2和iOS 11.2 SDK中构建了相同的项目,它在模拟器中工作,但不能在真实设备(iPad mini 2与iOS 11.2.6)上部分工作 - 它解码低比特率视频(IDR切片大小&lt ; 10 kB)但是在VTDecompressionSessionDecodeFrame()

上吐出错误-12909并且在30-50帧崩溃之后

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

一周后我发现了这个问题的原因。看起来像

CMBlockBufferCreateWithMemoryBlock工作方式不同。当我自己管理内存块并使用

调用此方法时

kCFAllocatorNull以避免内存释放,解码器失败。即使我在解码过程中,也会依次调用解码来确保内存块有效。

所以我在调用CMBlockBufferCreateWithMemoryBlock之前添加了内存块的分配和副本,并在应该释放内存块时传递nil而不是kCFAllocatorNull来使用默认的deallocator。