GB28181学习(五)——实时视音频点播(信令传输部分)

要求

  • 实时视音频点播的SIP消息应通过本域或其他域的SIP服务器进行路由、转发,目标设备的实时视音频流宜通过本域的媒体服务器进行转发;
  • 采用INVITE方法实现会话连接,采用RTP/RTCP协议实现媒体传输;
  • 信令流程分为客户端主动发起和第三方呼叫控制两种方式,本文主要介绍客户端主动发起的方式;
  • 应具有媒体流保活机制;

流程

  • 客户端主动发起
    GB28181学习(五)——实时视音频点播(信令传输部分)_第1张图片

流程分析:

  1. 媒体流接收者向SIP服务器发送INVITE消息,消息头域中携带Subject字段,包括视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号标识等参数,SDP消息体中s字段为"Play"代表实时点播;
  2. SIP服务器收到INVITE请求,通过三方呼叫控制建立媒体服务器和媒体流发送者之间的媒体连接。向媒体服务器发送INVITE消息,此消息不携带SDP消息体;
  3. 媒体服务器收到SIP服务器的INVITE请求,回复200 OK,携带SDP消息体,消息体描述了媒体服务器接收媒体流的IP、端口、媒体格式等内容;
  4. SIP服务器收到媒体服务器返回的200 OK,向媒体流发送者发送INVITE请求,请求中携带步骤3)中媒体服务器回复的200 OK响应消息体,s字段为"Play"代表实时点播,y字段描述SSRC值,f字段描述媒体参数;
  5. 媒体流发送者接收SIP服务器的INVITE请求,回复200 OK,携带SDP消息体,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等;
  6. SIP服务器接收媒体流发送者返回的200 OK,向媒体服务器发送ACK请求,请求中携带步骤5)媒体流发送者回复的200 OK响应消息体,完成与媒体服务器INVITE会话建立过程;
  7. SIP服务器接收媒体流发送者返回的200 OK,向媒体流发送者发送ACK请求,请求中不携带消息体,完成与媒体流发送者INVITE会话建立过程;
  8. 完成三方呼叫控制后,SIP服务器通过B2BUA代理方式建立媒体流接收者与媒体服务器之间的媒体连接,在消息1中增加SSRC值,转发给媒体服务器;
  9. 媒体服务器收到INVITE请求,回复200 OK,携带SDP消息体,消息体中描述了媒体服务器发送媒体流的IP、端口、媒体格式、SSRC等;
  10. SIP服务器将消息9转发给媒体流接收者;
  11. 媒体流接收者收到200 OK,回复ACK,完成与SIP服务器的INVITE会话建立过程;
  12. SIP服务器将消息11转发给媒体服务器,完成与媒体服务器的INVITE会话建立过程;
  13. 媒体流接收者向SIP服务器发送BYE,断开消息1、10、11建立的同媒体流接收者的INVITE会话;
  14. SIP服务器收到BYE,回复200 OK,会话断开;
  15. SIP服务器收到BYE向媒体服务器发送BYE,断开消息8、9、12建立的同媒体服务器的INVITE会话;
  16. 媒体服务器收到BYE,回复200 OK,会话断开;
  17. SIP服务器向媒体服务器发送BYE,断开消息2、3、6建立的同媒体服务器的INVITE会话;
  18. 媒体服务器收到BYE,回复200 OK,会话断开;
  19. SIP服务器向媒体流发送者发送BYE,断开消息4、5、7建立的同媒体流发送者的INVITE会话;
  20. 媒体流发送者收到BYE,回复200 OK,会话断开;

协议

  • 消息头域Allow字段应支持INVITE、ACK、INFO、CANCEL、OPTIONS、MESSAGE方法;
  • 消息头Content-type字段应为Content-type:application/sdp;
  • SDP文本信息包括会话名称和意图、会话持续时间、构成会话的媒体、有关接收媒体的信息;
  • 源设备在SDP协议格式消息体中包括t行,t行的开始时间和结束时间都设置为0,表示实时视音频点播;
  • SDP协议格式中o行表示本设备的设备编码,c行表示设备或系统IP地址,m行为媒体接收端口号;

SDP字段说明

  • 示例
v=0
o=xxx 0 0 IN IP4 192.168.0.107
s=Play
c=IN IP4 192.168.0.107
t=0 0
m=video 36000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=xxx
  • 说明
SDP字段说明:

v字段:协议版本
o字段:-
a字段:a=rtpmap:<payload type> <encoding name>/<clock rate>  [/<encoding parameters>] 中的<encoding name>,利用该属性携带编码器厂商名称。该属性表明该流为某厂商编码器编码且是不符合gb28181规定的媒体流,符合国标的媒体流不需要该属性。
例如:a=rtpmap:96 DAHUA/90000
    a=rtpmap:96 HIKVISION/90000
a字段有下列格式:
a字段可携带倍数参数,用于文件下载时控制下载速度。格式: a=downloadspeed:下载倍数(整型)
a字段可携带文件大小参数,用于文件下载时的进度计算。格式: a=filesize:文件大小 (单位:Byte)
a字段可携带setup、connection作为TCP连接协商参数。 a=setup:TCP连接方式(表示本SDP发送者在建立RTP over TCP连接时是主动还是被动发起TCP连接,“active”为主动,“passive”为被动)
a字段可携带SVC参数,用于视频传输时的分辨率或者帧频控制。a=svcspace:空域编码方式 【取值整型。 0:不使用  1:1级增强  2:2级增强  3:3级增强 】  a = svctime:时域编码方式

s字段:表示请求媒体流的操作类型,“Play”标识为点播请求   “Playback”标识回播请求   “Download”表示文件下载  “Talk”表示语音对讲;
u字段:u行应填写视音频文件的URL。该URL的取值有两种:简捷方式和普通方式。简捷方式直接采用产生该历史媒体的媒体源(如某个摄像头)的设备ID以及相关参数,参数用“:”分隔;普通方式采样http://储存设备ID[/文件夹]*/文件名;
m字段:描述媒体的媒体类型、端口、传输层协议、负载类型等内容。媒体类型采样“video”标识视频或者视音频混合内容,采样“audio”标识传输音频内容;传输方式采用“RTP/AVP”标识传输层协议为 RTP over UDP,采用“TCP/RTP/AVP”标识传输层协议为RTP over TCP;
t字段:当回放或者下载时,t行值为开始时间,结束时间,采样“ ”分隔;
y字段:十进制整数字符串,标识SSRC值。其中第一位为历史或者实时媒体流的标识位,0为实时,1为历史;第2位到第6位取20位SIP监控域ID之中的4-8位作为域标识;第7-10位作为域内媒体流标识,是一个与当前域内产生的媒体流SSRC值后4位不充分的四位十进制整数;
f字段:f=v/编码格式/分辨率/帧率/码率类型/码率大小  a/编码格式/码率大小/采样率    其中v表示video   a表示audio

测试

操作

  1. 注册;
    GB28181学习(五)——实时视音频点播(信令传输部分)_第2张图片

  2. 注册成功后,输入点播需要的参数,点击开始按钮;

GB28181学习(五)——实时视音频点播(信令传输部分)_第3张图片

参数分析:

  • 通道编号:视频通道编码ID,如图所示;

GB28181学习(五)——实时视音频点播(信令传输部分)_第4张图片

  • 设备ip
  • 设备端口
  • 本地ip
  • 本地接收port:流媒体服务器的接收端口,用作数据接收;

抓包

GB28181学习(五)——实时视音频点播(信令传输部分)_第5张图片

  • 截图1表示发送INVITE请求;
  • 截图2表示接收数据,数据封装格式为PS;

xml分析

  1. 发送INVITE请求(107—>111)
INVITE sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=
Max-Forwards: 70
From: sip:[email protected]:5060;tag=
To: sip:[email protected]:5060
Contact: <sip:[email protected]:5060>
Call-ID: 
CSeq: 18467 INVITE
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, PRACK
Supported: 100rel
Subject: xxx:xx,xxx:xx
Content-Type: application/sdp
Content-Length:   211

v=0
o=xxx 0 0 IN IP4 192.168.0.107
s=Play
c=IN IP4 192.168.0.107
t=0 0
m=video 36000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0100000001
  1. 接收INVIE请求响应(100 Trying 111—>107)
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=
From: <sip:[email protected]:5060>;tag=
To: <sip:[email protected]:5060>
Call-ID: 
CSeq: 18467 INVITE
User-Agent: IP Camera
Content-Length: 0
  1. 接收INVITE请求响应(200 OK 111—>107)
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=
From: <sip:[email protected]:5060>;tag=
To: <sip:[email protected]:5060>;tag=
Call-ID: 
CSeq: 18467 INVITE
Contact: <sip:[email protected]:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length:   187

v=0
o=xxx 2243 2243 IN IP4 192.168.0.111
s=Play
c=IN IP4 192.168.0.111
t=0 0
m=video 15060 RTP/AVP 96
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0100000001
  1. 接收返回响应(107—>111)
ACK sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=
Max-Forwards: 70
From: sip:[email protected]:5060;tag=
To: sip:[email protected]:5060;tag=
Call-ID: 
CSeq: 18467 ACK
Content-Length:  0
  1. 断开连接(111—>107 由于暂未实现流媒体服务器,设备检测到数据接收端口不可用,主动断开连接
BYE sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.111:5060;rport;branch=
From: <sip:[email protected]:5060>;tag=
To: <sip:[email protected]:5060>;tag=
Call-ID: 
CSeq: 2 BYE
Max-Forwards: 70
User-Agent: IP Camera
Content-Length: 0
  1. 断开连接响应(107—>111)
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.111:5060;rport=5060;received=192.168.0.111;branch=
Call-ID: 
From: <sip:[email protected]:5060>;tag=
To: <sip:[email protected]:5060>;tag=
CSeq: 2 BYE
Content-Length:  0

你可能感兴趣的:(GB28181,c++,GB28181)