海康视频录像文件打包格式解析

海康威视视频录像以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)

 

 

运行情况:

 

posted @ 2017-05-23 18:00  黑车司机  阅读(9008)  评论(0编辑  收藏  举报