@[TOC]安防图像联动监视OCX控件开发
方案设计
根据视频厂商提供的SDK包和视频服务器账号,我方进行软件开发,根据SDK函数的特点,采用MFC ActiveX控件(OCX控件)嵌入到网页,根据镜头GUID来获取图像的方式进行。这种方式目前只有IE浏览器支持。
软件编程设计
开发工具
Microsoft Visual Studio Community 2019
版本 16.4.5
OCX控件接口设计
(1)CameraGuid
定义 void CameraGuid(BSTR newVal);
说明 设置控件内镜头的GUID
参数 [IN]BSTR newVal 镜头的GUID的值
返回值 空
注解
定义 BSTR CameraGuid();
说明 读取控件内镜头的GUID
参数 无
返回值 镜头的GUID
注解
(2) CameraGuid1
其设计与CameraGuid相同,设置和读取的是镜头1的GUID.
(3) CameraGuid2
其设计与CameraGuid相同,设置和读取的是镜头2的GUID.
(4) CameraGuid3
其设计与CameraGuid相同,设置和读取的是镜头3的GUID.
(5) CloseView
定义 void CloseView();
说明 关闭所有视频
参数 无
返回值 空
注解
(6) Login
定义 ULONG Login();
说明 登录安放视频服务器
参数 无
返回值 无符号长整型,1为登录成功,0为失败
注解 登录的账号密码,IP地址和协议方式都在程序内部固化,网页调用是自动执行Login实现自动登陆。
(7) Logout
定义 void Logout();
说明 登出安放视频服务器
参数 无
返回值 空
注解 网页关闭时自动调用,设计此接口是方便用户有异常时需要调用。
(8) OpenView
定义 void OpenView();
说明 打开实时视频
参数 无
返回值 空
注解 控件内部最多可打开四个镜头GUID的实时视频,根据传入GUID的个数,打开1个、2个、3个或者4个视频。
OCX控件关键代码
void testDlg::OpenView()
{
CMS_LiveViewSet2 set;
set.bHardwareDec = 0;
set.nMemType = 0;
set.nProtocal = 0;
CAMERA_HANDLE m_hCameraOnPlay[4];
for (int j = 0; j < 4; j++)
{
m_hCameraOnPlay[j] = nullptr;
}
if (m_hServer != NULL)
{
CMS_GUID cmsguid = GuidToCmsguid(cameraGuid);
m_hCameraOnPlay[0] = CMS_GetCameraHandleByGUID(m_hServer, cmsguid);
CMS_GUID cmsguid1 = GuidToCmsguid(cameraGuid1);
m_hCameraOnPlay[1] = CMS_GetCameraHandleByGUID(m_hServer, cmsguid1);
CMS_GUID cmsguid2 = GuidToCmsguid(cameraGuid2);
m_hCameraOnPlay[2] = CMS_GetCameraHandleByGUID(m_hServer, cmsguid2);
CMS_GUID cmsguid3 = GuidToCmsguid(cameraGuid3);
m_hCameraOnPlay[3] = CMS_GetCameraHandleByGUID(m_hServer, cmsguid3);
}
for (int i = 0; i < 4; i++)
{
if(m_hCameraOnPlay[i]!= nullptr)
{
m_hVideoView[i] = CMS_OpenLiveView2(m_hCameraOnPlay[i], (CMS_HWND)GetDlgItem(IDC_BUTTON1 + i)->m_hWnd, &set, &(m_hViewWnd[i]));
}
}
}
OCX控件使用说明
- 网页调用控件
建立一个网页代码如下,注意控件的classid要与程序中的一致(请下载我的资源CMSControl.html)
控件自动注册exe
工具:好压
第一步:首先将要打包的OCX控件,以及该控件所依赖的DLL文件放到桌面(或者某个文件夹下)
第二步:1、新建文本文档,取名 register.txt,文档内写入 regsvr32 \你的控件名
2、更改文档后缀名为 bat ,即:名称改为:register.bat
第三步:将OCX控件,控件所依赖的DLL文件,register.bat三个文件选中,点击右键“添加到压缩文件”,打包成Zip
第四步:双击打包好的Zip文件,点击“自解压”,选择“解压”选项卡,
解压路径:自己随意配(自解压后,压缩包内的3个文件所在位置)
解压后运行:.\register.bat(第二步中制作的bat文件)
点击“确定”
第五步:安装。此时桌面上,出现了生成的EXE文件。发给用户,安装就可。
备注:
register.bat里命令如下:
cd c:\Windows\SysWOW64
regsvr32 CMSControl.ocx
控件手动注册
把Release文件夹里的文件全部拷到 c:\Windows\SysWOW64
以管理员运行cmd
进入路径:cd c:\Windows\SysWOW64
问题与解决方法
IE浏览器打开网页没反应,无法显示控件界面
原因:IE浏览器默认可以多进程,优先寻找32位的控件,而不是64位的控件。
解决方法:把IE浏览器设置成进程,只寻找64位的控件。
操作步骤:
(1)点击win + R ,打开运行对话框。
(2)输入regedit,点击确定。
(3)依次展开到HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main分支
新建一个DWORD32值,并将其命名为TabProcGrowth,在弹出的对话框中输入“0”。
TabProcGrowth赋值为1,则表示允许系统最多可允许IE出现两个进程,如果赋值为0,则表示IE只能有一个进程