使用视频工具箱在iOS 8中解码h264时出现错误代码-8969,-12909

Ale*_*eng 13 decode video-streaming h.264 ios

我有a2 B格式的h264流,并在此处链接此链接以使用iOS8 videoToolBox实现h264解码.

我在每一步都检查OSStatus.

  1. 使用带有SPS和PPS数据的CMVideoFormatDescriptionCreateFromH264ParameterSets创建CMFormatDescription.(status == noErr)

  2. 使用VTDecompressionSessionCreate创建VTDecompressionSession.(status == noErr)

  3. 将NALUnit有效负载捕获到CMBlockBuffer中,确保用
    字节长度代码替换起始代码.(status == noErr)

  4. 创建一个CMSampleBuffer.(status == noErr)

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

我怀疑我在第3步中做错了什么,我不太清楚长码是什么意思.我只是按照WWDC会话视频替换每个NALUnit开始代码00 00 00 01到00 00 80 00.是不对?或者我应该检查别的东西?谢谢

Ale*_*eng 16

最后,现在就开始工作了.因此,我分享了如何使用videoToolbox解码h.264流数据的详细信息,而不是在屏幕上显示.

  1. 获得SPS,PPS形成H.264流数据.
  2. 使用CMVideoFormatDescriptionCreateFromH264ParameterSets创建CMFormatDescription.
  3. 使用VTDecompressionSessionCreate创建VTDecompressionSession.
  4. 将NALUnit有效负载转换为CMBlockBuffer.
  5. 用4字节长度代码替换起始代码.(ps:length = NALUnit长度 - 开始代码长度)
  6. 使用CMSampleBufferCreate创建CMSampleBuffer.
  7. 使用VTDecompressionSessionDecodeFrame并从回调中获取结果.

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

  • 谢谢!查看代码让我意识到我不是字节交换NALU长度代码.它必须采用大端格式. (2认同)
  • 链接坏了.你碰巧在其他地方上传了VideoToolboxDemo吗?这正是我想要做的事情,我正在努力. (2认同)