原来测试解析mp4文件得到的h264码流都是用ffplay,没遇到什么问题,今天用vlc测试了下,发现刚开始时会有点花屏,后面就正常了。
看了下h264码流,sps与pps后第一个nalu类型为sei(附加增强信息),也就是0x00000106起始码开头的,不是I帧,所以会出现这个情况。vlc没有对sei信息做处理,导致把sei与后面数据混在一起解码处理,出现丢数据的假象,而导致花屏。vlc处理首帧的正确姿势是:SPS+ PPS + I frame。后面碰到sei类型nalu数据直接丢掉,然后送给vlc播放,就正常了。后面又测了其他mp4文件,发现这些mp4文件mdat box存储的第一个nalu类型都为sei。所以可以采取丢掉sei,读取完SPS+PPS后送给vlc后,跳过sei,从I帧开始继续送给vlc播放就可以避免播放出现花屏。
文章评论