最近项目开发的过程中,遇到需要对接海康威视网络硬盘摄像机的需求,由于之前没有做过类似的案例,所以,刚开始,我不知道从何下手,现在我把我的项目实践经验与大家分享。
1、首先,我需要拿到海康威视网络硬盘摄像机设备,拿到设备后,我把硬盘装好,具体操作步骤,可以在网络上查询。
2、装好硬盘后,我接通电源,按照操作说明,初始化系统,这里需要连接一个显示器,设备相当于一个主机,初始化系统需要设置初始密码,这个密码后面可以修改。实际上,后面用到的地方不大。
3、设备开通电源后,需要连接网络,根据设备的网段进行设备,连接海康威视摄像头的时候,这里要注意,摄像头有自己的ip地址和用户名、密码,设备和摄像头都必须要在一个局域网环境下,才能访问。
4、配置好网络环境后,接下来就是需要进行摄像头预览操作了。首先,我选择的是谷歌浏览器,在地址栏输入ip地址,进入登录页面,这里需要输入的ip地址是摄像头的ip地址,用户名和密码也是摄像头的,登录成功,进入首页,结果发现问题来了,谷歌根本没法正常预览,于是我在网上下载了官网的海康威视web3.0的相关资料,里面有个类似于插件的执行文件,我于是进行了安装,结果发现,谷歌还是没法预览,我又打开IE浏览器,访问web3.0的demo,登录成功后,预览正常显示。可是,我开发的系统是一个桌面应用,并不是网页的,而且内核是谷歌,所以,这个demo对我来说,根本没有什么用,后来,我又想办法想在谷歌浏览器进行模拟,希望可以正常预览。
5、我本以为安装了官网的海康威视web3.0里面的插件,就可以了,可是谷歌还是没法预览。结果经过一番折腾,我在同事的电脑中看到他们在谷歌浏览器是可以正常预览的,于是,我终于找到原因,后来发现,谷歌的插件跟web3.0提供的插件是不一样的。于是,我链接外网,登录成功后,点击右上角菜单栏的插件下载,下载成功,放到内网环境后,谷歌终于预览成功。
到此,环境部署完成。
经过一番折腾后,我的任务还没结束,我最终的目的是需要将海康威视摄像头的预览功能集成到我的系统中。
根据需求和当前部署的情况来看,我首先觉得最简单的做法就是把海康威视web3.0集成到我的系统中,而集成的方式,则是把demo先放在跟项目的同一个目录,然后,在系统的网页中添加访问地址。通过iframe内嵌的方式当然是最简单的,这样,我们也就省了很多开发的时间。经过测试,页面内嵌成功。可以会遇到之前的问题,我们的系统内核是谷歌,页面虽然可以正常显示,但是登陆和预览功能,点击的时候没有任何反应,调试的时候发现webVideoCtrl的open等一些方法报错,提示无法找到,于是,我继续在网上疯狂的查找资料,可是,找了很多都没有用,跟我的业务场景都不一样。不过在官方的资料中明确提示了,Web 控件 V3.0 基于 ActiveX 和 NPAPI 开发,接口封装于 javascript 脚本,以 javascript 接口形式提供用户集成,支持网页上实现预览、回放、云台控制等功能。该控件开发包仅支持 B/S 网页开发,不适用于 C/S开发。运行环境,浏览器:
IE8~IE11、Chrome31+、Firefox35+,32 位浏览器
IE8~IE11、Chrome31~Chrome44、Firefox35~Firefox51,64 位浏览器
根据官方文档提示,我尝试下了谷歌44版本,结果发现,根本没有什么用,于是我陷入了两难的境地,如果选择使用web3.0的源码方式进行集成的话,可是我们系统的内核是谷歌,我在通过启动nginx的方式启动后,登录终于成功了,可是预览的时候明确提示,不支持websocket流进行预览。
在这种情况下,我只好放弃使用海康威视web3.0进行集成。另外就是海康威视摄像头在谷歌浏览器进行访问,通过ip访问,于是我想通过内嵌的方式,结果发现,内嵌后根本无法显示,后面经过查证才知道,它根本不允许内嵌。这样我们的系统就根本无法实现与它集成。
于是我继续在网上查询资料,后面发现我们是可以通过java的swing控件进行开发的,页面通过swing控件进行展示。
结论:
1、如果要使用web3.0开发的话,谷歌浏览器的版本有要求,但是画面清晰流畅
2、可以通过协议透传的方式实现集成,但是有个缺点是画面会卡顿,不是太流畅 ,还有摄像机的协议必须要设置成ONVIF协议,需要进入摄像机web管理页面手动开启
3、可以通过jave 的swing组件进行展示,缺点是会弹出一个java的应用窗口,服务必须独立,不然关闭窗口的时候会停掉服务