解析海康摄像机推送的PS流(节目流)

背景:由于近期项目需求,需要我们对海康推送的视频流进行解析。

根据海康后台管理平台,可以得到海康推送的视频流信息为以RTP协议推送的PS流。废话不多说,直接上码流,一步步分析。

80 60 00 00 00 00 00 00 55 66 77 8800 00 01 ba 45 74 2d b4 84 01 04 e6 6b fe
ff ff 00 5c b2 18 00 00 01 bb 00 12 82 73 35 04 e1 7f e0 e0 80 c0 c0 08 bd e0
80 bf e0 80 00 00 01 bc 00 4e e5 ff 00 24 40 0e 48 4b 01 00 e2 17 ce 2c 3a ef
00 ff ff ff 41 12 48 4b 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 00 20
1b e0 00 1c 42 0e 07 10 10 ea 07 80 04 38 11 30 00 00 1c 20 2a 0a 7f ff 00 00
07 08 1f fe f0 87 1f 79 94 46 00 00 01 e0 00 1e 8c 80 07 21 5d 0b 6d 21 ff fc
00 00 00 01 67 4d 00 2a 9d a8 1e 00 89 f9 66 e0 20 20 20 4000 00 01 e0 00 0e
8c 00 03 ff ff fc 00 00 00 01 68 ee 3c 80 00 00 01 e0 00 0e 8c 0002 ff fc 00
00 00 01 06 e5 01 85 80 00 00 01 e0 ff c6 8c 0004 ff ff ff fd 00 00 00 01 65
b8 00 00 03 02 ea c4 09 ff f8 81 13 b6 78 09 2d 07 eb 1d ec df ff d4 a4 0c f3
ed 8d 14 81 61 5c 60 fe 41 a7 13 b3 44 26 d7 0d

1.从开头解析,开头的前12位为rtp的头部信息(标黄的部分)

2.紧接着00 00 01 ba是PS的头信息,根据PS协议得知,前14位是固定位数,前14位的最后一位和32(&0x07)取模得到后面的

扩展位数

3.紧接着00 00 01 bb是系统头信息,其规则是紧跟着后面的两位表示该头部信息剩余的长度,此处为00 12转为十进制为18,也就是往后18位,为下一个头信息

4.接上面第三点得到接下来的头信息为psMap的头信息(psm),其解析和第三点类似,紧跟后面两位为长度信息,跳过该长度即为下个头信息的开头

5.接上面第四点,得到接下来的头信息为00 00 01 e0,该头信息为pes包,pes包中包含了真实视频流的信息,00 00 01 e0后面两位表示pes包的长度,隔两位,得到pes包的自减值,跳过这些位数后,后面的就是视频流信息,此处为H264视频流,开头为00 00 00 01 67

踩过的坑及原因和解决思路
坑一:解析完以后播放有花屏问题
原因:pes有丢包现象,如果通过wireshark能够抓到包,但程序没有读取,很有可能是程序里没有设置缓存

坑二:解析完以后开始播放有一层白雾,人走过就能清晰
原因:pes包没有完全解析,很多rtp中会含有两个pes包,此时要根据pes包的长度进行控制

坑三:一开始播放正常,过一会儿就开始断断续续【我这边是由于sip服务器每隔一段时间会注册一次导致的混流现象】
原因:很有可能是多个rtp会话向一个端口发送信息,此时可以在程序中将rtp包的编号输出到文件,然后在文件中查看编号的连续性,再通过wireshark进行抓包分析,查看包的连续性。



你可能感兴趣的:(流媒体)