问题描述:
第一次遇到这个问题是复用后的TS流在VLC上播放正常,但在苹果手机的浏览器上无法正常播放,只有声音没有画面。
注:苹果手机自带的浏览器播放器是flash的,所以在flash播放器上一般都会有这种问题,其他播放器不确定会不会导致此问题。
为什么这么做?
在网上搜索资料查到,苹果官网说法:查看第10条 https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html
一般文档没有对AUD进行描述,其实这是一个帧开始的标志,字节顺序为:00 00 00 01 09 f0,从结构上看,有start_code, 所以确实是一个NALU,类型09在H264定义里就是AUD(分割器)。大部分播放器可以在没有AUD的情况下正常播放。紧随AUD,一般是SPS/PPS/SEI/IDR的组合或者简单就是一个SLICE,也就是一个帧的开始。像Flash这样的播放器,每次需要一个完整的帧数据,那么把2个AUD之间的数据按照格式打包给播放器就可以了。
解决办法:
在真正的帧数据之间加上AUD帧就可以了。
在ES层数据上检测到起始头start_code后判断帧类型;如果是帧类型为09不添加AUD,如果是其他则添加上AUD帧(即00 00 00 01 09 f0)。