0

我开发了 H264 播放器(大部分想法来自How to use VideoToolbox to decompress H.264 video stream),它在 XCode 8.2.1 上完美运行。但是现在我在 XCode 9.2 和 iOS 11.2 SDK 中构建了相同的项目,它可以在模拟器中运行,但不能在真实设备(带有 iOS 11.2.6 的 iPad mini 2)上运行 - 它解码低比特率视频(IDR 切片大小 < 10 kB) 但吐出错误 -12909 并且在 VTDecompressionSessionDecodeFrame() 上 30-50 帧后崩溃

有人遇到过这个问题吗?

4

1 回答 1

0

一周后,我找到了这个问题的原因。好像

CMBlockBufferCreateWithMemoryBlock 的工作方式有所不同。当我自己管理内存块并调用此方法时

kCFAllocatorNull 避免内存释放,解码器失败。即使我调用解码 sicronously 以保证该内存块在解码期间有效。

所以我在调用 CMBlockBufferCreateWithMemoryBlock 之前添加了内存块的分配和复制,并通过 nil 代替 kCFAllocatorNull 以在应该释放内存块时使用默认释放器。

于 2018-03-26T14:28:13.187 回答