安防图像联动监视OCX控件开发

@[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只能有一个进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值