由于最近在弄编解码的东西,抽空写了个摄像头录像机工具。
视频使用x264编码,音频使用AAC(音频还在添加中)。
录像文件挑了个看上去格式最简单的FLV格式,但没想到折腾了半天。
不清楚FLV里的H.264的tag数据内容到底是怎么写,开始我是把编码后的数据直接打进tag中。
结果使用射手影音播放器,有些机器能正常播放,有些图像缺是花了。
后来干脆将所有的NALU全部分离了,只留下NALU_TYPE_IDR,NALU_TYPE_SLICE这两个裸数据,
反正FLV文件头中已经带了,sps,pps数据,去除startcode后,终于所有机器都能都正常播放了。
由于是裸264数据,写264实际数据前需要插入4个字节的长度信息,所以整个tag长度需要+4
实际的内存分布是tag头12字节,加4字节264 AVCPacketType 和 CompositionTime,然后就是
4字节的数据长度,再写裸的IDR和SLICE.
这样分布
12byte tag头 | 4字节264avtype&ctime | 4字节长度信息 | 裸IDR和SLICE