从零开始精通Onvif之获取设备信息

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

与设备交互的第一步

        发现设备之后,与设备进行交互的第一步,是连接上设备,并获取设备的信息。连接设备,可以直接使用Python中的zeep库。zeep库是Python中用于消费SOAP Web服务的一个流行库,特别适合用来与遵循Onvif规范的设备进行交互。连接上设备之后,通常需要获取一些比较重要的信息,具体包括:基本信息、系统时间、能力信息、配置文件等。接下来,我们将分别进行介绍。

获取设备的基本信息

        GetDeviceInformation命令用于获取设备的基本信息,包括:制造商名称(Manufacturer)、型号(Model)、硬件ID(HardwareId,可选)、固件版本(FirmwareVersion)、序列号(SerialNumber)等。这是了解设备身份和版本信息的第一步,获取这些信息对于识别和记录设备、进行设备管理以及故障排查是非常有用的。

        GetDeviceInformation命令的SOAP请求比较简单,可参考下面的示例报文。

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://www.onvif.org/ver10/device/wsdl"><soapenv:Header></soapenv:Header><soapenv:Body><ns:GetDeviceInformation/></soapenv:Body>
</soapenv:Envelope>

        设备接收到请求命令后,会返回给客户端SOAP响应。SOAP响应中包含制造商名称、型号等基本信息,可参考下面的示例报文。

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:GetDeviceInformationResponse xmlns:ns="http://www.onvif.org/ver10/device/wsdl"><Manufacturer>Custom Manufacturer</Manufacturer><Model>Model Hope</Model><FirmwareVersion>V6.6.0</FirmwareVersion><SerialNumber>123456789ABCD</SerialNumber><!-- 可能还有可选信息,比如:HardwareId列表等 --></ns:GetDeviceInformationResponse></soapenv:Body>
</soapenv:Envelope>

        我们使用zeep库来实现GetDeviceInformation命令,可参考下面的示例代码。

from zeep import Client
from zeep.transports import Transport
from requests.auth import HTTPDigestAuth
from requests.exceptions import RequestException, HTTPError
from zeep.exceptions import Faultdef get_device_information(device_ip, username, password):try:wsdl_url = f"http://{device_ip}/onvif/device_service?wsdl"transport = Transport(timeout = 10)auth = HTTPDigestAuth(username, password)client = Client(wsdl_url, transport = transport, wsse = auth)dev_info = client.service.GetDeviceInformation()return {"Manufacturer": dev_info.Manufacturer,"Model": dev_info.Model,"FirmwareVersion": dev_info.FirmwareVersion,"SerialNumber": dev_info.SerialNumber}except Fault as e:print(f"SOAP Fault: {e}")return Noneexcept HTTPError as e:print(f"HTTP Error: {e}")return Noneexcept RequestException as e:print(f"Request error: {e}")return Noneexcept Exception as e:print(f"unexpected error: {e}")return Nonedetails = get_device_information("{device_ip}", "{username}", "{password}")
if details:print(details)
else:print("Failed to retrieve device information.")

获取设备的系统时间

        GetSystemDateAndTime命令用于获取设备当前的系统日期和时间,对于同步设备时间、记录事件发生的具体时间点、验证设备时间设置等都非常重要。该命令的SOAP请求比较简单,可参考下面的示例报文。

<soapenv:Envelope ...><soapenv:Header></soapenv:Header><soapenv:Body><ns:GetSystemDateAndTime xmlns:ns="http://www.onvif.org/ver10/device/wsdl"/></soapenv:Body>
</soapenv:Envelope>

        设备接收到请求命令后,会返回给客户端SOAP响应。SOAP响应中包含时间类型、UTC时间、本地时间以及夏令时(DST)的状态等信息,可参考下面的示例报文。

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><tds:GetSystemDateAndTimeResponse xmlns:tds="http://www.onvif.org/ver10/device/wsdl"><tds:SystemDateAndTime><!-- 时间类型,例如Manual(手动设置)、NTP(网络时间协议)等 --><tt:DateTimeType>Manual</tt:DateTimeType><!-- 是否为夏令时 --><tt:DaylightSavings>false</tt:DaylightSavings><tt:TimeZone><!-- 时区,比如:GMT+08:00表示东八区 --> <tt:TZ>GMT+08:00</tt:TZ></tt:TimeZone><!-- UTC时间 --><tt:UTCDateTime><!-- 时间点,使用ISO 8601格式 --><tt:Time>2024-06-02T10:00:00Z</tt:Time></tt:UTCDateTime><!-- 可能有其他字段,比如:LocalDateTime,具体取决于ONVIF版本和设备实现 --></tds:SystemDateAndTime></tds:GetSystemDateAndTimeResponse></s:Body>
</s:Envelope>

获取设备的能力信息

        GetCapabilities命令用于获取设备或特定服务的能力信息,包括:支持的服务、媒体配置、网络能力等,是了解设备所有功能和特性的入口。该命令的SOAP请求比较简单,可参考下面的示例报文。

<soapenv:Envelope ...><soapenv:Body><ns:GetCapabilities xmlns:ns="..."></ns:GetCapabilities></soapenv:Body>
</soapenv:Envelope>

        设备接收到请求命令后,会返回给客户端SOAP响应。SOAP响应的Capabilities元素下,包含设备支持的各种能力的详细描述,这些能力通常包括以下几个大的分类。

        Device: 设备的基本信息,比如:制造商、型号、序列号等。

        Media: 媒体服务的能力,比如:视频流、音频流、PTZ(云台)控制等。

        Events: 事件通知的能力,比如:移动检测、视频丢失等。

        Analytics: 视频分析的能力,比如:人脸识别、车牌识别等(如果设备支持的话)。

        PTZ: 云台控制的能力(如果设备支持的话)。

        Extensions: 自定义的能力(如果设备支持的话)。

        在Capabilities元素下,每个能力都会有一个或多个子元素来描述其具体的功能和限制。以Media为例,可能会有VideoSources、AudioSources、Profiles等子元素来描述视频源、音频源和媒体配置文件的详细信息。

<s:Envelope ...><s:Body><tds:GetCapabilitiesResponse ...><tds:Capabilities><tds:Device><!-- 设备信息 --></tds:Device><tds:Media><tds:VideoSources><!-- 视频源信息 --></tds:VideoSources><!-- 其他媒体服务信息 --></tds:Media><!-- 其他能力信息 --></tds:Capabilities></tds:GetCapabilitiesResponse></s:Body>
</s:Envelope>

获取设备的配置文件

        GetProfiles命令用于获取设备的媒体配置文件(Profiles),每个媒体配置文件定义了一套特定的媒体配置,包括:视频流参数、编码设置、视频源配置(比如:分辨率、帧率)、音频配置等。这些配置文件有助于简化对设备的管理和控制,用户可以根据不同的应用场景选择合适的配置文件来启动或修改媒体流。该命令的SOAP请求比较简单,可参考下面的示例报文。

<soapenv:Envelope ...><soapenv:Body><ns:GetProfiles xmlns:ns="http://www.onvif.org/ver10/media/wsdl"/></soapenv:Body>
</soapenv:Envelope>

        设备接收到请求命令后,会返回给客户端SOAP响应。SOAP响应通常包含一个或多个配置文件的详细信息,每个配置文件都是一个Profile元素,内部包含如下的子元素。

        Name:配置文件的名称。

        Token:配置文件的唯一标识符。

        VideoSourceConfiguration:视频源的配置详情。

        AudioSourceConfiguration:可选,音频源的配置详情。

        VideoEncoderConfiguration:视频编码器的配置详情,包括分辨率、帧率、编码格式等。

        AudioEncoderConfiguration:可选,音频编码器的配置详情。

        PTZConfiguration:可选,如果设备支持PTZ(云台、变焦、倾斜)控制,则包含PTZ的相关配置。

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:GetProfilesResponse xmlns:ns="http://www.onvif.org/ver10/media/wsdl"><Profiles><Profile token="Profile1"><Name>Default Profile</Name><VideoSourceConfiguration><!-- 视频源配置详情 --></VideoSourceConfiguration><VideoEncoderConfiguration><!-- 视频编码配置详情 --></VideoEncoderConfiguration><!-- 其他配置,比如:音频、PTZ等 --></Profile><!-- 可能还有其他Profile --></Profiles></ns:GetProfilesResponse></soapenv:Body>
</soapenv:Envelope>

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

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

相关文章

FiRa标准之认证流程

在实现FiRa MAC时需要考虑其兼容性&#xff0c;同时对外部而言&#xff0c;如何证明一个UWB设备是否满足FiRa的规范要求&#xff0c;就需要通过一定的组织对相应的设备进行检测、认证。 为此&#xff0c;FiRa联盟已经建立了国际认证程序&#xff0c;制定了验证待检设备&#x…

React+TS前台项目实战(四)-- layout整体布局搭建

文章目录 前言一、Layout组件代码注释说明二、Content全局组件注释说明三、Header基础布局组件1. Header父级组件注释说明2. NavMenu导航子组件详细说明 四、效果展示总结 前言 本文主要讲Layout整体布局的构建以及全局内容盒子Content组件的使用。还包括了导航栏组件的基本封…

【QT】QT6.3新特性,以及使用技巧

Qt 6.3作为Qt框架的一个重要更新&#xff0c;引入了许多新特性和改进&#xff0c;以提高开发效率和应用程序性能。以下是一些使用Qt 6.3的技巧和最佳实践&#xff1a; 利用新模块和特性&#xff1a; 了解并利用Qt 6.3中新增的模块和特性&#xff0c;例如Qt Quick 3D、Qt PDF等&…

未来几年,同样的性能,推理功耗降低为现在的几万分之一,有可能吗

未来几年,同样的性能,推理功耗降低为现在的几万分之一,有可能吗 一.数据二.抓取LLM排行榜,相同的MMLU精度,模型参数量缩减倍数三.其它 有人说未来几年,推理功耗能降低为现在的几万分之一,好奇怎么能做到呢 一.数据 二.抓取LLM排行榜,相同的MMLU精度,模型参数量缩减倍数 import…

spool 管道 小文件 mknod

Spool File In SQL*PLUS in Multiple Small Files ? (Doc ID 2152654.1)​编辑To Bottom In this Document Goal Solution APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 12.1.0.2 [Release 10.2 to 12.1] Oracle Database Cloud Schema Service…

从零开始搭建Electron项目之运行例程

最好的学习方式就是&#xff1a;给一段能够运行的代码示例。 本文给出了例程资源&#xff0c;以及运行的步骤。 在国内开发electron有一点特别不好&#xff0c;就是如果不爬梯子&#xff0c;下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…

32、matlab:基于模板匹配的车牌识别

1、准备工作 1&#xff09;准备材料 车牌字符模板和测试的实验车牌 2&#xff09;车牌字符模板 数字、字母和省份缩写 3&#xff09;测试车牌 四张测试车牌 2、车牌识别实现(已将其嵌入matlab) 1&#xff09;打开APP 找到APP 找到我的APP双击点开 2)界面介绍 包括&am…

C语言考试内容

C语言考试通常会涵盖以下几个主要方面&#xff1a; 1. **基本概念**&#xff1a; - C语言的历史和特点 - C语言的编译过程 - 程序的基本结构&#xff08;包括预处理指令、主函数main()、函数定义等&#xff09; 2. **数据类型和运算符**&#xff1a; - 基本数据类…

一起学习Linux内核模块的知识,为编写复杂的设备驱动做好准备

一、Linux内核模块简介 Linux内核的整体架构非常庞大&#xff0c;包含的组件非常多&#xff0c;如果把所有的功能都编译到内核&#xff0c;有导致生成的内核映像越来越大&#xff0c;同时如果我们要修改现有内核的功能&#xff0c;需要重编内核&#xff0c;效率很低。 有没有…

【网络安全的神秘世界】web应用程序安全与风险

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 第一章&#xff1a;web应用程序安全与风险 web攻击基础知识 1、什么是web应用攻击 web攻击的本质&#xff0c;就是通过http协议篡改应用程序&#xff0…

c#自定义ORM框架-实体类扩展属性

步骤一、建立扩展属性类 实体类扩展属性要继承Attribute基类完成 步骤二、创建实体类并引用扩展实体类属性 Attributes属性定义&#xff0c;主要标明表名和主键名字 /// <summary> /// 表名 /// </summary> [AttributeUsage(AttributeTargets.Class)] [System.S…

蓝牙安全入门——两道CTF题目复现

文章目录 蓝牙安全入门题目 low_energy_crypto获取私钥解密 题目 蓝牙钥匙的春天配对过程配对方法密钥分发数据加密安全漏洞和保护实际应用实际应用 蓝牙安全入门 &#x1f680;&#x1f680;最近一直对车联网比较感兴趣&#xff0c;但是面试官说我有些技术栈缺失&#xff0c;所…

==Redis淘汰策略(内存满了触发)==

好的&#xff0c;面试官。这个问题我需要从三个方面来回答。第一个方面&#xff1a; 当 Redis 使用的内存达到 maxmemory 参数配置的阈值的时候&#xff0c;Redis 就会根据配置的内存淘汰策略。 把访问频率不高的 key 从内存中移除。maxmemory 默认情况是当前服务器的最大内存…

html5实现个人网站源码

文章目录 1.设计来源1.1 网站首页页面1.2 个人工具页面1.3 个人日志页面1.4 个人相册页面1.5 给我留言页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/139564407 ht…

Golang | Leetcode Golang题解之第141题环形链表

题目&#xff1a; 题解&#xff1a; func hasCycle(head *ListNode) bool {if head nil || head.Next nil {return false}slow, fast : head, head.Nextfor fast ! slow {if fast nil || fast.Next nil {return false}slow slow.Nextfast fast.Next.Next}return true }

unity到小游戏instantGame(流程演示,非内容制作 亲测可用)

unity到小游戏instantGame&#xff08;开发流程演示&#xff0c;非内容制作 亲测可用&#xff09; 写在前面直接 写在前面 instantGame 后妈级教学&#xff0c;主打一个填自己的坑&#xff0c;有问题下方评论交流 根据此教程使用后的一点心得记录和可能出现的问题补充&#xf…

vue面试题四

一、请解释v-show和v-if指令的区别&#xff1f; v-show 和 v-if 是 Vue.js 中用于控制元素显示与隐藏的两个常用指令&#xff0c;但它们的工作方式和性能表现有所不同。以下是它们之间的主要区别&#xff1a; 1. 工作原理 v-if&#xff1a; v-if 是“真实”的条件渲染&#x…

SpringBoot与Mybatis-plus实战

随着互联网技术的快速发展&#xff0c;企业级应用对开发效率和性能的要求越来越高。Spring Boot 作为一款快速开发框架&#xff0c;以其简洁、快速、配置方便等优点&#xff0c;得到了广泛的应用。而 MyBatis-Plus 作为 MyBatis 的增强工具&#xff0c;在简化开发、提高效率方面…

在 .NET Core 中构建工作服务和调度运行

介绍 .NET Core 中的工作服务已成为构建持续运行并执行各种任务的后台服务的强大机制。本文提供了有关创建工作服务的分步指南&#xff0c;深入研究了其演变过程&#xff0c;并阐明了代码片段以及执行过程。 工人服务的演变 工作服务是 .NET Core 旅程的延续&#xff0c;它源…

设计随笔 ---- ADR4525 篇

ADR4525一颗超低噪声、高精度2.5V基准电压源&#xff1b; Fluke 17B准确度指标&#xff1a; ADR4525指标&#xff1a; Fluke 17B测试结果&#xff1a; 2.5V的基准&#xff0c;输出只有2.477V&#xff0c;其实这么高精度的电压基准用3位半的万用表来测试本身就是一个错误&#…