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

时间:2014-10-28 06:00:39

标签: ios video-streaming decode h.264

我有a2 B格式的h264流,并按照此链接here使用iOS8 videoToolBox实现h264解码。

我在每一步都检查OSStatus。

  1. 将CMVideoFormatDescriptionCreateFromH264ParameterSets与SPS和PPS数据一起使用以创建CMFormatDescription。(status == noErr)

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

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

  4. 创建CMSampleBuffer。 (status == noErr)

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

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

1 个答案:

答案 0 :(得分:15)

最后,现在就开始工作了。 因此,我分享了有关如何使用VideoToolbox解码h.264流数据的详细信息:

  1. 获取SPS&来自H.264流数据(或SDP)的PPS NALU
  2. 使用CMFormatDescription创建CMVideoFormatDescriptionCreateFromH264ParameterSets
  3. 使用VTDecompressionSession创建VTDecompressionSessionCreate
  4. 将NALUnit有效负载转换为CMBlockBuffer
  5. 用4字节长度的代码替换起始码。 (ps:length = NALUnit length - 起始代码长度)
  6. 使用CMSampleBuffer创建CMSampleBufferCreate
  7. 使用VTDecompressionSessionDecodeFrame并从回调中获取结果。
  8. 然后,你必须使用dispatch_semaphore_t来控制帧解码和显示。 我上传了sample project on my git。希望能帮助别人。