我的目标是为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提取所有版本的巫术?
感谢您提供任何帮助!
每个问题的一个问题,请。 –
谢谢博,但他们都是密切相关的,是同一个整体问题的一部分。 – Ph0t0n