wvp-GB28181-pro 源码分析-点播流程(三)

文章目录

  • 一 、28181-2016标准文档中的点播流程
  • 二 、点播流程源码分析
    • 2.1 页面发起点播请求
    • 2.2 与ZLM协商SSRC信息
    • 2.3 订阅zlmediakit的hook消息及发送invite信令
    • 2.4 处理invite信令响应并应答
    • 2.5 收到ZLM的推流通知
    • 2.6 播放成功
    • 2.7 停止点播流程


2024年6月20日下载的wvp-GB28181-pro,版本号为2.7.2,使用ZLMediakit主干版本。

本节阐述wvp摄像机点播流程。

一 、28181-2016标准文档中的点播流程

在这里插入图片描述
图中的媒体接收者,SIP服务器,媒体服务器和媒体发送者都是逻辑模块,在实际上可以不按照这样的步骤来完成。媒体发送者是摄像机,而媒体接收者、SIP服务器和媒体服务器是wvp和zlmediakit组成,wvp和zlmediakit内部之间通信并没有按照28181的步骤来,wvp只要实现上图的第4、5、7、19、20就可以播放视频和停止播放。至于网页、wvp跟zlmediakit之间是按照自己的私有接口格式来完成的。

附上wvp的点播流程图,可以对比分析下。
在这里插入图片描述

二 、点播流程源码分析

2.1 页面发起点播请求

接口控制类PlayController在如下包路径下:

com.genersoft.iot.vmp.vmanager.gb28181.play

在这里插入图片描述
调用playService.play(MediaServer mediaServerItem, String deviceId, String channelId, String ssrc, ErrorCallback callback),进入PlayServiceImpl类,在如下的包路径下:

com.genersoft.iot.vmp.service.impl

核心方法源码

    @Overridepublic SSRCInfo play(MediaServer mediaServerItem, String deviceId, String channelId, String ssrc, ErrorCallback<Object> callback) {if (mediaServerItem == null) {logger.warn("[点播] 未找到可用的zlm deviceId: {},channelId:{}", deviceId, channelId);throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的zlm");}Device device = redisCatchStorage.getDevice(deviceId);if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && !mediaServerItem.isRtpEnable()) {logger.warn("[点播] 单端口收流时不支持TCP主动方式收流 deviceId: {},channelId:{}", deviceId, channelId);throw new ControllerException(ErrorCode.ERROR100.getCode(), "单端口收流时不支持TCP主动方式收流");}DeviceChannel channel = channelService.getOne(deviceId, channelId);if (channel == null) {logger.warn("[点播] 未找到通道 deviceId: {},channelId:{}", deviceId, channelId);throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到通道");}InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);if (inviteInfo != null ) {if (inviteInfo.getStreamInfo() == null) {// 释放生成的ssrc,使用上一次申请的ssrcFactory.releaseSsrc(mediaServerItem.getId(), ssrc);// 点播发起了但是尚未成功, 仅注册回调等待结果即可inviteStreamService.once(InviteSessionType.PLAY, deviceId, channelId, null, callback);logger.info("[点播开始] 已经请求中,等待结果, deviceId: {}, channelId: {}", device.getDeviceId(), channelId);return inviteInfo.getSsrcInfo();}else {StreamInfo streamInfo = inviteInfo.

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

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

相关文章

程序员·职场效能必修宝典㊿:正视自己的职业倦怠

> 【易编橙终身成长社群,相遇已是上上签!】- 点击跳转~ < 作者:哈哥撩编程 (视频号同名) 图书作者:程序员职场效能宝典 博客专家:全国博客之星第四名 超级个体:COC上海社区主理人 特约讲师:谷歌亚马逊分享嘉宾

VBA语言専攻T3学员领取资料通知

各位学员∶本周MF系列VBA技术资料增加631-635讲&#xff0c;T3学员看到通知后请免费领取,领取时间6月21日晚上19:00-6月22日晚上20:00。本次增加内容&#xff1a; MF631:提取某列数据的唯一值 MF632:自动调整文本并旋转到90度 MF633:仅复制格式 MF634:Mod运算判断奇数偶数 …

又发现一款独立清理神器,界面清爽,功能强大,没有广告!

360清理Pro独立提取版是360公司推出的一款清理软件&#xff0c;主要用于清理系统垃圾和优化系统性能&#xff0c;涵盖了四大类型的清理场景&#xff0c;分别为&#xff1a;微信、QQ的垃圾扫描及清理&#xff0c;系统盘中的大文件、重复文件扫描及清理以及系统软件使用痕迹的清理…

ntpd和chronyd时间服务器配置样例及详解

本文为ntpd和chronyd时间服务器配置样例及详解&#xff0c;相关配置用于openEuler 22.03 (LTS-SP1)服务器用ntpd同步GPS时间服务器的案例 一、chronyd配置 [rootlocalhost ~]# egrep -v "^#|^$" /etc/chrony.conf server 192.168.188.74 iburst driftfile /var/lib/…

毕业答辩制作PPT【攻略】

毕业答辩制作PPT【攻略】 前言版权毕业答辩制作PPT【攻略】一、WPS AI 15天免费会员二、AI文档生成PPT三、修改完善PPT 最后 前言 2024-06-14 23:43:05 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN…

fast lio 运行mid360采集的数据,并保存每一帧的点云PCD和位姿

首先我们看到在map_incremental中存在一个保存每一帧PCD文件的代码&#xff0c;因此想利用改代码。 如何修改呢&#xff1f; 一. 改每一帧无畸变点云的PCD的保存代码 /**************** save map ****************//* 1. make sure you have enough memories/* 2. noted that…

数字化物资管理系统的未来:RFID技术的创新应用

在信息化和智能化不断发展的背景下&#xff0c;物资管理系统的数字化转型已成为各行各业关注的焦点。RFID技术作为一种先进的物联网技术&#xff0c;通过全面数字化实现物资信息的实时追踪和高效管理&#xff0c;为企业的物资管理提供了强有力的支持。 首先&#xff0c;RFID技…

linux中DNS域名解析服务(后续补充)

分离解析简介&#xff1a; 分离解析的域名服务器实际也是主域名服务器&#xff0c;这里主要是指根据不同的客户端提供不同的域名解析记录。比如来自内网和外网的不同网段地址的客户机请求解析同一域名时&#xff0c;为其提供不同的解析结果。 实验要求&#xff1a;防火墙要么关…

国内算力真的紧缺么?

苹果WWDC证实了一点&#xff1a;AI推理算力将长期处于“云端为主”的状态&#xff0c;这个“长期”至少是三到五年。对&#xff0c;苹果和OpenAI搞了一场大合作&#xff0c;打算把下一代iOS系统和ChatGPT混在一起。 这意味着未来三到五年&#xff0c;AI的推理大部分还得靠云端…

如何基于项目人力和管线方案选择FGUI和UGUI

1&#xff09;如何基于项目人力和管线方案选择FGUI和UGUI 2&#xff09;TMP字体出包丢失字体描边 3&#xff09;如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用 4&#xff09;为什么我的水这么干净&#xff0c;和UE教程里的有差别 这是第390篇UWA技术知识分享的…

Javase.认识异常

认识异常 【本章目标】1. 异常的概念与体系结构1.1 异常的概念1.2 异常的体系结构1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.2 try-catch捕获并处理2.3.3 finally2.4 异常的处理流程 3. 自定义异常类 【本章目标】 异常概念与体系结构异常的…

c++删除容器的第一个元素

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

技术实践:基于百数低代码平台的学生档案管理系统搭建

在数字化时代&#xff0c;信息技术的应用已经渗透到社会的各个角落&#xff0c;教育领域也不例外。学生档案管理作为学校日常运作的重要一环&#xff0c;其信息化、智能化的需求日益凸显。特别是在拥有多个校区的大型学校中&#xff0c;如何高效、准确地管理学生档案&#xff0…

高可用-LNMP平台(keepalived、linux、nginx、mysql|mariadb、php、nfs)--持续创作中

网络架构搭建组建 load balance&#xff08;负载均衡组&#xff09; lb1:192.168.8.5 lb2:192.168.8.6 web&#xff08;nginx组&#xff09; web1:192.168.8.7 web2:192.168.8.8 php&#xff08;动态解析服务器&#xff09; php&#xff1a;192.168.8.9 mysql&#xff08;数据…

el-input-number 限制输入正整数

vue 页面 限制输入最小值为0 :min"0" <el-input-number v-model"scope.row.num" change"handleNumChange(scope)" keydown.enter.prevent style"width: 200px; " :min"0" />methods 里面限制输入的数字不为小数 使…

Junit4测试基本应用(白盒测试)

Junit4测试基本应用&#xff08;白盒测试&#xff09; 一、实验目的 掌握Junit的基本操作&#xff0c;进行较简单的单元测试。 二、Junit4测试的使用 1. 创建java项目JUnitText 我使用的Eclipse&#xff0c;在左侧Package Explorer(包资源管理器)右键&#xff0c;新建Java …

使用pyside6的QWebEngineView保存和读取cookie

网上很多都没讲全&#xff0c;对于刚了解的朋友不太友好&#xff0c;自己整理下记录下pyside6的QWebEngineView如何使用并保存和读取cookie的&#xff0c;解决当程序退出后重复登录的问题&#xff1a; from PySide6.QtWidgets import QApplication, QMainWindow from PySide6.…

python socket写客户端

客户端开发流程 1、创建客户端套接字对象 2、和服务端套接字建立连接 3、发送数据 4、接收数据 5、关闭客户端套接字 注意&#xff1a;客户端是指运行在用户的设备上&#xff0c;服务端是指运行在服务器设备上的&#xff0c;专门为客户端提供数据服务 socket类的使用 1、导入so…

若依 ruoyi 排序 顺序 倒序 的实现

1. table标签新增排序相关属性 // :default-sort"defaultSort" 指定默认排序 // sort-change"handleSortChange" 指定排序点击事件 :default-sort"defaultSort" sort-change"handleSortChange" 2. 列上新增排序相关配置 自定义查询语…

mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版

Magnet 是一款针对 MacOS 系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口&#xff0c;通过简单的快捷键操作&#xff0c;可以将窗口自动调整到指定的位置和大小&#xff0c;实现多窗口快速布局。Magnet 还支持多显示器环境下的窗口管理&#xff0c;可…