错误代码-8969,-12909,同时在iOS 8中使用video工具框解码h264

我有在附录B格式的h264stream,并按照此链接在 iOS8 videoToolBox实现h264解码。

我每一步都检查OSStatus。

  1. 使用CMVideoFormatDescriptionCreateFromH264ParameterSets与SPS和PPS数据创build一个CMFormatDescription。(status == noErr)

  2. 使用VTDecompressionSessionCreate创build一个VTDecompressionSession。 (status == noErr)

  3. 将NALUnit有效载荷捕获到CMBlockBuffer中,确保使用replace开始代码
    一个字节长度的代码。 (status == noErr)

  4. 创build一个CMSampleBuffer。 (status == noErr)

  5. 使用VTDecompressionSessionDecodeFrame并在callback函数中获得错误代码-8969(模拟器),-12909(设备)。

我怀疑我在第三步做了什么错误,我不太确定长度代码的含义。 我只是按照WWDC会话videoreplace每个NALUnit开始代码00 00 00 01到00 00 80 00.是对还是不对? 或者我应该检查别的东西? 谢谢

最后,现在得到它的工作。 所以,我分享了如何使用videoToolbox解码h.264stream数据的细节,而不是显示在屏幕上。

  1. 获得SPS,PPS格式的H.264stream数据。
  2. 使用CMVideoFormatDescriptionCreateFromH264ParameterSets创buildCMFormatDescription。
  3. 通过使用VTDecompressionSessionCreate创buildVTDecompressionSession。
  4. 将NALUnit有效载荷转换为CMBlockBuffer。
  5. 用4字节的长度代码replace开始代码。 (ps:长度= NALUnit长度 – 起始码长度)
  6. 使用CMSampleBufferCreate创build一个CMSampleBuffer。
  7. 使用VTDecompressionSessionDecodeFrame并从callback中获得结果。

那么,你必须使用dispatch_semaphore_t来控制帧解码和显示。 我上传了我的git的示例项目 。 希望能帮助别人。