我开发了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帧崩溃之后有人遇到过这个问题吗?
答案 0 :(得分:0)
一周后我发现了这个问题的原因。看起来像
CMBlockBufferCreateWithMemoryBlock工作方式不同。当我自己管理内存块并使用
调用此方法时kCFAllocatorNull以避免内存释放,解码器失败。即使我在解码过程中,也会依次调用解码来确保内存块有效。
所以我在调用CMBlockBufferCreateWithMemoryBlock之前添加了内存块的分配和副本,并在应该释放内存块时传递nil而不是kCFAllocatorNull来使用默认的deallocator。