@Pigmon
2022-01-14T17:51:12.000000Z
字数 2161
阅读 422
遥控
版本 | 修改人 | 说明 | 日期 |
---|---|---|---|
V1.0 | 袁胜 | 使用说明;类图; | 2019年9月14日 |
通过泛型摄像机管理器,可兼容多个基于不同SDK的摄像机同时显示;(需要各自按照接口实现包装类)
使用XML配置文件管理摄像机的参数;
改变摄像机数量、参数和布局顺序不需修改程序,只要修改配置文件或在vs的UI设计器中修改参数;
因为目前代码服务器还没有正式启用,测试用云服务器可能还需要多次重装系统,因此本项目暂时放在github上,并设置为私有项目。
请将github账号发给我来添加到协作者中,就可以下载工程了。
链接:
https://github.com/pigmon/RCWidgets.git
将播放器控件设置为可停靠窗口;
摄像机配置文件制作GUI界面;
播放器控件增加快捷操作接口;
配置文件在工程的 config 目录下,名字是 cam.xml。
按照下面例子中的 camera 标签中的格式添加配置,注意 id 不能重复。
<cameras>
<camera id="1" type="v30">
<login ip="192.168.1.101" port="8000" user="admin" passwd="ht123456">
</login>
<play_setting channel="1" stream="0" protocol="3" block="0" buffer="50">
</play_setting>
</camera>
</cameras>
play_setting 标签下的几个参数是根据海康威视SDK定制的,今后有其他厂商的摄像机加入后,需要修改 CamSettings 类和 XML 文件的格式,增加目前没有的配置属性。
channel代表播放通道;
stream代表码流类型(0-主码流,1-子码流);
protocol代表传输协议(0-TCP,1-UDP,2-多播,3-RTP);
block代表是否阻塞式;
buffer代表缓存数量;
v30 目前代表海康威视;
在编译过工程后,自定义控件 CamPlayerWnd 就会出现在 UI 设计器的工具箱中:
将其拖放到上一级容器中:
图中黑色方框即为刚刚拖放的 CamPlayerWnd,可以在 UI 设计器或其属性编辑器中修改位置和大小等参数。
右键点击该控件,在弹出菜单中选择“属性”即打开其属性编辑器。在属性编辑器中找到 CamID 一项,设置为刚刚在 cam.xml 中增加的摄像机的 id。如图所示:
最后,保存项目并运行,就可以看到结果:
参考Form1.cs中注释为Test Case的部分:
// Test Case
CamMngr.Init();
CamMngr mngr = new CamMngr();
mngr.FromXml("../config/cam.xml");
mngr.DoLoginAll();
mngr.DoPlayAll();
资源在关闭窗口时自动释放,也可以手动释放。
除此之外还有重连等功能,具体参考代码文档。
这里指除海康威视之外的,使用其他SDK的摄像机的增加方法。
仿造类 CamImpl_HK,实现 ICamWrapper 接口。命名规则 CamImpl_[摄像机商标缩写]。
例如:CamImpl_NewCam。
至少实现一个构造函数,参数列表为:
(uint _cam_id, CamSettings _settings)
实现方法参照 CamImpl_HK。
在 CamMngr 的 Init 函数中加入该 SDK 初始化的步骤;
在 CamMngr 的 Dispose 中加入该 SDK 清理的步骤;
参考目前两个函数中对海康SDK对应函数的调用。
参照使用说明部分,Step1中的xml配置文件格式,将参数添加到 cam.xml 中。
其中 camera 标签的 type 属性需要命名。假设命名为 “newtype”。
在 CamMngr 的 AddByType 函数中,参考海康的 case,增加一个 case 结点:
// 假设新摄像头的包装类为:CamImpl_NewCam
// 假设新摄像头的类型名为:newtype
case "newtype":
{
CamImpl_NewCam cam = new CamImpl_NewCam(_cam_id, _settings);
if (handle_dict.ContainsKey(_cam_id))
cam.HPlayerWnd = handle_dict[_cam_id];
Add<CamImpl_NewCam>(_cam_id, cam);
}
break;
左:海康V40; 右:海康
可以看到V40延迟比V30高130ms左右。
TODO
TODO