了解 ONVIF 规范和版本

Posted

技术标签:

【中文标题】了解 ONVIF 规范和版本【英文标题】:Understanding ONVIF specifications and versions 【发布时间】:2018-01-06 07:08:43 【问题描述】:

我的目标是为 onvif ptz 摄像机编写一个客户端,以便我可以查看数据(平移/倾斜/摄像机/镜头值)、发送控制命令和查看视频。我在使用带有 Axis 相机的 C++/gsoap 方面取得了一定的成功。然后我用另一家公司的相机试了一下,还是不行。我认为问题是因为其他相机使用了不同版本的“某物”——我不确定它是不同的架构、不同的配置文件版本、不同版本的 ONVIF 还是不同版本的肥皂。

我想创建一个支持任何 ONVIF 摄像头的客户端,或者至少支持绝大多数摄像头。我不想说“抱歉,您的相机已经使用了 1 年,不再支持该协议”。

我使用的是 onvifcpplib,它似乎已经被放弃了一段时间,现在它的 gitbhub 项目转发到了 rapidonvif,看起来完全不同。

近两天来,我一直在研究 ONVIF,并试图弄清楚这将需要什么。如果我去这里:https://www.onvif.org/profiles/specifications/specification-history/ 我看到不少于 18 个不同的规格版本!

这个版本似乎会影响 wsdl 文件的版本,所以例如我可以在这里看到媒体 wsdl 的 1.0 版本:http://www.onvif.org/ver10/media/wsdl/media.wsdl ...但这里也有相同文件的 2.0 版本:@987654323 @.

而且我认为它们不向后兼容。但我找不到一个 2.6 - 所以: http://www.onvif.org/ver26/media/wsdl/media.wsdl 不存在。

这只是我需要使用 gsoap 的 15 个 wsdl 文件之一。

我真的很困惑该怎么做。是否有 ONVIF 专家可以帮助我解决其中一些问题?

问题 1) 是否有一个主列表或其他内容告诉我作为客户端编写者我必须支持哪些 wsdl 版本以及哪些不向后兼容?用所有 15 个 wsdl 文件尝试所有 18 个版本的所有可能排列将永远花费!其中一些可能向后兼容,而另一些则不能 - 我怎么知道哪些是哪些?

问题 2) 除了网络接口规范之外,还有不同的配置文件版本。其中一些也不向后兼容吗?

问题 3) 除了网络接口规范和配置文件版本之外,还有多个 SOAP 版本 - 1.1 和 1.2。我需要担心某些相机使用 1.1,还是 ONVIF 总是使用 1.2?

问题 4) 我应该如何使用 gsoap 编译多个版本?例如,如果我在 ptz wsdl 的 1.0 和 2.0 版本中使用 wsdl2h,然后使用 soapcpp2,然后尝试将两者都包含到同一个项目中,则会出现冲突。我不想对用户说...对不起,但您必须研究并确定您的相机是否使用 ONVIF 版本,因此您必须使用其他可执行文件或插件。

问题 5) 即使我能够在同一个应用程序中编译多个版本,我如何知道在连接到特定相机时使用哪个版本?我是否会询问相机并说“你是哪个版本?好的,你正在使用这个特定的版本和配置文件,所以我将使用这组命令”?

问题 6) 有这么多变体和版本,到底如何才能编写一个支持大多数相机的 ONVIF 客户端,而无需花费数月至数年的时间进行开发?是否有任何第三方库或 sdk 抽象了所有这些版本控制的巫术?

感谢您提供的任何帮助!

【问题讨论】:

每个问题一个问题,请。 【参考方案1】:

1+2) 客户端可以支持它选择的任何一组 wsdl 文档,因为只进行添加而不更改类型和操作。如果我没记错的话,这是在 Core 文档中指定的。

3) 据我所知,仅使用 SOAP 1.2。

4) 我没有很好的答案,我写了自己的 C++ 代码生成器来处理这些问题。

5) GetServices 将返回设备提供的服务版本。

6) 这还不错……我认为大多数功能都可以通过一种或另一种方式确定。在 2.0 版本之前肯定有很多混乱。我发现的主要问题是设备的实现不符合规范。

【讨论】:

谢谢克里斯!这实际上清除了很多。在技​​术常见问题解答中: 1. 在从 1.0 过渡到 2.0 期间,影像服务的 XML 命名空间发生了变化。 2. PTZ 服务的 XML 命名空间在从 1.0 到 2.0 的过渡期间发生了变化。 3. 设备管理服务在从1.0到2.0的过渡过程中发生了一些结构性的变化。在这些更改中,I/O 相关命令在 2.0 中移至 Device IO XML 命名空间,而在 1.0 中它们位于 Dev Management 中。结果,这些更改的 XML 命名空间使 1.0 和 2.0 成为两组完全不同的命令。 所以听起来有一些向后兼容的问题,无论是谁写了这个常见问题,都发现了(geniusvision.net)。而且我不知道从那时起是否还发生了其他问题,或者写作者是否可能遗漏了一些问题。你做了什么来解决这些问题?再次感谢您提供专业知识!

以上是关于了解 ONVIF 规范和版本的主要内容,如果未能解决你的问题,请参考以下文章

tplink球机能不能用海康威视录像机操控云台?

ONVIF,GB28181是干啥用的

如何从钴代码或其他代码中了解 eme 规范版本?

Onvif协议及协议测试工具使用详解

尝试实现ONVIF服务器的SOAP Action不匹配

测试工作管理与规范