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;系统盘中的大文件、重复文件扫描及清理以及系统软件使用痕迹的清理…

毕业答辩制作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;防火墙要么关…

如何基于项目人力和管线方案选择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. 自定义异常类 【本章目标】 异常概念与体系结构异常的…

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

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

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 …

若依 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;可…

JAVA每日总结day6.21

ok了家人们&#xff0c;今天我们学习了面向对象中关键字的使用和抽象类&#xff0c;话不多说&#xff0c;我们一起看看吧&#xff0c;&#xff08;今天终于星期五了&#xff0c;芜湖&#xff01;&#xff01;&#xff01;&#xff09; 一&#xff0c;this和super关键字 1&…

kakfa发版丢消息事件分析

背景 其他部门同事反馈在项目发版/重启(kill -15)的那段时间&#xff0c;经常会出现导致 C 端业务出现问题&#xff0c;从而产生资损 一听资损&#xff0c;赶紧应答下来&#xff0c;了解了下具体情况&#xff0c;然后立马去排查了 问题分析 结合同事的描述以及对业务的了解&a…

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层&#xff08;Input Layer&#xff09;2. 隐藏层&#xff08;Hidden Layers&#xff09;3. 输出层&#xff08;Output Layer&#xff09;整体流程深度神经网络的优点深度神经…

Redis-事务-基本操作-在执行阶段出错不会回滚

文章目录 1、Redis事务控制命令2、Redis事务错误处理3、Redis事务错误处理&#xff0c;在执行阶段出错不会回滚 1、Redis事务控制命令 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> set a1 v1 QUEUED 127.0.0.1:6379(TX)>…

深度学习前10节

1.机器学习的流程 (1)数据获取 &#xff08;2&#xff09;特征工程 &#xff08;3&#xff09;建立模型 &#xff08;4&#xff09;评估与应用 2.特征工程的作用 &#xff08;1&#xff09;数据特征决定了模型的上限 &#xff08;2&#xff09;预处理和特征提取是最核心的 &…

【Android面试八股文】你能说一说自定义View与ViewGroup的区别

文章目录 Android UI 组件:View 和 ViewGroupViewGroup 的职责View 的职责自定义 View 和 ViewGroup 的区别1. 继承的类不同2. 主要功能不同3. 重写方法不同4. 使用场景不同5. 事件分发方面的区别6. UI 绘制方面的区别Android UI 组件:View 和 ViewGroup 在 Android 开发中,…