从零开始精通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>

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

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

相关文章

QtCreator/VS中制作带有界面的动态库

1、首先创建动态库项目 class UNTITLED25_EXPORT Untitled25 {public:Untitled25(); };2、直接右键创建同名窗口类进行覆盖 3、引入global头文件并添加到处宏</

【SSM】

Spring常见面试题总结 Spring 基础 什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块…

逆向学习数据库篇:表设计和数据库操作的核心概念与流程

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/d020891757ac​​ 在数据库管理中&#xff0c;表设计和数据库操作是两个核心环节。表设计决定了数据的组织和存储方式&#xff0c;而数据库操作则…

国内云服务购买汇总

大厂 阿里云腾讯云华为云天翼云移动云AWS百度云火山引擎金山云京东云有道智云UCloud青云七牛云又拍云LeanCloud 聊天 融云环信 AI算力 AutoDL无问芯穹 其它领域 极光推送有赞云DaoCloudmemfire cloudAuthing

转让神州开头的无区域科技公司需要多少钱

您好&#xff0c;我公司现有2家无区域神州名称的公司转让。所谓无区域名称是公司名称中不带有行政区划、及行业特点的公司名称&#xff0c;都是需要在工商总,局核准名称的&#xff0c;对于民营企业来说也比较喜欢这种名称名称很大气&#xff0c;现在重核更严格了&#xff0c;所…

【SQL】count(1)、count(*) 与 count(列名) 的区别

在 SQL 中&#xff0c;COUNT 函数用于计算查询结果集中的行数。COUNT(1)、COUNT(*) 和 COUNT(列名) 都可以用来统计行数&#xff0c;但它们在实现细节和使用场景上有一些区别。以下是详细的解释&#xff1a; 1. COUNT(1) 定义: COUNT(1) 计算查询结果集中的行数。实现: 在执行…

淘客返利系统架构设计:从零到上线

淘客返利系统架构设计&#xff1a;从零到上线 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨如何设计一个淘客返利系统&#xff0c;从零到上线的…

0基础前端视频教程 下载

0基础前端视频教程 下载 下载地址 https://download.csdn.net/download/m0_67912929/89471104 ├─01、Js基础 │ ├─01 │ │ │ 03-code.zip │ │ │ │ │ ├─01-课堂PPT │ │ │ JavaScript基础第一天.pdf │ │ │ JavaScript基础第一…

Docker如何安装redis

目录 1. 拉取redis的镜像文件 2. 创建redis的容器卷 3. 准备reids的配置文件 4. 以配置文件启动redis 1. 拉取redis的镜像文件 # 默认安装最新版本 如果需要指定版本 docker pull redis:版本号 docker pull redis 详细版本请看dockerhub的官网&#xff1a; hub.docker…

JAVA如何将图片插入word文档且不破坏原有格式,设置图片悬浮与文字之上

首先需要引入俩东西 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.com/nexus/content/groups/public/</url></repository><dependency><groupId>e…

ipmitool运维工具

查看ipmi信息 # ipmitool lan print 1 # ipmitool fru list 1. 如何查询BMC地址&#xff08;ipmitool lan print 1 不行的话&#xff0c;使用ipmitool lan print 2&#xff09; # ipmitool lan print 2|grep "IP Address" IP Address Source : BIOS Assigned Addres…

大模型应用实战3——开源大模型(以Qwen为例)实现多论对话功能

对于国内用户来说&#xff0c;一个比较稳定的下载和部署开源大模型的方法就是使用ModelScope的SDK进行下载&#xff0c;然后再Transformer库进行调用。在代码环境中&#xff0c;ollama则提供了openai API风格的大模型调用方法。在开启ollama服务情况下&#xff0c;我们只需要进…

vue3中的shallowReactive

shallowReactive只能修改reactive中浅层次的数据 格式只能修改xxx.xxx 555 不能修改 xxx.xxx.xxx <template><div>{{ sum }}{{ person }}<button click"ssum">修改sum</button><button click"sperson">修改name</…

Python中的爬虫实战:豆瓣图书爬虫

Python是当今最热门的编程语言之一&#xff0c;在不同的领域都得到了广泛的应用&#xff0c;如数据科学、人工智能、网络安全等。其中&#xff0c;python在网络爬虫领域表现出色&#xff0c;许多企业和个人利用python进行数据采集和分析。本篇文章将介绍如何使用python爬取豆瓣…

MySQL中的ibd2sdi—InnoDB表空间SDI提取实用程序

ibd2sdi 是一个用于从 InnoDB 表空间文件中提取序列化字典信息&#xff08;Serialized Dictionary Information, SDI&#xff09;的实用程序。这个实用程序可以用于提取存储在持久化 InnoDB 表空间文件中的 SDI 数据。 可以对以下类型的表空间文件使用 ibd2sdi&#xff1a; 每…

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言&#xff1a;第一部分详细讲解DDS核心框图&#xff0c;还请读者深入阅读第一部分&#xff0c;以便理解DDS核心思想 三刷小梅哥视频总结&#xff01; 小梅哥https://www.corecourse.com/lander 一、DDS简介 DDS&#xff08;Direct Digital Synthesizer&#xff09;即数字…

OneNote for Windows 10 下载

OneNote for Windows 10 安装 1.在浏览器中输入地址&#xff1a;https://apps.microsoft.com/detail/9wzdncrfhvjl?hlzh-cn&glUS2OneNote for Windows 10 - 在 Windows 上免费下载并安装 |Microsoft StoreOneNote 是用于在设备上捕获和组织你的一切内容的数字笔记本。快速…

为什么 C++ 允许不安全的代码(Bjarne Stroustrup)

为什么 C 允许不安全的代码? 也就是说&#xff0c;为什么 C 支持可以用来违反静态&#xff08;编译时&#xff09;类型安全规则的操作&#xff1f; 为了直接访问硬件&#xff08;例如&#xff0c;把整数当作指向设备寄存器的指针&#xff09;为了获取最佳的运行时效率和空间…

Content Provider:深入解析Android数据共享的核心组件

在Android开发中&#xff0c;Content Provider是一个重要的组件&#xff0c;它允许应用程序之间共享数据。它扮演着“数据访问中间层”的角色&#xff0c;为不同应用程序提供了一个统一的数据访问接口。以下将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面&#x…

BUG cn.bing.com 重定向的次数过多,无法搜索内容

BUG cn.bing.com 重定向的次数过多&#xff0c;无法搜索内容 环境 windows 11 edge浏览器详情 使用Microsoft Edge 必应搜索显示"cn.bing.com"重定向次数过多&#xff0c;无法进行正常的检索功能 解决办法 检查是否开启某些科_学_上_网&#xff08;翻_墙&#xf…