我终于顺利搞定了
已经可以利用videotoolbox decode h.264 stream到手机上
由于目前相关的资源很少,所以分享一下要注意的事项
length code的取得
1. 将NALUnit的lengh - 4byte(start code length)
2. 转成16进制,取代原本NALUnit start code.
ex. 假设此unit 长度 1284,因此要转换的长度 = 1284 - 4
将1280 转成16进制 500
取代原本 unit start code的位置 00 00 00 01 -> 00 00 05 00
我也把目前完成的范例放在git上
希望可以帮助有需要的人
https://github.com/htaiwan/-VideoToolboxDemo
※ 引述《htaiwan (健康的台湾)》之铭言:
: 嗨,各位前辈好
: 小弟目前正在利用ios8 videoToolBox进行H.264 stream decode
: 由于网络上的相关资源实在真的太少了,不知道有没有前辈也有作相关研究
: 小弟目前的状况是要解析的是AnnexB的h.264 stream
: 根据在WWDC和stackoverflow所爬的文,进行下列动作
: 每一个动作都有确认OSStatus
: 1. 抓出h264的SPS,PPS产生CMFormatDescription(status == noErr)
: 2. 产生VTDecompressionSession(status == noErr)
: 3. 将每个NAL unit的statr code 转成length code,
: 然后产生CMBlockBuffer(status == noErr)
: 4. 产生CMSampleBuffer(status == noErr)
: 5. 最后利用VTDecompressionSessionDecodeFrame的callback function取回
: 解码后的结果。但这时回传error code -8969(simulator), -12909(device)
: 我不太清楚是哪里作错了? 但我在猜有可能是在step 3出错,因为我不太确定所谓
: 的length code是指什么,我只是单纯照WWDC 2014 seseeion video513中所提到
: 将每个NAL unit的statr code 00 00 00 01 转成 00 00 80 00。
: 不知道版上有前辈可以指导或提供debug方向吗,谢谢。