1 简介

依据GB/T28181规定,视音频文件下载,主要由三部分组成:基于SIP(rfc3261)的Invite方法实现视音频文件下载会话链路的建立;基于SIP的Message实现视音频文件下载完成通知;基于RTP/RTCP的媒体流传输。其过程相比于实况点播,也比较复杂,本节主要介绍基于SIP协议的信令交互、和实战对接中碰到的问题及解决思路。

假定本地视频平台为上级SIP域,对方为下级SIP域(硬盘录像机,或下级平台等)。

2 录像查询

在介绍视音频文件下载流程之前,先介绍下录像查询,查询出录像文件之后,才能选择某段文件对其进行下载。

Android 硬盘录像机 硬盘录像机录像下载_信令

说明:

1:上级域SIP信令网关向下级SIP域服务发送录像查询命令,录像查询命令采用Message方法携带;

2:下级SIP域服务收到命令后返回200 OK;

3:下级SIP域服务将录像文件列表信息,发送给上级域SIP信令网关,发送命令采用Message方法携带;

4:上级域SIP信令网关收到列表消息后,返回200 OK。

有了录像文件列表信息,才可以做下一步操作:录像下载。

3 下载流程

Android 硬盘录像机 硬盘录像机录像下载_信令_02

 以上流程示意图来自《GBT 28181-2016 公共安全视频监控联网系统信息传输、交换、控制技术要求》文档,按照流程图所示,本地SIP域内的媒体流接收者(客户端)、SIP服务器、媒体服务器,相互之间都存在通讯,皆由SIP信令完成。因为SIP信令交互本身比较复杂,加之交互节点众多,更增加了交互过程的复杂性。为了降低本地SIP域内各模块之间通讯的复杂性,域内模块之间交互,可自定义私有协议来完成,比如HTTP信令。

媒体流接收者(客户端)与SIP服务器之间通过HTTP交互,SIP服务器与媒体服务器之间也通过HTTP交互。SIP服务器除了与域内的媒体流接收者和媒体服务器通讯外,还与下级域的媒体发送者通过SIP完成信令交互。此时,SIP服务器实质上成为了一个SIP信令网关服务,即完成HTTP信令和SIP信令的相互转换和转发。可以用下图来简单示意:

Android 硬盘录像机 硬盘录像机录像下载_信令_03

简化后,文件下载过程的SIP信令交互,我们只需关注SIP信令网关和下级SIP域即可,如下图所示:

Android 硬盘录像机 硬盘录像机录像下载_录像查询及下载_04

说明:

1:上级SIP信令网关向下级SIP域服务发送Invite消息,消息头域中携带 Subject字段,表明下载的视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号等参数,SDP消息体中s字段为“Download”代表视音频文件下载,u字段代表下载通道ID和下载类型,t字段代表下载时间段,可扩展a字段携带下载倍速参数,规定此次下载设备发流倍速,若不携带默认为1倍速。

2:下级SIP域服务收到SIP信令网关的Invite请求后,回复200 OK响应,携带SDP消息体,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容,t字段代表下载时间段。增加y字段描述SSRC值,f字段描述媒体参数,可扩展a字段携带视音频文件大小,以便于上级域计算下载进度。当下级域没提供文件大小参数时,上级域应根据码流中获取的时间计算下载进度。

3:SIP信令网关收到下级SIP域服务返回的200 OK响应后,向其发送ACK请求,请求中不携带消息体,完成与下级SIP域服务的Invite会话建立过程。

接着下级域媒体服务将媒体流,直接发送给上级域媒体服务器。

4:文件下载结束后,下级SIP域服务向上级SIP域信令网关发送回放文件下载完成通知MESSAGE消息;

5:上级SIP信令网关收到MESSAGE请求后,响应操作并回复200 OK响应;

6: SIP信令网关向下级SIP域服务发送BYE 消息,断开消息1、2、3建立的同下级SIP服务的Invite会话。

7:下级SIP服务收到BYE消息后回复200 OK响应,会话断开,并终止发流。

4 信令抓包

抓包对象:上级SIP信令网关,与下级SIP域服务(硬盘录像机)之间的信令。如果下级域是国标平台等SIP下级域,示例抓包信令也适用。

4.1 录像查询

Android 硬盘录像机 硬盘录像机录像下载_录像查询及下载_05

Android 硬盘录像机 硬盘录像机录像下载_Android 硬盘录像机_06

Android 硬盘录像机 硬盘录像机录像下载_GB28181_07

Android 硬盘录像机 硬盘录像机录像下载_录像查询及下载_08

4.2 录像下载

Android 硬盘录像机 硬盘录像机录像下载_信令_09

Android 硬盘录像机 硬盘录像机录像下载_录像查询及下载_10

Android 硬盘录像机 硬盘录像机录像下载_GB28181_11

Android 硬盘录像机 硬盘录像机录像下载_抓包_12

Android 硬盘录像机 硬盘录像机录像下载_抓包_13

Android 硬盘录像机 硬盘录像机录像下载_Android 硬盘录像机_14

Android 硬盘录像机 硬盘录像机录像下载_抓包_15

说明:以上信令均为交互成功的抓包截图。实战中,可作为参考,来分析定位信令交互问题。

5 实战对接常见问题

实战对接中,会碰到各种各样的问题,首先要确保自己发送的录像查询、下载请求,符合国标规范。排查定位对接遇到的问题, 主要依据28181规范和wireshark抓包。定位出来谁的问题,谁修改和解决,以减少扯皮。

5.1 从下级域查询不到录像

此类现象包括以下三种情况:

第一种:向硬盘录像机发送了录像查询请求,但收不到其200 OK应答;

第二种:向硬盘录像机发送了录像查询请求,并收到了其200 OK回应。却没收到后续的录像文件列表发送消息;

第三种:硬盘录像机返回了录像文件列表消息,但消息体XML解析失败。

以上三种情况在录像回放及控制章节均有提到,这里不再多说。

5.2 选中录像文件,无法下载

排查思路:

1,根据录像下载Invite请求流程,查看流程是否走完,收流地址:端口,发流地址:端口等参数是否无误;

2,根据下级域发流端口,对其抓包,查看是否收到媒体流RTP包;

3,若收到媒体流RTP包,则要在本级域排查,媒体服务是否将RTP流转发给客户端进行本地存储。

5.3 录像下载进度问题

比较常见的问题:从硬盘录像机下载某路摄像机指定时间段录像,下载进度没达到100%时,卡住不动了。

排查思路:

1,抓包排查是否收到了硬盘录像机的“录像下载完成通知”消息(笔者与某厂家平台对接时,个别摄像机总是出现该问题,后来经抓包调查确认,是没收到对方的“录像文件下载完成通知”消息),正确的抓包见4.2 录像下载,录像文件下载完成通知抓包截图。

2,如果收到了下载完成通知消息,那么就要调查自身平台内部模块,是否将下载完成通知消息,转发给了客户端。

5.4 录像文件播放出现卡顿、花屏、绿屏

排查思路:

1,复现问题;

2,抓包,主要抓取接收的硬盘录像机原始RTP码流,抓取到后,用Wireshark分析RTP流是否存在丢包;

3,如果没丢包,调查视频参数(编码格式、分辨率、码率等)是否符合规定要求。