海康摄像头sdk,通用协议onvif接入笔记(二)

上篇讲了sdk,这篇来讲一下onvif

首先要了解一下onvif是个什么东西,这个可以自行百度,大体意思就是一个开源协议,大家按照这个协议去开发,onvif是基于soap的,也就是说走的http协议,协议内容为xml,翻了一下git上面的onvif实现,很多自己拼装协议内容的,当然这种方案可以,但是拼接的过程比较烦人,会出现各种格式问题,因此为了避免这个坑,找了一下类似的封装工具,onvif-ws-client,大家可以去git上看一下这个项目。

这个项目是基于onvif-java-lib做的,原因还是比较搞笑的,可以去看一下。

onvif-java-lib是采用的javax中soap的api做的,将onvif对应的wsdl做了一系列的封装,在转换xml的时候可以直接使用面向对象的方式来封装xml。

使用之前要先去下载一个onvif device test tool这个onvif的官方工具,里面有一些示例的请求模板,涵盖了大多数的请求内容。

我们要进行onvif的开发,还是老一套思路,借用工具封装一套业务适用的工具类。

首先要讲一下鉴权,这个地方太坑了,看了官方的资料,试了无数次,最后才解决。。.

- onvif可采用的鉴权方式大概有三种,无密码、WS-username Token、Digest。

    无密码就不说了,下面会发IBM的soap官方的介绍:传送门

    Ws-username Token的方式说白了就是 客户端发一个用户名,加密后的密码,然后声明加密方式,随机数和盐,服务端拿到你的加密方式后,使用客服端发过来的随机数和盐对密码进行加密,进行比对,通过之后就ok,不通过会报401。

    加密方式为Base64(sha1(Base64(nonce)+date+password)),nonce为一个随机数,date是日期字符串;话不多说,上代码:


sha1加密


时间


随机数
调用加密方法

这里我直接把时间和密码拼接好丢进去了,不想再多传参数了,不然又要封装一个实体。。。

拿加密后的内容去创建头:


demo代码

这是demo代码,成品已全部封装了,里面基本上看不到字符串了。。。


这个看起来没注释还是有点蛋疼的


创建消息

因为我这里有业务要求会走另外的地方 不能直接发起请求,所以就把消息内容取出来了,不然可以直接发请求,这种方式有个弊端就是soap的开销比较大,后期优化(摔~~~,to do是程序猿最大的谎话,to do = never do)

请求示例:


云台控制


鉴权


停止云台控制

基本上流程就是这样,视频观看采用rtsp 上一篇讲过了,什么,没记住,再回去学习

你可能感兴趣的:(海康摄像头sdk,通用协议onvif接入笔记(二))