国标28181的PS流是打包在rtp中,传输给接收端播放的,如果要获取PS流的数据,就要把RTP包头去掉,拼在一起就是一个PS文件,这个文件是可以播放的。不过实际遇到的一个问题就是只有视频能播放,但声音出不来,用的是ffplay和vlc都一样。在用ffprobe查看流的信息,发现音频没有认出来。这是因为其中的音频流是G.711A,缺少声道和采样率的信息,这不像mp3音频格式每一帧都含有。ffmpeg中关于PS流解析的源码位于libavformat\mpeg.c,通过研究发现需要在保存PS流到文件的时候,先写入6个字节的文件头,其内容要求前4个字节为“IMKH”,表明这是海康的PS流,国标28181的音频G.711A的格式默认成单声道,8000,16位。这样一来,用ffprobe就能识别出音频流了,ffplay也能播放了。补充说明的是PS流中要包含PSM头(没有这个就不知道媒体类型,当然不能播放了),而系统头没有用到。
如有问题需要讨论,可加入流媒体技术与人工智能算法群(386281755)提问。