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

问题描述 投票:12回答:1

我有a2 B格式的h264流,并按照此链接here使用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.是不对?或者我应该检查别的东西?谢谢

ios video-streaming decode h.264
1个回答
15
投票

最后,让它现在运作。所以,我分享了如何使用VideoToolbox解码h.264流数据的细节:

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

那么,你必须使用dispatch_semaphore_t来控制帧解码和显示。我上传了sample project on my git。希望能帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.