我的目标是为onvif ptz摄像机编写客户端,以便查看数据(平移/倾斜/摄像机/镜头值),发送控制命令和查看视频。使用带有Axis相机的C ++ / gsoap,我有点成功。然后我用另一家公司的相机试了一下它并没有用。我相信问题是因为其他相机使用了不同版本的"" - 我不确定它是不同的架构,不同的配置文件版本,不同版本的ONVIF,还是不同版本的soap。
我想制作支持任何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的相同文件: 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)除了网络接口规范和配置文件版本之外,还有SOAP-1.1和1.2的多个版本。我是否需要担心使用1.1的一些相机,或者ONVIF总是使用1.2?
问题4)我应该如何使用gsoap编译多个版本?如果我使用wsdl2h,然后使用soapcpp2作为版本1.0和2.0的ptz wsdl,然后尝试将两者都包含在同一个项目中,那么就会出现冲突。我不想对用户说...对不起,但是你必须研究并确定你的相机是否使用ONVIF版本,所以你必须使用这个其他可执行文件或插件。
问题5)即使我能够在同一个应用程序中获得多个版本进行编译,我如何知道连接到特定相机时要使用的版本?我是否查询相机并说出#34;您是哪个版本的?好的,您正在使用此特定版本和配置文件,因此我将使用这组命令"?
问题6)由于有如此多的版本和版本,人们如何能够编写支持大多数相机的ONVIF客户端,而无需花费数月甚至数年的时间进行开发?是否有任何第三方图书馆或sdk抽象所有这些版本的伏都教?
感谢您提供的任何帮助!
答案 0 :(得分:2)
1 + 2)客户端可以支持它选择的任何wsdl文档集,因为只进行了添加,并且不对类型和操作进行任何更改。如果我没记错的话,这是在Core文档中指定的。
3)据我所知,只使用SOAP 1.2。
4)我没有一个好的答案,我编写了自己的C ++代码生成器来处理这些问题。
5)GetServices将返回设备提供的服务版本。
6)并不是那么糟糕......我认为大多数功能都可以通过某种方式确定。在版本2.0之前肯定存在很多混淆。我发现的主要问题是设备的实现不符合规范。