海康视频录像文件打包格式解析
海康威视视频录像以PS格式打包,录像设置时如将音频设置为G.711 Alaw或者Ulaw,录制下来的文件使用vlc/ffplay等标准播放器播放不出音频,需要向海康申请专用的转换库来转换,当然,打包是按照标准PS格式来打,同学们也可以自己解析文件读取另存
解析的过程按照PS包-->system header--->program stream map--->音视频PES包一路下来,海康在包中自定义了一些id,可以不理会
我手头的文件海康在系统头中定义了四个streamid,分别是0xe0,0xc0,0xbd,0xbf,前两个对应着视音频,后两个是私有数据
和program stream map中的映射如下:
规范中规定,stream id中0xC0~0xDF为音频,0xE0~0xEF为视频数据,通过表中的stream id找到相应的音视频数据包,读出数据后另存其他格式即可
需要注意的地方:
1、视频数据的pes分包
PES头中PES_packet_length是一个16位的长度,当数据一个pes包放不下时,海康使用data_alignment_indicator标志位,该位置1时,表明是起始PES包,如果置0则表示是分包数据,需要做好数据拼接
2、打包mp4文件的音频设置
我使用的是mp4v2-2.0.0库来打包mp4文件,在打包时,需要调用MP4SetFixedSampleDuration来设置相应的音轨字节(也即duration)
运行情况: