背景
我们的项目是基于sip的IMS系统,需要添加对海康28181摄像头的支持,所以分为以下几步:
- 向海康摄像头发起点播请求,基于sip.
- PS流过来后,剥出h264流.
- 对h264流进行解码.
一.发起sip请求
按照GB28181的规范,sip头域必须携带subject字段,to字段必须是摄像头的视频编码通道ID,sdp中s行固定为play,需添加一个a行描述为PS流,sdp中不可携带audio信息,详细可见这里的描述:28181摄像头sip格式
二.分析PS流结构
由于之前没有接触过ps流的格式,所以在网上看了下mpeg-2 ps流的介绍,感觉还是模棱两可。突然想起live555是支持mpg文件,所以直接看live555的源码,发现live555中就支持对mpeg-2的解析,同sip终端将拉过来的海康摄像头PS流存文件,用live555进行调试,发现live555解析失败,通过打开日志查看,原来live555中没有对ps system map进行解析,所以当出现这种类型的包时,其认为是video sequence slice包,所以会解析失败。
live555中有对整个解析过程都有日志打印,并且整个解析代码写的很清晰,通过对解析过程日志的分析,可以得出HK 28181摄像头 PS流的封包格式
PSheader| PS system header | PS system Map | PES header | h264 raw data
三.总结
虽然网上也有很多对海康PS流格式的描述,但是对从来没有接触过的人来说,光看文字描述还是过于抽象。在音视频开发领域,协议和格式是有限的,有很多优秀的开源项目供提供了广泛的支持,对陌生的格式或协议,通过借鉴开源项目,可以加深自己对格式或协议的理解。