GB28181学习(十五)——流传输方式

前言

基于GB/T28181-2022版本,实时流的传输方式包括3种:

  • UDP
  • TCP被动
  • TCP主动

UDP

流程

注意:

  • m字段指定传输方式为RTP/AVP;

抓包

  • SIP服务器发送INVITE请求;
bash 复制代码
INVITE sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
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   # 36000为SIP服务数据接收端口
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0100000001
  • 设备返回200 OK;
bash 复制代码
SIP/2.0 200 OK
Call-ID: xxx
Contact: <sip:sss@192.168.0.111:5060>
Content-Length: 226
Content-Type: application/sdp
CSeq: 18467 INVITE
From: <sip:xxx@192.168.0.107:5060>;tag=xxx
To: <sip:xxx@192.168.0.111:5060>;tag=xxx
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxx

v=0
o=34020000001310000002 0 0 IN IP4 192.168.0.111
s=Play
i=VCam Live Video
c=IN IP4 192.168.0.111
t=0 0
m=video 9712 RTP/AVP 96     # 9712为设备端数据发送端口
a=sendonly
a=rtpmap:96 PS/90000
a=streamprofile:0
y=0100000001
f=v/0/0/0/0/0a/0/0/0
  • SIP服务器返回ACK
bash 复制代码
ACK sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060;tag=xxx
Call-ID: xxx
CSeq: 18467 ACK
Content-Length:  0

TCP被动

流程

注意:

  • m字段指定传输方式为TCP/RTP/AVP;
  • sdp信息中增加"a=setup:passive";
  • SIP服务器启动端口监听,设备发起tcp连接请求;

抓包

  • SIP服务器发送INVITE请求;
bash 复制代码
INVITE sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
CSeq: 18480 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 TCP/RTP/AVP 96 98 97 
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
a=setup:passive
y=0100000001
  • 设备返回200 OK
bash 复制代码
SIP/2.0 200 OK
Call-ID: xxx
Contact: <sip:xxx@192.168.0.111:5060>
Content-Length: 264
Content-Type: application/sdp
CSeq: 18480 INVITE
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@192.168.0.111>;tag=xxx
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxx

v=0
o=xxx 0 0 IN IP4 192.168.0.111
s=Play
i=VCam Live Video
c=IN IP4 192.168.0.111
t=0 0
m=video 9724 TCP/RTP/AVP 96    # 9724为设备端数据发送端口
a=sendonly
a=rtpmap:96 PS/90000           # 流数据为PS封装
a=streamprofile:0
a=setup:active                 # 设备为主动发送方
a=connection:new
y=0100000001
f=v/0/0/0/0/0a/0/0/0
  • SIP服务器返回ACK
bash 复制代码
ACK sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060;tag=xxx
Call-ID: xxx
CSeq: 18480 ACK
Content-Length:  0

TCP主动

流程

注意:

  • m字段指定传输方式为TCP/RTP/AVP;
  • sdp信息中增加"a=setup:active";
  • 设备返回200 OK,报文的SDP信息中包含tcp监听端口;
  • SIP服务器根据设备监听端口发起TCP连接请求;

抓包

  • SIP服务器发送INVITE请求;
bash 复制代码
INVITE sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
CSeq: 19100 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 38000 TCP/RTP/AVP 96 98 97 
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
a=setup:active
y=0100000001
  • 设备返回200 OK
bash 复制代码
SIP/2.0 200 OK
Call-ID: xxx
Contact: <sip:xxx@192.168.0.111:5060>
Content-Length: 264
Content-Type: application/sdp
CSeq: 19100 INVITE
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@192.168.0.111>;tag=xxx
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxx

v=0
o=xxx 0 0 IN IP4 192.168.0.111
s=Play
i=VCam Live Video
c=IN IP4 192.168.0.111
t=0 0
m=video 9704 TCP/RTP/AVP 96    # 9704为设备端监听
a=sendonly
a=rtpmap:96 PS/90000           # 流数据为PS封装
a=streamprofile:0
a=setup:passive                # 设备为被动接收方
a=connection:new
y=0100000001
f=v/0/0/0/0/0a/0/0/0
  • SIP服务器返回ACK
bash 复制代码
ACK sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107:5060;tag=xxx
To: sip:xxx@192.168.0.111:5060;tag=xxx
Call-ID: xxx
CSeq: 19100 ACK
Content-Length:  0
  • SIP服务器主动发起tcp连接
相关推荐
River4162 小时前
Javer 学 c++(十三):引用篇
c++·后端
感哥4 小时前
C++ std::set
c++
侃侃_天下5 小时前
最终的信号类
开发语言·c++·算法
博笙困了5 小时前
AcWing学习——差分
c++·算法
青草地溪水旁6 小时前
设计模式(C++)详解—抽象工厂模式 (Abstract Factory)(2)
c++·设计模式·抽象工厂模式
青草地溪水旁6 小时前
设计模式(C++)详解—抽象工厂模式 (Abstract Factory)(1)
c++·设计模式·抽象工厂模式
感哥6 小时前
C++ std::vector
c++
zl_dfq6 小时前
C++ 之【C++11的简介】(可变参数模板、lambda表达式、function\bind包装器)
c++
每天回答3个问题6 小时前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
凯子坚持 c6 小时前
精通 Redis list:使用 redis-plus-plus 的现代 C++ 实践深度解析
c++·redis·list