从零开始精通Onvif之音视频流传输
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。
概述
Onvif协议的核心作用之一,是定义了如何通过网络访问和控制IP摄像机和其他视频设备。Onvif协议不仅涉及设备发现、设备管理,还包括音视频流的配置和传输。设备的配置和控制通过SOAP协议实现,而音视频流传输主要基于RTSP协议进行。这一架构使得设备的配置和实时媒体流的传输得以分离,既保证了灵活性,又增强了安全性。
如果对RTSP协议感兴趣,可以移步至专栏《从零开始精通RTSP》进行学习。
工作流程
客户端使用Onvif协议和RTSP协议向设备拉流的基本工作流程如下。
首先,客户端通过发送GetProfiles请求获取设备预设的配置文件列表,每个配置文件定义了视频流的参数,比如:编码算法、分辨率、帧率等。选择合适的配置后,使用GetStreamUri方法获取具体的音视频流地址,这个地址通常是RTSP URL。
获取到流地址后,客户端通过RTSP协议与设备建立会话。这通常包括:发送OPTIONS请求获取设备的RTSP能力,然后发送DESCRIBE请求获取流的SDP描述;接下来,客户端发送SETUP请求选择传输通道和参数,最后通过PLAY命令开始音视频流的传输。
一旦RTSP会话建立并开始播放,设备便将音视频数据通过RTP封装传输给客户端。客户端解封装这些数据包,解码后即可进行音视频的渲染。在音视频流的传输过程中,客户端还可以通过RTSP的控制命令(比如:PAUSE、TEARDOWN)来暂停或结束流。
获取拉流URL
Onvif协议中的GetStreamUri方法是Media Service服务的一部分,主要用于获取网络视频设备上音视频流的访问URL。这个URL允许客户端通过标准的流媒体协议,比如:RTSP、HTTP等,来拉取实时的音视频数据流。
获取拉流URL的请求比较简单,可以参考下面的SOAP报文,其中的一些关键节点和属性描述如下。
<onv:ProfileToken>:必填项,表示设备上特定的配置文件的唯一标识符。配置文件定义了视频流的多个参数,比如:分辨率、帧率、编码格式等。
<onv:Protocol>:可选项,指定客户端期望使用的流传输协议(比如:RTSP、HTTP等)。如果不指定,默认值由设备决定,通常为RTSP,因为它是流媒体传输的常用标准协议。
<soapenv:Envelope ...><soapenv:Body><onv:GetStreamUri><onv:ProfileToken>Profile_1</onv:ProfileToken><onv:Protocol>RTSP</onv:Protocol></onv:GetStreamUri></soapenv:Body>
</soapenv:Envelope>
当设备接收到请求拉流URL的SOAP请求报文并成功处理后,会返回一个包含拉流URI的SOAP响应报文给客户端。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。
<onv:MediaUri>:表示媒体资源的URI信息。
<onv:Uri>:表示拉流的URL。通过这个URL,客户端可以获取到设备的音视频流数据。
<soapenv:Envelope ...><soapenv:Body><onv:GetStreamUriResponse><onv:MediaUri><onv:Uri>rtsp://192.168.1.100:554/channel0/h264</ns0:Uri><!-- 其他可选信息,比如:流的类型、格式、有效期等 --></onv:MediaUri></onv:GetStreamUriResponse></soapenv:Body>
</soapenv:Envelope>
相关文章:
从零开始精通Onvif之音视频流传输
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 概述 Onvif协议的核心作用之一,是定义了如何通过网络访问和控制IP摄像机和其他视频设备。Onvif协议不仅涉及设备发现、设备管理&…...
CentOS 7、Debian、Ubuntu,这些是什么意思
CentOS 7、Debian、Ubuntu 都是基于 Linux 内核的操作系统,它们各自有不同的特性和用途。以下是对它们的详细解释: CentOS 7 CentOS(Community ENTerprise Operating System) 是一个基于开源的 Linux 发行版。CentOS 7 是 CentOS …...
安装Flask
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 大多数Python包都使用pip实用工具安装,使用Virtualenv创建虚拟环境时会自动安装pip。激活虚拟环境后,pip 所在的路径会被添加…...
OSPF开销、协议优先级、定时器(华为)
#交换设备 OSPF开销值 如果没有定义OSPF接口的开销值,OSPF会根据该接口的带宽自动计算其开销值。 计算公式: 接口开销 带宽参考值 / 接口带宽 (取整数部分,结果小于1时取1)通过改变带宽参考值可以间接改变接口的开…...
接口与实现-常用实用类-Java
接口与实现 接口 使用关键字interface来定义一个接口,接口的定义分为接口声明和接口体,例如: interface Com{ ....... } 接口声明 interface 接口的名字 接口体 接口体中的抽象方法和常量 接口体中所有抽象方法的访问权限一定都是pu…...
【CSS in Depth 2 精译】1.5 渐进式增强
文章目录 1.5 渐进式增强1.5.1 利用层叠规则实现渐进式增强1.5.2 渐进式增强的选择器1.5.3 利用 supports() 实现特性查询启用浏览器实验特性 1.5 渐进式增强 要用好 CSS 这样一门不断发展演进中的语言,其中一个重要的因素就是要与时俱进,及时了解哪些功…...
k8s集群master故障恢复笔记
剔除故障节点 kubectl drain master故障节点 kubectl delete node master故障节点 kubeadm reset rm -rf /etc/kubernetes/manifests mkdir -p /etc/kubernetes/pki/etcd/ 从master其他节点拷 scp /etc/kubernetes/pki/ca.crt ca.key sa.key sa.pub front-proxy-ca.crt …...
昇思25天学习打卡营第5天|网络构建
一、简介: 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类(这个类和pytorch中的modul类是一样的作用),也是…...
Python开发日记--手撸加解密小工具(2)
目录 1. UI设计和代码生成 2.运行代码查看效果 3.小结 1. UI设计和代码生成 昨天讨论到每一类算法设计为一个Tab,利用的是TabWidget,那么接下来就要在每个Tab里设计算法必要的参数了,这里我们会用到组件有Label、PushButton、TextEdit、Ra…...
一文看懂TON链
一、背景与起源 The Open Network (TON) 的故事起始于2018年,当时全球知名的即时通讯软件Telegram计划推出自己的区块链平台及加密货币Gram,旨在构建一个既安全又高速的分布式网络,用以支持下一代去中心化应用程序(DApps)和数字资产。然而&a…...
(南京观海微电子)——TFT LCD压合技术
TFT-LCD TFT-LCD open cell后段制程主要指的是将驱动IC和PCB压合至液晶板上,这个制程主要由三个步骤组成: 1.ACF (Anisotropic Conductive Film)的涂布。 在液晶板需要压合驱动IC的地方涂布ACF,ACF又称异方性导电胶膜,特点是上下…...
神经网络实战1-Sequential
链接:https://pytorch.org/docs/1.8.1/generated/torch.nn.Sequential.html#torch.nn.Sequential 完成这样一个网络模型 第一步新建一个卷积层 self.conv1Conv2d(3,32,5)#第一步将33232输出为32通道,卷积核5*5 注意一下:输出通道数等于卷积…...
Java中如何优化数据库查询性能?
Java中如何优化数据库查询性能? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何优化数据库查询性能,这是…...
从0开发一个Chrome插件:用户反馈与更新 Chrome 插件
前言 这是《从0开发一个Chrome插件》系列的第二十二篇文章,也是最终篇,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发…...
Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接
在进行参数化读取时发现一个问题: 发现问题: requests.exceptions.ConnectionError: HTTPConnectionPool(hostlocalhost, port8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConnectionError(<url…...
基于Java作业管理系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…...
使用Kafka框架发送和接收消息(Java示例)
Kafka是一个开源的分布式流处理平台,以其在大数据和实时处理领域的广泛应用而闻名。以下是Kafka的关键特性以及它在消息传输方面的优势: 高吞吐量与低延迟:Kafka能够每秒处理数百万条消息,具有极低的延迟,这使得它非常…...
高可用电商支付架构设计方案
高可用电商支付架构设计 在现代电商业务中,支付过程是其中至关重要的一环,一个高可用、安全稳定的支付架构不仅可以提高整个系统的可靠性和扩展性,降低维护成本,还可以优化用户体验,增加用户黏性。 本文将提出一种高…...
PriorityQueue详解(含动画演示)
目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的?☆利用数组存储完全二叉树的好处? 4、PriorityQueu…...
python 字符串驻留机制
偶然发现一个python字符串的现象: >>> a 123_abc >>> b 123_abc >>> a is b True >>> c abc#123 >>> d abc#123 >>> c is d False 这是为什么呢,原来它们的id不一样。 >>> id(a)…...
避开Psins惯导仿真中的那些“坑”:ethupdate参数传递与setdiag内存操作详解
避开Psins惯导仿真中的那些“坑”:ethupdate参数传递与setdiag内存操作详解 在惯性导航系统(SINS)仿真中,Psins工具箱因其高效性和灵活性备受开发者青睐。然而,即便是经验丰富的工程师,也常在一些看似简单的…...
TMSpeech终极指南:如何在Windows上实现零延迟的本地语音实时转文字,彻底告别会议记录焦虑
TMSpeech终极指南:如何在Windows上实现零延迟的本地语音实时转文字,彻底告别会议记录焦虑 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 想象一下,当你在重要的视频会议中&#…...
router.push(‘/‘)跳转不触发重定向
我来帮你分析为什么 router.push(/) 没有按照预期跳转到 /fenlei 路径。 首先让我查看相关的代码文件: router/index.js{path: /,component: Layout,redirect: /fenlei},已查看文件 index.vue 225-240 已查看文件 index.js 65-85 现在让我查看更多上下文,…...
Whitlow/218 Linker如何革新抗体药物开发中的稳定性与生产难题?
一、抗体工程领域面临何种关键性技术瓶颈?抗体药物作为生物制药领域最具前景的治疗方向之一,在肿瘤、自身免疫疾病和传染病等重大疾病治疗中展现出卓越疗效。然而,在抗体药物研发过程中,两个关键技术难题始终制约着其进一步发展&a…...
实战指南:利用快马平台为不同项目类型智能定制idea开发环境与工具链
今天想和大家分享一个实战经验:如何根据不同项目类型,快速定制专属的IDEA开发环境。作为开发者,我们经常需要切换不同技术栈,每次手动安装插件、配置SDK的过程实在太费时间。最近发现用InsCode(快马)平台可以智能解决这个问题&…...
高效图像压缩:MozJPEG从入门到精通
高效图像压缩:MozJPEG从入门到精通 【免费下载链接】mozjpeg Improved JPEG encoder. 项目地址: https://gitcode.com/gh_mirrors/mo/mozjpeg 在数字媒体传播中,图像体积与加载速度始终是开发者面临的核心矛盾。传统JPEG压缩算法受限于基础编码框…...
保姆级教程:在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境(含常见libpython报错解决)
保姆级教程:在Ubuntu 20.04上搞定Isaac Gym Preview 4和强化学习环境(含常见libpython报错解决) 刚接触Isaac Gym的机器人/强化学习新手,往往会在环境配置阶段遇到各种依赖问题。本文将提供一个从零开始的详细安装指南,…...
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 一、直面运行库困境:三大场…...
告别云服务器开销:手把手教你用Docker Compose在本地Linux虚拟机部署Dify
告别云服务器开销:手把手教你用Docker Compose在本地Linux虚拟机部署Dify 在云计算成本不断攀升的今天,越来越多的独立开发者和小团队开始寻求更经济高效的解决方案。对于数据敏感型项目或内部测试环境而言,本地化部署不仅能显著降低长期运营…...
手机也能跑AI?实测3B以下小模型在安卓/iOS端的部署教程(附性能对比)
手机端AI模型实战:3B以下小模型在安卓/iOS的部署与优化指南 当ChatGPT需要数据中心级算力支撑时,你可能没想到自己的手机也能运行类似技术。本文将带你探索移动端AI部署的完整方案——从Termux环境配置到CoreML模型转换,实测Redmi Note 12 Tu…...
