当前位置: 首页 > news >正文

从零开始精通Onvif之录像存储

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

概述

        Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作,为录像的存储、检索和播放提供了标准化的接口。

        Media服务:负责视频流的配置和传输,包括实时流和录像流。一般来说,实时流对应子码流,录像流对应主码流。Media服务定义了如何配置录像参数(包括:编码格式、分辨率、帧率、码率等),以及如何申请主子码流。

        Recording服务:负责录像的管理,允许客户端创建、修改和删除录像配置文件,查询可用的录像,以及管理录像存储策略等。用户还可以设定录像计划、存储位置、录像触发条件等。

        Replay服务: 负责录像的检索和回放,用户可以根据时间段、事件类型、录像ID等多种条件检索录像片段,并请求回放指定的录像数据。

工作机制

        针对录像存储,Onvif协议内嵌了一系列服务和消息交互流程,涵盖配置、存储、检索到回放的全过程。

        1、录像配置。

        通过Onvif的Recording服务,客户端可以灵活配置录像的各项参数。这不仅包括设定录像计划、指定存储目的地,还包括设置录像的质量参数(比如:分辨率、帧率、码率等)、保存天数等。

        2、录像检索。

        客户端根据需要构建录像检索参数,包括开始时间、结束时间、通道ID、事件类型等。利用构建好的检索参数,客户端通过FindRecordings操作向设备发送请求,开始录像搜索。该操作可能会立即返回搜索结果,也可能先返回一个搜索令牌。

        如果返回的是搜索令牌,客户端需要使用GetRecordingSearchResults操作,并传递该令牌来获取实际的录像检索结果。对于每一个检索到的录像条目,我们可以进一步使用GetRecordingInformation获取详细的录像信息。

        3、录像回放。

        针对选定的录像条目,我们可以使用GetReplayUri操作请求一个回放的URI。这个URI指向录像的实际音视频数据,既可以用于播放,也可以用于下载。播放和下载,可以使用RTSP协议,通过回放URI建立到设备的流媒体会话,进而传输音视频流。

录像配置

        录像存储首先需要配置录像计划,这包括设定录像的触发条件(时间计划、运动检测等)、存储位置(本地存储、网络存储等)、录像质量(分辨率、帧率、码率等)。比如:可以设定工作日的办公时间自动开启高清录像,非工作时间则降低画质以节省存储空间。

        在Onvif中,可以通过ModifyRecordingSettings操作来更新录像计划。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。

        <ns:RecordingToken>:表示要修改的录像配置的唯一标识符。

        <ns:TimeRangeList>:表示录像计划,可以包含多个时间范围。

        <ns:TimeRange>:定义了录像开始和结束的具体时间。

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:ns="http://www.onvif.org/ver10/media/wsdl"><soapenv:Header><wsa:Action>http://www.onvif.org/ver10/media/wsdl/ModifyRecordingSettings</wsa:Action><wsa:To>http://[IP]:[Port]/onvif/media_service</wsa:To></soapenv:Header><soapenv:Body><ns:ModifyRecordingSettings><ns:RecordingToken>[Recording_Token]</ns:RecordingToken><ns:Schedule><!-- 定义录像计划 --><ns:TimeRangeList><ns:TimeRange><ns:From>2024-06-10T08:00:00Z</ns:From><ns:To>2024-06-10T18:00:00Z</ns:To></ns:TimeRange><!-- 可添加多个TimeRange,以定义更复杂的计划 --></ns:TimeRangeList></ns:Schedule></ns:ModifyRecordingSettings></soapenv:Body>
</soapenv:Envelope>

录像检索

        Onvif协议支持动态存储策略,比如:循环覆盖、事件优先等。当存储空间达到阈值时,旧的录像数据会被自动覆盖,保证最新数据始终可用。另外,基于报警事件(比如:移动侦测)的录像可以被标记为不可覆盖,确保关键数据的长期储存。

        Onvif协议中检索录像主要通过FindRecordings操作来实现,可以参考下面的示例报文。

        <ns:SourceToken>:标识录像资源的字符串,通常对应于摄像头通道,或其他录像源的唯一标识符。比如:Channel1代表第一个摄像头的录像资源。

        <ns:Begin>:表示录像检索的开始时间,按照ISO 8601标准格式表示。比如:2024-06-10T00:00:00Z代表2024年6月10日午夜零点整(UTC时间)。

        <ns:End>:表示录像检索的结束时间,同样遵循ISO 8601标准格式。

        <ns:EventFilter>:如果录像与特定事件(比如:移动侦测、视频遮挡等)关联,可以通过此元素指定事件类型来过滤录像。

        <ns:StateFilter>:用于过滤录像的状态(比如:只检索已完成的录像,或正在进行的录像)。

        <ns:MaxMatches>:用于限制返回的最大录像数,有助于分页处理大量结果。

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelopexmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:ns="http://www.onvif.org/ver10/media/wsdl"><soapenv:Body><ns:FindRecordings><!-- 搜索过滤条件 --><ns:SearchCriteria><ns:Source><!-- 录像来源,比如:通道ID --><ns:SourceToken>Channel1</ns:SourceToken></ns:Source><ns:TimeRange><ns:Begin>2024-06-01T00:00:00Z</ns:Begin><ns:End>2024-06-30T23:59:59Z</ns:End></ns:TimeRange><!-- 可以添加更多过滤条件,比如:事件类型过滤等 --></ns:SearchCriteria><!-- 其他可选参数 --></ns:FindRecordings></soapenv:Body>
</soapenv:Envelope>

        当客户端发起录像检索请求后,设备通常会以SOAP报文的形式返回检索结果,这些结果包含找到的录像段信息。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。

        <ns:RecordingInformationList>:表示一个或多个录像信息条目。

        <ns:RecordingInformation>:表示每个录像的信息。

        <ns:RecordingToken>:表示录像的唯一标识符,每个录像文件的Token是不同的。

        <ns:Source>:表示录像的来源信息(比如:通道或者源设备)。

        <ns:StartTime/StopTime>:表示录像的起止时间。

        <ns:Duration>:表示录像的持续时间。

        <ns:Content>:表示录像的内容描述,可能包含录像的大小、数据范围等。

        <ns:TrackInformationList>:可选参数,如果有多个轨道(比如:视频、音频、文本等),会列出每个轨道的详细信息。

<soapenv:Envelope ...><soapenv:Body><ns:FindRecordingsResponse><ns:RecordingInformationList><ns:RecordingInformation><ns:RecordingToken>[RecordingToken_1]</ns:RecordingToken><ns:Source><ns:SourceToken>[SourceToken_1]</ns:SourceToken></ns:Source><ns:StartTime>2024-06-10T12:00:00Z</ns:StartTime><ns:StopTime>2024-06-10T13:00:00Z</ns:StopTime><ns:Duration>3600</ns:Duration><ns:Recurrence>...</ns:Recurrence><ns:Content><ns:Description>...</ns:Description><ns:TotalBytes>...</ns:TotalBytes><ns:DataFrom>...</ns:DataFrom><ns:DataTo>...</ns:DataTo></ns:Content></ns:RecordingInformation><!-- 可能有多个RecordingInformation元素 --></ns:RecordingInformationList></ns:FindRecordingsResponse></soapenv:Body>
</soapenv:Envelope>

录像回放

        在Onvif中,回放时的音视频数据并不是通过SOAP报文传输的,但需要先通过SOAP请求获取到录像片段的回放URI,然后使用该URI进行媒体流的播放。GetReplayUri操作允许客户端请求获取一个录像片段的回放URI,其SOAP报文可以参考下面的示例报文。

        <ns:RecordingToken>:指定录像的唯一标识符,用于表示要回放的具体录像的Token。

        <ns:TrackToken>:可选参数,如果录像有多个轨道,可以用此参数指定要回放的特定轨道的Token。

        <ns:Protocol>:可选参数,指定期望的流媒体传输协议,比如RTSP、HTTP等。

        <ns:StreamingTransport>:可选参数,指定流媒体传输的底层传输协议,比如UDP、TCP等。

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"xmlns:wsa="http://www.w3.org/2005/08/addressing"xmlns:ns="http://www.onvif.org/ver10/media/wsdl"><soapenv:Body><ns:GetReplayUri><ns:RecordingToken>[RecordingToken]</ns:RecordingToken><!-- 可选参数 --><ns:TrackToken>[TrackToken]</ns:TrackToken><ns:Protocol>RTSP</ns:Protocol><ns:StreamingTransport>UDP</ns:StreamingTransport></ns:GetReplayUri></soapenv:Body>
</soapenv:Envelope>

        设备收到GetReplayUri请求后,将返回一个包含录像回放URI的SOAP响应,具体可参考下面的示例报文。

        <ns:Uri>: 表示回放的URI,客户端可以直接使用此URI进行流媒体播放。

        <ns:InvalidAfterDateTime>: 表示该URI的有效期,超过此时间后,URI将不再可用。

<s:Envelope ...><s:Body><ns:GetReplayUriResponse><ns:MediaUri><ns:Uri>rtsp://[IP]:554/onvif-media/[StreamPath]</ns:Uri><ns:InvalidAfterDateTime>2024-06-15T10:00:00Z</ns:InvalidAfterDateTime></ns:MediaUri></ns:GetReplayUriResponse></s:Body>
</s:Envelope>

相关文章:

从零开始精通Onvif之录像存储

&#x1f4a1; 如果想阅读最新的文章&#xff0c;或者有技术问题需要交流和沟通&#xff0c;可搜索并关注微信公众号“希望睿智”。 概述 Onvif的录像存储功能主要由Media、Recording和Replay三个关键服务共同支持。它们协同工作&#xff0c;为录像的存储、检索和播放提供了标准…...

vue3面试题八股集合——2024

vue3比vue2有什么优势&#xff1f; 性能更好&#xff0c;打包体积更小&#xff0c;更好的ts支持&#xff0c;更好的代码组织&#xff0c;更好的逻辑抽离&#xff0c;更多的新功能 描述Vu3生命周期 Options API的生命周期&#xff1a; beforeCreate: 在实例初始化之后、数据观…...

第2章 Rust初体验5/8:match表达式和模式匹配:更富表达力:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.5 故事3: 比较答案与点数之和 贾克强:“同学们,我们开始用三种语言来实现故事3吧!” 2.5.1 Rust版故事3 这个故事实在是轻松容易地实现了。赵可菲照着书,一下子就写好了。 @@ -1,4 +1,5 @@use rand::Rng; +use std::cmp::Ordering;use std…...

1台UG图形工作站实现5-7人共享使用

随着计算机辅助设计&#xff08;CAD&#xff09;和计算机辅助制造&#xff08;CAM&#xff09;技术的不断发展&#xff0c;UG图形工作站已成为许多行业不可或缺的重要工具。 对于许多中小型企业而言&#xff0c;购买多台高性能的UG图形工作站无疑是一笔巨大的开销&#xff0c;…...

Dubbo 3.x源码(22)—Dubbo服务引用源码(5)服务引用bean的获取以及懒加载原理

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的服务引入的总体流程&#xff0c;当然真正的服务远程引入、以及配置迁移啥的都还没讲&#xff0c;但是本次我们先不接着讲MigrationRuleListener#onRefer方法&#xff0c;而是先…...

nodejs——原型链污染

一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念&#xff0c;所以我们要先明确一点&#xff1a; JavaScript中一切引用类型都是对象&#xff0c;对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…...

忘记 iPhone 密码:如果忘记密码,如何解锁 iPhone

为了提高个人数据的安全性&#xff0c;用户通常会为不同的帐户和设备创建不同的复杂密码。虽然较新的 iPhone 型号具有生物识别和面部解锁功能&#xff0c;但这些功能并不总是有效 - 如果您忘记了 iPhone 的密码&#xff0c;您可能会遇到麻烦。 iPhone 用户和 Android 用户一样…...

案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序

案例 Cacheable 是 Spring Framework 提供的一个注解&#xff0c;用于在方法执行前先检查缓存&#xff0c;如果缓存中已存在对应的值&#xff0c;则直接返回缓存中的值&#xff0c;而不执行该方法体。如果缓存中不存在对应的值&#xff0c;则执行方法体&#xff0c;并将方法的…...

第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

第四届人工智能、机器人和通信国际会议&#xff08;ICAIRC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 2024年12月27-29日 | 中国厦门 重要信息 会议官网&#xff1a;www.icairc.net 录用通知时间&…...

ctr/cvr预估之FM模型

ctr/cvr预估之FM模型 在数字化时代&#xff0c;广告和推荐系统的质量直接影响着企业的营销成效和用户体验。点击率&#xff08;CTR&#xff09;和转化率&#xff08;CVR&#xff09;预估作为这些系统的核心组件&#xff0c;其准确性至关重要。传统的机器学习方法&#xff0c;如…...

HAL-DMA中断空闲接受不定长数据

title: HAL-DMA中断空闲接受不定长数据 tags: STM32HalCubemax 面对无规律长度的数据帧如何处理&#xff1f; 不定长数据接收可以使用每帧数据发送完成后会有一定的空闲时间"帧的时间间隔?" 如果你想每帧都要可以采用dma加空闲中断的方式空闲中断一次就是一帧数据…...

【会议征稿,CPS出版】第四届管理科学和软件工程国际学术会议(ICMSSE 2024,7月19-21)

第四届管理科学和软件工程国际学术会议(ICMSSE 2024)由ACM珠海分会&#xff0c;广州番禺职业技术学院主办&#xff1b;全国区块链行业产教融合共同体&#xff0c;AEIC学术交流中心承办&#xff0c;将于2024年7月19-21日于广州召开。 会议旨在为从事管理与软件工程领域的专家学…...

无引擎游戏开发(3):数据结构设计|功能函数完善

为了简单起见&#xff0c;我们将棋盘的二维数组定义为全局变量。除此之外还要定义一个char类型的全局变量来识别当前的落子类型&#xff0c;我们将其初始化为‘O’。 char Board_data[3][3] {{-, -, -},{-, -, -},{-, -, -}, };char Cur_piece O; 现在回到“读取操作”部分…...

Laravel 高级:了解$loop

Blade 提供 foreach、while、for 和 forelse 等指令来与 PHP 循环配合使用。 您知道吗... 这些指令中有一个方便的 $loop 变量&#xff0c;它指示当前循环迭代&#xff1f;在本文中&#xff0c;我们将探索 $loop 和 loop 指令。&#x1f60e; 使用$loop比foreach更深入 该for…...

深入理解指针(1)

目录&#xff1a; 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调用 1. 内存和地址 1.1 内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&a…...

在无线网中 2.4G、5G、WiFi6、WiFi7 都是什么意思?

有同学问我在无线网中 2.4G/5G/WiFi6/WiFi7 都是什么意思&#xff1f;其实这是两个概念&#xff0c; 2.4G/5G 是频段&#xff0c;WiFi6/WiFi7 是无线协议的版本&#xff0c;千万别把版本和频段搞混了。 WiFi 协议是一系列基于 IEEE 802.11 标准的无线局域网技术协议&#xff0…...

milvus元数据解析工具milvusmetagui介绍使用

简介 milvusmetagui是一款用来对milvus的元数据进行解析的工具&#xff0c;milvus的元数据存储在etcd上&#xff0c;而且经过了序列化&#xff0c;通过etcd-manager这样的工具来查看是一堆二进制乱码&#xff0c;因此开发了这个工具对value进行反序列化解析。 在这里为了方便交…...

LabVIEW电磁超声热态金属在线缺陷检测系统

LabVIEW软件开发的电磁超声热态金属在线缺陷检测系统针对极端高温环境下的金属材料&#xff0c;进行实时、无损的缺陷检测&#xff0c;具有高精度和高可靠性&#xff0c;能够显著提高材料质量控制的效率和准确性。 项目背景 随着工业技术的发展&#xff0c;高温环境下的金属材…...

leecode代码模板

二分算法&#xff1a; 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。你必须设计…...

可靠性测试及模型计算

双85高温高湿测试 场景描述&#xff1a; 85℃温度 85%湿度 老化测试 目的&#xff1a; 衡量产品使用寿命 反向推导&#xff1a; 如何根据产品寿命及工况计算双85测试时间 模型介绍 本质是化学反应速率&#xff08;老化的本质是&#xff09;随温度的变化 温湿度循环测…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...