视频监控设备Web接口方案

Ø 需求描述:

我方作为系统集成方,需要集成第三方视频监控系统到wizplant中,考虑到第三方视频监控系统大多是海康和大华厂家的系统或以其为核心二次开发的系统,故主要描述下大华和海康这两种系统的接口方案。

一、海康威视的接口方案:

前置条件:海康的监控摄像头最多只支持6个客户端同时连接,客户端直接连接的方案较不合适。故考虑采用开发程序,拿采集到服务器上的数据这一方案。而且海康官网上有现成的视频采集、设备设置、视频播放接口,故可行性比较大。

设计方案:基于这些SDK来搭建原型验证把视频数据通过服务端接到客户端这种思路是否正确,若验证成功则可以在原型基础上一步步的重构。要做的主要模块是中转服务器程序和客户端读取视频数据的程序。

SDK调用的标准流程:

 

 按照这个流程,我们第一步要做的是初始化SDK,然后是三个可选回调函数的设置,接着要做用户注册设备即设备登录,紧接着就是核心的部分了,根据上一篇文章中讲的思路,除了预览模块外其他几个模块的调用不在我们要解决的问题范畴,因此不予考虑。最后一步是注销设备,释放SDK资源。所以,最后根据我们的需求,流程简化如下:

 

中转服务端设计:

实现了预览功能,下面看看中转服务的实现。其中包含三个类:Server,Client以及ClientList类。

类主要负责从设备读取数据并将数据缓存到服务器上,并且作为Socket监听服务端;ClientList维护一个客户端列表,并在Server获取到设备数据时便利客户端列表发送数据到客户端;Client类主要负责将服务端缓存的数据分发到各个终端请求上。

三个类的关系及主要成员请看下图:

 

客户端播放器开发:

 根据海康官方的SDK,我们要做的播放器其实只是将海康的播放库引入到我们自己的项目中,然后接收来自中转服务器的数据,最后播放显示到客户Web浏览器上。其实整个就是一个引入了海康播放库的ActiveX插件开发。下面按照开发流程一步步实现播放器插件开发。

1. 新建C#类库项目

2. 将播放器SDK中文件引入到项目中

3. 在项目中添加Winform用户控件

4. 新建安装项目

5. 发布项目

6. 数字签名

7. 发布Web网站

根据SDK文档内的说明,这几个函数的调用顺序如下:

系统的整体架构图应为:

 

时序图应为:

 

从两个图中很清楚的能够看出这个系统的设计思路,

1. 视频中转服务器不断从设备将视频数据读入本地;

2. 客户端打开访问页面时先从Web服务器获取到视频服务器的地址;

3. 客户端插件直接连接视频服务器,读取视频数据解码显示。

当然从图中也很容易发现系统的不足之处。

1. 系统没有对各视频中转服务器状态进行跟踪,可能分配给客户端一个异常的节点;

2. 由于视频中转服务器之间无法通讯并且不存在管理节点,所以无法做负载均衡;

3. 视频当中转服务器节点书超过监控设备最大连接数时,无法进一步扩容。

方案分析:

此种方案需要第三方系统方具备中转服务,我方需要与第三方协调调用他们的视频数据。若不具备则需要进行开发。

二、大华接口方案:

大华的接口可采用web直接调用的方式:

1. 调用效果如下图所示

 

2. 下载大华网络摄像头OCX包,下载地址

3. 解压OCX包单击文件中的reg.bat注册dll

4. 网页中主要代码:

 

function StartPreview()
{alert("开始");
var SSOcx = document.getElementById("playOcx");
SSOcx.SetDeviceInfo("192.168.1.108",37777,0,"admin","admin");
        SSOcx.StartPlay();
}
 
 
function StoptPreview()
{
    var SSOcx = document.getElementById("playOcx");
    SSOcx.StopPlay();
}
 
function Capture()
{
 
    var SSOcx = document.getElementById("playOcx");
   var dd= SSOcx.GetCapturePicture("d:\\1.bmp");
 
}
 
function StartRecord()
{
 
 var SSOcx = document.getElementById("playOcx");
     SSOcx.SaveRealData("d:\\1.avi");
}
 
function StopRecord()
{
 var SSOcx = document.getElementById("playOcx");
     SSOcx.StopSaveRealDate();
}

5. 保存并用IE打开,请允许加载Active控件,如果不出问题则调用成功

注意事项:

1.SSOcx.SetDeviceInfo("192.168.1.108",37777,0,"admin","admin");注意修改成你的摄像机的IP地址、端口、通道、用户名、密码

2.大华的dll要注册成功,检查有没有注册的方法:打开注册表,搜索classid号,如果有表明OCX控件注册成功,classid号为:30209FBC-57EB-4F87-BF3E-740E3D8019D2

3.改方法试用于IE,其它浏览器不行

4.第一次用IE打开一定要加载控件,如果IE阻止控件会导致调用失败。如果IE阻止加载控件,请在Internet项目->安全->自定义级别 中将ActiveX控件和插件下的所有项都启用

方案分析:

此种方案只需知道视频设备的ip和登录账号密码即可,较为简单。