Onvif协议客户端开发【1.概念篇】

来源:互联网 发布:美康医药软件 编辑:程序博客网 时间:2024/06/06 03:47

这段时间在做毕设,做的东西是基于Onvif的视频流云存储。把碰到的一些问题记录下来。

一.学习Onvif协议

简单来说,可以把Onvif协议想像成Http协议,客户端发出请求,然后服务端在收到请求之后把所需信息返回给客户端。以浏览器为例子,html代码通过http协议来传送。其实Onvif的整个过程很类似的,当你想去学习onvif协议的时候,所有介绍onvif的文章里面都会提到,onvif是基于soap协议和wsdl协议的,而soap协议和wsdl协议都是基于xml的。我们先不管soap协议和wsdl协议是什么东西,但是对于xml我们应该比较熟悉的。我们知道xml里面其实传送的是数据或请求命令,那么这里就可以把xml想像成html了。这样一来就比较好理解了。举个例子:

对于网络摄像头,我们可以看成是服务端(Onvif里面把IP摄像头定义为NVT设备 :Network Video Transmitter),既然是服务端,就跑着很多“服务”,比如说设置IP的服务,控制摄像头移动、调焦的服务,提供网络视频流的服务,等等。而每一个服务都有一个Profile(配置文件)。我们想要使用这些服务,必须首先去请求获得这些Profile(配置文件),这些Profile里面有关于对应服务的具体信息。

客户端首先去请求获得某个服务的Profile,服务端收到请求后把该Peofile里面的信息返回给客户端。这样客户端根据收到的Profile里面的信息就可以使用服务了。(当然真正的过程远比这个复杂,但是大致就是这个流程)。

那么,服务端提供哪些服务呢?我们可以认为在wsdl协议里面规范了提供的服务。

那么,客户端和服务端是怎么进行交互的呢?我们可以认为soap协议规范了交互这个过程。

现在我们对整个流程的了解更进了一步,接下来我们再回过头来看看上面的第一张图。

我们编写的是客户端,所以我们就是caller。我们所要编写的代码是红色的那部分,也就是逻辑函数。

而具体的函数实现是在黄色的User-stub里面实现的。黄色的这部分不用我们来做,刚才已经说了,交互是通过soap来进行的,所以我们可以使用工具来自动生成User-stub,具体步骤如下:

1.使用Onvif协议的官方wsdl文档生成头文件,使用的工具是wsdl2h

2.根据头文件生成stub代码,使用的工具是soapcpp2

最后,绿色的部分是RPC runtime,由于我们编写的是红色的逻辑代码的函数,而RPC runtime是根据黄色的User-stub生成的,所以调试起来会比较麻烦。搜索一下别人的博客可以发现一些调试技巧,这里就不写出来了,大家可以自己找一下。

希望这篇文章对您理解Onvif的整个流程有所帮助。

0 0