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

2024-06-10 14:44

本文主要是介绍从零开始精通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之获取设备信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048458

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +