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连接
相关推荐
2301_7779983441 分钟前
C/C++:预处理详解
c语言·c++
阿米亚波2 小时前
【C++ STL】std::unordered_multiset
开发语言·数据结构·c++·笔记·stl
随意起个昵称2 小时前
贪心模型-Johnson法则
c++·算法
蜡笔小马2 小时前
【保姆级教程】Windows 下 CGAL 6.2 + VS2022 全流程实战:从源码编译到项目集成(附避坑指南)
c++·cgal
xiaoye-duck3 小时前
《Linux系统编程》Linux 系统多线程(八): C++ 高并发线程池全链路深度解析与从零手撕实现
linux·c++·线程池
胖大和尚3 小时前
在C++的类中,是否可以把函数声明成__device__
c++·cuda
十年磨剑走天涯3 小时前
C++ STL 容器操作复杂度速查表
开发语言·c++
ziguo11224 小时前
Windows API MessageBox 函数详解
c语言·c++·windows·visualstudio
王老师青少年编程4 小时前
2023年CSP-J初赛真题及答案解析(11-15)
c++·真题·csp-j·答案·csp·初赛·信奥赛
15Moonlight4 小时前
C++进阶(09):特殊类设计
开发语言·c++