海康威視視頻錄像以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)
運行情況:


