GB28181学习(八)——历史视音频的回放

news2024/11/19 2:21:01

要求

  • 采用SIP协议实现会话;
  • 采用SIP扩展协议INFO方法的消息体携带视音频回放控制命令;
  • 采用RTP/RTCP实现媒体传输;
  • 媒体回放控制命令引用MANSRTSP协议中的PLAY、PAUSE、TEARDOWN的请求消息和应答消息;
  • 媒体流接收者可为SIP客户端、SIP设备(如视频解码器),媒体流发送者可为SIP设备、网关、媒体服务器;
  • 应符合媒体流保活机制;

流程

在这里插入图片描述

录像回放的流程与实时点播类似,主要区别为INVITE请求时xml格式有差异:

  • 实时点播

关于实时点播可查看:

实时点播(信令处理):https://blog.csdn.net/www_dong/article/details/132950064
实时点播(数据处理):https://blog.csdn.net/www_dong/article/details/133581370

注意:

  • “t=0 0”中开始时间和结束时间均为0表示实时点播
  • "s=Play“
static std::string CreateRealStreamSDP(const GB28181MediaContext& mediaContext)
{
    char str[500] = { 0 };
    pj_ansi_snprintf(str, 500,
                     "v=0\n"
                     "o=%s 0 0 IN IP4 %s\n"
                     "s=Play\n"
                     "c=IN IP4 %s\n"
                     "t=0 0\n"
                     "m=video %d RTP/AVP 96 98 97\n"
                     "a=recvonly\n"
                     "a=rtpmap:96 PS/90000\n"
                     "a=rtpmap:98 H264/90000\n"
                     "a=rtpmap:97 MPEG4/90000\n"
                     "y=001\n",
                     mediaContext.GetDeviceId().c_str(),
                     mediaContext.GetRecvAddress().c_str(),
                     mediaContext.GetRecvAddress().c_str(),
                     mediaContext.GetRecvPort()
                    );
    return str;
}
  • 录像回放

注意:

  • “t=%lld %lld”中开始时间和结束时间为点播的开始时间和结束时间
  • “s=Playback”
static std::string CreatePlayBackSDP(const GB28181MediaContext& mediaContext)
{
    char str[500] = { 0 };
    pj_ansi_snprintf(str, 500,
                     "v=0\n"
                     "o=%s 0 0 IN IP4 %s\n"
                     "s=Playback\n"
                     "c=IN IP4 %s\n"
                     "t=%lld %lld\n"
                     "m=video %d RTP/AVP 96 98 97\n"
                     "a=recvonly\n"
                     "a=rtpmap:96 PS/90000\n"
                     "a=rtpmap:98 H264/90000\n"
                     "a=rtpmap:97 MPEG4/90000\n"
                     "y=001\n",
                     mediaContext.GetDeviceId().c_str(),
                     mediaContext.GetRecvAddress().c_str(),
                     mediaContext.GetRecvAddress().c_str(),
                     mediaContext.GetPBStartTime(),
                     mediaContext.GetPBEndTime(),
                     mediaContext.GetRecvPort()
                    );
    return str;
}

抓包

在这里插入图片描述

查看历史文件成功后,选中某一条记录,开始录像回放。

  • 发送INVITE请求(107—>111)
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;tag=xx
To: sip:xxx@192.168.0.111
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
CSeq: xx INVITE
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, PRACK  # 支持的方法
Supported: 100rel
Subject: xxx:xx,xxx:xx
Content-Type: application/sdp
Content-Length:   233

v=0
o=xxx 0 0 IN IP4 192.168.0.107
s=Playback                  # 请求方法 
c=IN IP4 192.168.0.107
t=1697264152 1697266715     # 请求的开始时间和结束时间
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
  • 接收INVITE请求响应(111—>107)
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxx
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@192.168.0.111>
Call-ID: xxx
CSeq: 26500 INVITE
User-Agent: IP Camera
Content-Length: 0
  • 接收INVITE响应(111—>107)
# 忽略头信息
...

v=0
o=xxx 1080 1080 IN IP4 192.168.0.111
s=Playback
c=IN IP4 192.168.0.111
t=0 0
m=video 15060 RTP/AVP 96
a=sendonly
a=rtpmap:96 PS/90000   # 为PS流
a=filesize:0
y=0100000001
  • INVITE响应返回(107—>111)
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;tag=xxx
To: sip:xxx@192.168.0.111;tag=xx
Call-ID: xx
CSeq: 26500 ACK
Content-Length:  0
  • 接收数据(111—>107)

设备端以RTP协议方式发送数据,数据的封装格式为PS。

在这里插入图片描述

界面展示

历史视音频文件查询成功后,选中一条记录,右键选择录像回放,即可弹窗显示录像数据。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统上配置Python开发环境

目录 Python安装程序 运行安装程序 选择安装选项 完成安装 自动环境变量设置 手动环境变量设置 验证安装 Python安装程序 首先&#xff0c;您需要从Python官方网站&#xff08;https://www.python.org/downloads/&#xff09;下载Python的最新稳定版本。在页面上选择适用…

接口自动化测试_L3

目录&#xff1a; 整体结构响应断言 响应信息数据极为庞大&#xff0c;针对于“大响应数据”如何断言JSONSchema 简介JSONSchema 整体结构响应断言JSONSchema 的生成JSONSchema 的生成效果界面工具生成第三方库生成&#xff08;Python&#xff09;JSONSchema 验证&#xff08;…

scratch躲避陨石 2023年9月电子学会图形化编程scratch编程等级考试三级真题和答案解析

目录 scratch躲避陨石 一、题目要求 1、准备工作 2、功能实现 二、案例分析

【java学习—七】多态性(34)

文章目录 1. 概念2. 对象的多态2.1. 一2.2. 二 3. 虚拟方法的调用4. 总结 1. 概念 多态性&#xff0c;是面向对象中最重要的概念&#xff0c;在 java 中有两种体现&#xff1a; &#xff08;1&#xff09;方法的重载 (overload) 和重写 (overwrite) 。 重载&#xff1a;本类中…

Go TLS服务端绑定证书的几种方式

随着互联网的发展&#xff0c;网站提供的服务类型和规模不断扩大&#xff0c;同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下&#xff0c;一个TLS服务器通常只绑定一个证书[2]&#xff0c;但…

GEE 18:基于GEE平台的土地荒漠化监测与分析【论文复现】

Desertification 1. 研究背景1.1 参考论文1.2 参数获取1.2.1 NDVI1.2.2 Albedo1.2.3 Normalizing indices1.2.4 Calculating the quantitative relationship1.2.5 Calculating DDI2. GEE2.1 数据2.2 GEE code2.2.1 Study region2.2.2 Reomove cloud for Landsat-82.2.3 Calcula…

Rollup failed to resolve import

问题描述 我在打包vue3的项目的时候报了以下错误 问题原因 打包时&#xff0c;静态资源目录没有识别出来&#xff0c;导致打包终止并报错 问题解决 需要把路径改为跟路径&#xff0c;就可以打包啦 错误资源路径写法 <img src"src/assets/image/底部导航背景/book2…

UE5蓝图-事件、函数、事件分发器

UE5蓝图中的事件、函数、事件分发器理解及学习 1 事件 蓝图的事件在事件图表中。 事件可以进行自定义。 1.1 首先自定义一个事件HelloUE 1.2 为事件指定具体的执行体 1.3 运行事件 1.4 绑定事件到 Actor被点击 先进行事件绑定&#xff0c;绑定完成后&#xff0c;BBBB被点击…

JAVA总结01

1.变量在定义的时候可以不赋初始值&#xff0c;但在使用的时候变量必须有值 2.数据类型 数据类型字节数整型byte1short2int4long8浮点型float4double8字符型char2布尔型boolean1 浮点数默认都是double类型 上面代码报错的原因就是5.0是double类型&#xff0c;不是float类型 当…

【随笔】论多线程CPU离线渲染器的实现:A CPU BASED OFFLINE RENDERING ENGINE

前言 小熊挺喜欢玩游戏的&#xff0c;对于游戏画面有所追求&#xff0c;记得高中第一次玩战地的时候&#xff0c;惊叹于画面细腻的表现&#xff0c;并且还能开坦克车&#xff0c;这样的事情深深吸引了我。我是一个画面党&#xff0c;为了追求更好的画质表现我开始研究设置面板…

windows server 2012 查看已打了哪些补丁

打开控制面板 点击卸载程序 点击 查看已安装的更新 下图是已安装的补丁

Java反射调用jar包

反射作为托管语言的特性&#xff0c;很多框架都依赖反射来实现容器和面向接口编程&#xff0c;对架构程序很重要&#xff0c;首先试验Java的反射部分。 首先创建一个ZLZJar的工程&#xff0c;让他打包成jar包&#xff0c;代码如下 public class Test {//加两个整数public int…

WAF绕过-漏洞发现之代理池指纹探针 47

工具 工具分为综合性的&#xff0c;有awvs&#xff0c;xray&#xff0c;单点的比如wpscan专门扫描wordpress的。而我们使用工具就可能会触发waf&#xff0c; 触发点 第一个就是扫描速度&#xff0c;太快了&#xff0c;可以通过演示&#xff0c;开代理池&#xff0c;白名单绕…

美国市场三星手机超苹果 中国第一属华为

报告显示&#xff0c;截至5月份的三个月&#xff0c;iOS系统在美国、澳大利亚以及日本表现不俗。Android系统份额则在英国、德国以及法国实现增长。在中国城市地区&#xff0c;iOS份额同比基本持平&#xff0c;而Android份额则达到80.5%&#xff0c;同比增长1个百分点。 三星在…

2023-2024-1 for循环-1(1-14)

7-1 求N分之一序列前N项和 本题要求编写程序&#xff0c;计算序列 1 1/2 1/3 ... 的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S&#xff0c;精确到小数点后6位。题目保证计算结果不超过双精度范围。…

主流接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…

如何设计一个自动化测试平台

平台解决了什么问题 一般在企业内&#xff0c;技术团队如果规模比较小&#xff0c;很少会专门投入资源去做平台化的事情&#xff0c;特别是测试团队&#xff0c;无论是成本预算还是技术能力&#xff0c;先天技术能力不足&#xff0c;后天可投入的资源缺乏。 而平台的特点在于…

杭州亚运会用到哪些黑科技?

Spring实战系列文章&#xff1a; Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密&#xff1f; 国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#…

Studio one 6.5中文直装版最新版,一键安装丨无套路分享丨宿主软件丨机架直播

Studio One 6.5 具有最先进的沉浸式混音和集成的空间音频制作工作流程。还有新的插件&#xff0c;改进的乐谱功能和对 DAWproject 的支持。 PreSonus 的“.5”更新通常都有比较大的变化&#xff0c;这次也不例外。Studio One 6.5 增加了一种全新的工作方式&#xff0c;完全集成…

博弈论——博弈信息结构

博弈信息结构 0 引言 在一个博弈构成中&#xff0c;博弈信息结构是不可或缺要素。博弈信息&#xff0c;顾名思义&#xff0c;就是在博弈中&#xff0c;博弈方对于信息的了解。知己知彼&#xff0c;百战不殆。和短兵相接的战争一样&#xff0c;只有充分了解自己的优劣势&#x…