从零开始精通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>
相关文章:
从零开始精通Onvif之获取设备信息
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 与设备交互的第一步 发现设备之后,与设备进行交互的第一步,是连接上设备,并获取设备的信息。连接设备&#…...
FiRa标准UWB MAC实现(三)——距离如何获得?
继续前期FiRa MAC相关介绍,将FiRa UWB MAC层相关细节进一步进行剖析,介绍了UWB技术中最重要的一个点,高精度的距离是怎么获得的,具体使用的测距方法都有哪些,原理又是什么。为后续FiRa UWB MAC的实现进行铺垫。 3、测距方法 3.1 SS-TWR SS-TWR为Single-Sided Two-Way Ra…...
基于百度翻译API的火车头PHP翻译插件,可以翻译HTML片段
关于火车头的百度翻译插件,相信大家在火车头官网或网上都能找到相关代码,百度翻译插件是PHP写的,就一个PHP文件,简单灵活,不受火车头软件版本限制,任何有PHP插件权限的火车头版本都可以使用。但是百度API翻…...
mysql高级用法常用函数
mysql高级用法 1、自定义排序 select * from movies order by field(actors, 成龙, 靳东, 刘亦菲, 范冰冰); // 字段中存在null值 select * from movies order by field (coalesce(actors,null),成龙, 靳东, 刘亦菲, 范冰冰,null)2、空值NULL排序(ORDER BY IF(ISN…...
【打印100个常用Linux命令】
#!/bin/bash 定义一个函数,用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令:” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …...
友情提示:lazarus的tsortgrid.autofillcolumns存在BUG
直接在tsortgrid的属性中设置autofillcolumns为true,会提示:123个错误。即使修改为false,编译运行照样会出现上述错误。唯一解决的办法就是删除sortgrid重新添加一个。 代码设置SortGrid1.AutoFillColumns : TRUE不受影响。...
github的个人readme文件
一个好的svg图: Simon-He95/profile-3d-contrib/profile-season-animate.svg at 4281d9f46e3d5416bd8f8cc5779157bfdaa8589d Simon-He95/Simon-He95 GitHub 请访问他的主页从提交记录就可以看到这个立体的登录github的图...
java面试题: HashMap、HashSet 和 HashTable 的区别
HashMap 常用方法 HashMap 是一个基于哈希表的 Map 接口的实现。它允许使用 null 值和 null 键。 java 复制 // 创建一个HashMap HashMap<KeyType, ValueType> map new HashMap<>(); // 添加元素 map.put(key, value); // 获取元素 ValueType value map.get…...
CPP初级:模板的运用!
目录 一.泛型编程 二.函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 一.泛型编程 泛型编程:编写与类型无关的通用代码…...
排序---基数排序
前言 个人小记 一、简介 基数排序是一种非比较排序,所以排序速度较快,当为32位int整数排序时,可以将数分为个位十位分别为2^16,使得拷贝只需要两轮,从而达到2*n,然后给一个偏移量,使得可以对负数排序。以…...
“新高考”下分班怎么分?
来自安徽的张女士告诉我:上一年孩子升入了高中,但没想到才高一,孩子就面临了一个困难的挑选:312”分班! 什么是312”分班呢?许多人或许不明白,便是要求学生在高一入学时,针对于3门必…...
二叉树的层序遍历-力扣
本题是二叉树的层序遍历,通过一个队列来控制遍历的节点,二叉树每层的节点和上一层入队的节点个数是相同的,根据这一点编写循环条件。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …...
N32G45XVL-STB之移植LVGL(lvgl-8.2.0)
目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…...
【设计模式】创建型设计模式之 原型模式
介绍 原型模式是一种创建型设计模式,主要用于创建重复的对象,而无需重新初始化它们,从而提高效率并简化对象的创建过程。此模式的核心思想是利用已存在的对象实例,通过复制(克隆)的方式来生成新的对象&…...
【类型商店】字符字符串(下)
啊,哈喽,小伙伴们大家好。我是#Y清墨,今天呐,我要介绍的是字符与字符串。 导语 前两期,我们已经懂得了概念,今天来看些函数。 正题 一.增加或连接 (1) 后面增加() string s1,s2; //定义 s…...
『 Linux 』内存管理与文件系统
文章目录 交换分区页与页框(页帧)交换分区与内存之间的交换操作系统如何管理内存物理地址转换页号与页内偏移量 内存管理,文件系统与文件管理之间的联系 交换分区 在Linux的安装过程中,用户将会被提示创建一个交换分区; 这是一个特殊的分区,其大小可以由用户根据系统内存需求和…...
线性代数|机器学习-P8矩阵低秩近似eckart-young
文章目录 1. SVD奇异值分解2. Eckart-Young2.1 范数 3. Q A Q U Σ V T QAQU\Sigma V^T QAQUΣVT4. 主成分分析图像表示 1. SVD奇异值分解 我们知道,对于任意矩阵A来说,我们可以将其通过SVD奇异值分解得到 A U Σ V T AU\Sigma V^T AUΣVT࿰…...
平面设计神器CorelDRAW2021精简版,你值得拥有!
亲爱的设计师小伙伴们,今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版!🤩✨作为一名专业的图形设计师,我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星!&#…...
kafka是什么?
Kafka是一个由Apache软件基金会开发的开源流处理平台,最初由LinkedIn公司开发,使用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,如网页浏览、搜索和其他用户行为等。Kafk…...
ABC351
C 栈的应用 #include<bits/stdc.h>using namespace std;stack<int>stk;int main() {int n;cin>>n;for(int i1;i<n;i){int a;cin>>a;while(!stk.empty()&&astk.top()){stk.pop();a;}stk.push(a);}cout<<stk.size()<<endl;retur…...
base上海,数据科学,数据挖掘,数据分析等岗位求收留
裁员了,base上海,数据科学,数据挖掘,数据分析等岗位,期望30k~40k,求推荐求收留 1,6年数据算法工作,做过指标体系搭建,用户画像,货品定价,社区分析…...
IC元器件
1.电阻: 电阻的作用: 1.与负载串联:做限流分压 2.电阻并联:将小功率电阻并联成大功率,防烧毁 2.电容: 电容就是两块金属板+中间的介质(相当于两个人坐在一起加上中间的空气…...
SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量
描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…...
Linux安装MySQL教程【带图文命令巨详细】
巨详细Linux安装MySQL 1、查看是否有自带数据库或残留数据库信息1.1检查残留mysql1.2检查并删除残留mysql依赖1.3检查是否自带mariadb库 2、下载所需MySQL版本,上传至系统指定位置2.1创建目录2.2下载MySQL压缩包 3、安装MySQL3.1创建目录3.2解压mysql压缩包3.3安装解…...
外部排序快速入门详解:基本原理,败者树,置换-选择排序,最佳归并树
文章目录 外部排序1.最基本的外部排序原理2.外部排序的优化2.1 败者树优化方法2.2 置换-选择排序优化方法2.3 最佳归并树 外部排序 为什么要学习外部排序? 答: 在处理数据的过程中,我们需要把磁盘(外存)中存储的数据拿到内存中处理…...
人工智能和物联网如何结合
欢迎来到 Papicatch的博客 目录 🍉引言 🍉AI与IoT的结合方式 🍈数据处理和分析 🍍实例 🍈边缘计算 🍍实例 🍈自动化和自主操作 🍍实例 🍈安全和隐私保护 &…...
【JAVASE】JAVA应用案例(下)
一:抢红包 一个大V直播时,发起了抢红包活动,分别有9,666,188,520,99999五个红包。请模拟粉丝来抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或…...
【面试干货】 B 树与 B+ 树的区别
【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 💖The Begin💖点点关注,收藏不迷路💖 在数据库系统中,B 树和 B 树是常见的索引结构,它们在存储和组织数据方面有着不同的设计…...
Socket编程权威指南(四)彻底解密 Epoll 原理
在上一篇文章中,我们优化了基于 Socket 的网络服务器,从最初的 select/poll 模型进化到了高效的 epoll。很多读者对 epoll 的惊人性能表示极大的兴趣,对它的工作原理也充满了好奇。今天,就让我们一起揭开 epoll 神秘的面纱&#x…...
Windows开始ssh服务+密钥登录+默认启用powershell
文章内所有的命令都在power shell内执行,使用右键单击Windows徽标,选择终端管理员即可打开 Windows下OpenSSH的安装 打开Windows power shell,检查SSH服务的安装状态。会返回SSH客户端和服务器的安装状态,一下是两个都安装成功的…...
wordpress 视频站模板下载失败/百度移动端优化
waring:re-readming the partition table failed with error 16解决:partprobe 或则 reboot转载于:https://blog.51cto.com/tonychen/242045...
云主机怎样做网站/cpv广告联盟
注:QGIS版本为3.4.8 选择数据库,离线编辑功能,首次选择该工具,可点击转换为离线项目,选择需要离线的图层,在本地会生成一个offline.gpkg本地包。 1 - Offline.gpkg本地包内容 如上图所示,除了将…...
wordpress导航站的源码/网站如何被百度快速收录
摘要:微信搜索【三桥君】 本篇讲述的是在已经创建好表且有数据的情况下,增加CHECK约束的报错问题 一、问题 当我给数据库中已经创建好的Student表,增加约束条件。 --增加student表的约束条件,要求性别只允许取“男”或“女”。 …...
宝鸡网站建设一般多少钱/今日最新头条新闻条
前言 最近在看许多智能反射面相关的文章。 由于有了智能反射面的存在,在数学模型上与传统信道估计有所出入。 接触到几篇文章,从多维张量 (tensor) 的角度出发, 利用Khatri-Rao积的表示方式, 将复杂的数学建模式子简化后ÿ…...
如何建立互联网公司网站/免费软件下载网站有哪些
ECshop与JQuery冲突的问题由来已久,解决方法大多繁琐,且在一些小地方会出错,如产品比较功能等,本文中的方法结合了网上最新公开文章与本站实际开发过程中的经验,基本上可完美解决ECshop与JQuery的冲突,经测…...
怎样提高网站首页权重/百度联盟广告
在将php5.3的程序向php7迁移过程中 出现这样的问题:1、我将mysql全换成mysqli2、在判断mysql结果集时正确,能够正常得到结果,但是换成mysqli后也能够得到结果现在问题原因是换成mysqli后,is_resource()方法判断mysqli结果集的结果…...