2017-07-30 65 views
0

我的目标是为onvif ptz相机编写一个客户端,以便我可以查看数据(云台/相机/镜头值),发送控制命令以及查看视频。使用C++/gsoap和Axis相机有点成功。然后我用另一家公司的相机试了一下,但没有奏效。我相信问题是因为其他相机使用不同版本的“东西” - 我不确定它是不同的模式,不同的配置文件版本,不同版本的ONVIF或不同版本的肥皂。了解ONVIF规格和版本

我想制作一个支持任何ONVIF相机的客户端,或者至少绝大多数的相机。我不想说“对不起,你的相机已经1岁了,而且这个协议不再被支持”。

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

现在差​​不多两天,我一直在研究ONVIF,并试图做出正面或反面意见。如果我去这里:https://www.onvif.org/profiles/specifications/specification-history/我看到不少于18个不同的规格版本!

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

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

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

我真的很困惑该怎么做。有没有一个ONVIF专家可以帮助我解决这些问题?

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

问题2)在网络接口规格之上,有不同的配置文件版本。其中有些还不兼容?

问题3)在网络接口规范AND配置文件版本之上,有多个版本的SOAP - 1.1和1.2。我是否需要担心使用1.1的某些相机,或者ONVIF是否始终使用1.2?

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

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

问题6)有了这么多的变体和版本,人们怎么能期望编写一个支持大多数摄像头的ONVIF客户端,而无需花费几个月的时间来开发?有没有第三方库或sdk提取所有版本的巫术?

感谢您提供任何帮助!

+2

每个问题的一个问题,请。 –

+0

谢谢博,但他们都是密切相关的,是同一个整体问题的一部分。 – Ph0t0n

回答

0

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

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

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

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

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

+0

谢谢克里斯!这实际上清理了很多。在技​​术常见问题解答中: 1.在从1.0过渡到2.0期间,映像服务的XML名称空间已更改。 2.在从1.0过渡到2.0的过程中,PTZ服务的XML名称空间发生了变化。 3.设备管理服务在从1.0过渡到2.0时发生了一些结构性的变化。在这些更改中,I/O相关命令将在2.0中移至Device IO XML名称空间,而在1.0中则位于Dev Management中。 因此,这些更改的XML名称空间使1.0和2.0两套完全不同的命令成为可能。 – Ph0t0n

+0

因此,听起来好像有一些向后兼容的问题,无论哪个人写的faq发现(geniusvision.net)。而且我不知道自那以后是否还有其他问题发生,或者如果写作的人可能错过了一些。你做了什么来解决这些问题?再次感谢您借鉴您的专业知识! – Ph0t0n