[关闭]
@Pigmon 2022-01-14T09:51:12.000000Z 字数 2161 阅读 326

遥控产品化摄像机控件第一版本说明

遥控


----

版本 修改人 说明 日期
V1.0 袁胜 使用说明;类图; 2019年9月14日


1. 简述

1.1 主要特性

通过泛型摄像机管理器,可兼容多个基于不同SDK的摄像机同时显示;(需要各自按照接口实现包装类)
使用XML配置文件管理摄像机的参数;
改变摄像机数量、参数和布局顺序不需修改程序,只要修改配置文件或在vs的UI设计器中修改参数;

1.2 代码仓库

因为目前代码服务器还没有正式启用,测试用云服务器可能还需要多次重装系统,因此本项目暂时放在github上,并设置为私有项目。
请将github账号发给我来添加到协作者中,就可以下载工程了。
链接:
https://github.com/pigmon/RCWidgets.git

1.3 下一个版本的计划功能

将播放器控件设置为可停靠窗口;
摄像机配置文件制作GUI界面;
播放器控件增加快捷操作接口;

2. 使用说明

Step 1 修改配置文件

配置文件在工程的 config 目录下,名字是 cam.xml。
按照下面例子中的 camera 标签中的格式添加配置,注意 id 不能重复。

  1. <cameras>
  2. <camera id="1" type="v30">
  3. <login ip="192.168.1.101" port="8000" user="admin" passwd="ht123456">
  4. </login>
  5. <play_setting channel="1" stream="0" protocol="3" block="0" buffer="50">
  6. </play_setting>
  7. </camera>
  8. </cameras>

play_setting 标签下的几个参数是根据海康威视SDK定制的,今后有其他厂商的摄像机加入后,需要修改 CamSettings 类和 XML 文件的格式,增加目前没有的配置属性。

channel代表播放通道;
stream代表码流类型(0-主码流,1-子码流);
protocol代表传输协议(0-TCP,1-UDP,2-多播,3-RTP);
block代表是否阻塞式;
buffer代表缓存数量;
v30 目前代表海康威视;

Step 2 拖放控件

在编译过工程后,自定义控件 CamPlayerWnd 就会出现在 UI 设计器的工具箱中:
widget.png-8.1kB

将其拖放到上一级容器中:
step1.PNG-10.3kB
图中黑色方框即为刚刚拖放的 CamPlayerWnd,可以在 UI 设计器或其属性编辑器中修改位置和大小等参数。

右键点击该控件,在弹出菜单中选择“属性”即打开其属性编辑器。在属性编辑器中找到 CamID 一项,设置为刚刚在 cam.xml 中增加的摄像机的 id。如图所示:
camid.png-2.8kB

最后,保存项目并运行,就可以看到结果:
result.PNG-63kB

程序调用方法

参考Form1.cs中注释为Test Case的部分:

  1. // Test Case
  2. CamMngr.Init();
  3. CamMngr mngr = new CamMngr();
  4. mngr.FromXml("../config/cam.xml");
  5. mngr.DoLoginAll();
  6. mngr.DoPlayAll();

资源在关闭窗口时自动释放,也可以手动释放。
除此之外还有重连等功能,具体参考代码文档。

3. 增加新类型摄像机的方法

这里指除海康威视之外的,使用其他SDK的摄像机的增加方法。

Step 1 实现包装器接口

仿造类 CamImpl_HK,实现 ICamWrapper 接口。命名规则 CamImpl_[摄像机商标缩写]。
例如:CamImpl_NewCam。

至少实现一个构造函数,参数列表为:

  1. (uint _cam_id, CamSettings _settings)

实现方法参照 CamImpl_HK。

Step 2 初始化和清理步骤

在 CamMngr 的 Init 函数中加入该 SDK 初始化的步骤;
在 CamMngr 的 Dispose 中加入该 SDK 清理的步骤;
参考目前两个函数中对海康SDK对应函数的调用。

Step 3 修改配置文件

参照使用说明部分,Step1中的xml配置文件格式,将参数添加到 cam.xml 中。
其中 camera 标签的 type 属性需要命名。假设命名为 “newtype”。

Step 4 修改 AddByType

在 CamMngr 的 AddByType 函数中,参考海康的 case,增加一个 case 结点:

  1. // 假设新摄像头的包装类为:CamImpl_NewCam
  2. // 假设新摄像头的类型名为:newtype
  3. case "newtype":
  4. {
  5. CamImpl_NewCam cam = new CamImpl_NewCam(_cam_id, _settings);
  6. if (handle_dict.ContainsKey(_cam_id))
  7. cam.HPlayerWnd = handle_dict[_cam_id];
  8. Add<CamImpl_NewCam>(_cam_id, cam);
  9. }
  10. break;

效果示例

HKV30V40.PNG.jpg-48.4kB
左:海康V40; 右:海康
可以看到V40延迟比V30高130ms左右。

4. 程序设计文档

classGrap.PNG-33.8kB

TODO

5. 代码文档

TODO

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注