GB28181学习(十五)——流传输方式
前言
基于GB/T28181-2022版本,实时流的传输方式包括3种:
- UDP
- TCP被动
- TCP主动
UDP
流程

注意:
- m字段指定传输方式为RTP/AVP;
抓包
- SIP服务器发送INVITE请求;
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: 211v=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;
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=xxxv=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
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请求;
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: 211v=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
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=xxxv=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
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请求;
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: 211v=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
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=xxxv=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
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连接

相关文章:
GB28181学习(十五)——流传输方式
前言 基于GB/T28181-2022版本,实时流的传输方式包括3种: UDPTCP被动TCP主动 UDP 流程 注意: m字段指定传输方式为RTP/AVP; 抓包 SIP服务器发送INVITE请求; INVITE sip:xxx192.168.0.111:5060 SIP/2.0 Via: SIP…...
【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库
📮1.初识git Git 原理与使用 课程⽬标 • 技术⽬标:掌握Git企业级应⽤,深刻理解Git操作过程与操作原理,理解⼯作区,暂存区,版本库的含义 • 技术⽬标:掌握Git版本管理,⾃由进⾏版本回退、撤销、修改等Git操…...
Vue 3 中,watch 和 watchEffect 的区别
结论先行: watch 和 watchEffect 都是监听器,都是用来监听响应式数据的变化并执行相应操作。区别是: watch:需要指明要监听的数据,而且在回调函数中可以获取到属性变化的前后值; 适用于需要精确控制监视…...
鲜花展示服务预约小程序的效果如何
鲜花产品的市场需求度非常高,互联网深入各个行业,很多鲜花商家都会通过线上建立平台实现产品销售、获客引流、转化复购、生意增长等,当然除了搭建鲜花商城小程序外,对鲜花供应商及门店还有展示预约方面的需求。 通过【雨科】平台可…...
Linux下多个盘符乱的问题处理
参考文档: linux下man fstab命令查看帮助,有一段说明,可以使用UUID,或者LABEL 来绑定盘。这里使用UUID来绑定 Instead of giving the device explicitly, one may indicate the filesystem that is to be mounted by its UUID …...
uniapp小程序使用web-view组件页面分享后,点击没有home小房子解决办法
uniapp小程序使用web-view组件页面分享后,点击没有home小房子解决办法 小程序 :IOS 测试正常, 安卓 不显示home 微信小程序使用的是全局自定义导航,通过首页 banner 跳转到一个 web-view 页面,展示官网。 web-view 页…...
SLAM_语义SLAM相关论文
目录 1. 综述 2. 相关文章 Probabilistic Data Association for Semantic SLAM VSO:Visual Semantic Odometry 语义信息分割运动物体...
【技巧】并发读取Mysql数据保证读取到的数据不重复
【技巧】并发读取Mysql数据保证读取到的数据不重复 使用场景: 并发场景下, 保证不获取到重复的数据 思路: 先通过 MYSQL锁 去占位打标识,然后再去取数据 相当于几个人抢蛋糕, A先把蛋糕打上记号 蛋糕是A的, 然后再慢慢吃 表结构 表 t_userid name val used_flag 是否使用…...
Lavarel异步队列的使用
系统为window 启动队列: php artisan queue:listen设置队列类 .env文件需设置:QUEUE_CONNECTIONredis <?phpnamespace App\Jobs;use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Disp…...
JVM知识分享(PPT在资源里)
一、前言 1.自动内存管理 有句经典的话是这样说,Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要…...
整合Salesforce Org需要避免的3大风险
管理多个Salesforce实例是成长型企业可能遇到的场景,每个Salesforce实例都包含可能需要整合的关键业务数据和流程。 除了整合,组织可能会在不同的发展阶段采用Salesforce(例如CRM、服务、运营)。整合的最终结果是多个Salesforce实例被统一,并…...
viple进阶3:打印不同形状的三角形
(1)题目:打印实心的三角形(正三角) 第一步:观察图形。首行是1颗星,其余的每一行都比上一行多1颗星;其次,每一行的星号数和行数值相等,第一行有1颗星ÿ…...
pytest+yaml实现接口自动化框架
前言 httprunner 用 yaml 文件实现接口自动化框架很好用,最近在看 pytest 框架,于是参考 httprunner的用例格式,写了一个差不多的 pytest 版的简易框架 项目结构设计 项目结构完全符合 pytest 的项目结构,pytest 是查找 test_.…...
编译器使用优化后出现的busfault
遇到的问题: 未开优化是正常执行,打开优化,无法运行,定位到异常语句 //ADC_REG 是ADC结果寄存器地址 uint32 adc *(uint32 *)ADC_REG; uint32 temp adc&0xffff;未优化汇编代码 //uint32 adc *(uint32*)ADC_REG; MOVW R…...
rebase current onto selected作用
rebase current onto selected作用 "rebase current onto selected"是一个版本控制工具中的命令,通常用于将当前分支的修改合并到已选定的分支中,以保持代码库的整洁性和可维护性。 具体来说,这个命令会将当前分支的提交历史记录…...
深度学习入门
全连接批量归一化 目的是:只有一个学习率, 通过归一化,让所有的 x i x_i xi具有一样的分布,则对每个参数 w i w_i wi梯度的作用是相当的实现是:实际上是在全连接中增加了两个节点 γ \gamma γ, β \beta β 卷积…...
嵌入式图像处理机器视觉库YMCV使用
YMCV入门 一个可以免操作系统的机器视觉库,由c语言编写可以跑在单片机上。项目地址https://gitee.com/yao_mi/ymcv 使用的时候,可以参考他们的教程和demo,建议先看教程,上面有架构说明。 一个典型的应用就是渲染器,需…...
vscode设置pycharm中的项目路径和debug方法
真大佬在这 真大佬在这 必须给大佬star 命令行运行: export PYTHONPATH:pwd:/home/bennie/bennie/bennie_project/AI_Lab python main.py 当关闭此命令行时,临时路径会清除,可以将上述export的整条语句,加入~/.bashrc中 该命令中…...
10-27 maven概念
maven maven的概念模型: 项目对象模型(POM: Project object Model),一组标准集合: pom.xml 依赖管理系统(Dependency Management System) 项目生命周期(Project Lifecycle) 项目对象模型: 把项目当成一个对象,描述这个项目,使用p…...
SQL审计是什么意思?目的是什么?有什么好处?
很多刚入行的运维小伙伴对于SQL审计不是很了解,不知道其是什么意思?使用SQL审计的目的是什么?使用SQL审计的好处有哪些?这里我们大家就来一起聊聊,仅供参考哈! SQL审计是什么意思? 【回答】&…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
