Chien-Tai Cheng Chien-Tai Cheng - 1 year ago 320
iOS Question

Error code -8969, -12909 while decoding h264 in iOS 8 with video tool box

I have the h264 stream inAnnex B format and follow this link here to implements h264 decoding with iOS8 videoToolBox.

I check the OSStatus in every step.

  1. use CMVideoFormatDescriptionCreateFromH264ParameterSets with the SPS and PPS data to create a CMFormatDescription.(status == noErr)

  2. create a VTDecompressionSession using VTDecompressionSessionCreate. (status == noErr)

  3. capture the NALUnit payload into a CMBlockBuffer making sure to replace the start code with

    a byte length code. (status == noErr)

  4. create a CMSampleBuffer. (status == noErr)

  5. use VTDecompressionSessionDecodeFrame and get error code -8969(simulator), -12909(device) in
    callback function.

I doubt I did something wrong in step3, I am not pretty sure what the length code means. I just follow the WWDC session video replace every NALUnit start code 00 00 00 01 to 00 00 80 00. Is it right or not ? or I should check something else ?? thanks

Answer Source

Finally, Got it working now. So, I share the detail how to use the videoToolbox to decode h.264 stream data than showing on the screen.

  1. get SPS,PPS form H.264 stream data.
  2. create CMFormatDescription by using CMVideoFormatDescriptionCreateFromH264ParameterSets.
  3. create VTDecompressionSession by using VTDecompressionSessionCreate.
  4. get NALUnit payload into a CMBlockBuffer.
  5. replace the start code with a 4 byte length code. (ps: length = NALUnit length - start code length)
  6. create a CMSampleBuffer by using CMSampleBufferCreate.
  7. use VTDecompressionSessionDecodeFrame and get the result from callback.

then, you have to use dispatch_semaphore_t to control frame decoding and showing. I upload the sample project on my git. hope to help someone else.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download