目录
一、视频监控平台介绍
(一)概述
(二)视频接入能力介绍
(三)功能介绍
二、TCL网络摄像机
(一)360度全景自动旋转:
(二)高清夜视和全彩夜视:
(三)自动巡航和定点追踪:
(四)存储方式:
(五)多种像素选择:
(六)网络连接:
(七)其他功能:
三、代码和解释
(一)代码和注释
(二)函数功能说明
1、函数的参数
2、主体部分和分支
(1)第一个分支:设置或调用预置位
(2)第二个分支:停止移动
(3)第三个分支:平移和缩放
(4)补充说明
(三)结束
四、效果展示
(一)正常浏览实时视频
(二)PTZ向上移动
(三)PTZ调节镜头
一、视频监控平台介绍
(一)概述
威迪斯特视频监控接入平台AS-V1000,也可以称为:视频监控综合资源管理平台,视频监控平台,视频监控汇聚平台(或视频监控汇集平台),视频监控管理平台,视频监控综合管理平台,是一套集成了用户设备权限管理、视音频监控、大容量存储、电子地图的系统平台软件。它结合了现代视频技术、网络通讯技术、计算机控制技术、流媒体传输技术的综合解决方案,为用户提供了强大的、灵活的组网和应用能力。
(二)视频接入能力介绍
系统平台能够实现接入不同品牌的视频监控平台、视频相关设备、外围设备等等;支持国际和国内的一些标准对接协议,包括sdk协议、GB/T28181协议、ehome协议等等。可以通过各种协议,接入IPC、DVR、DVS、NVR等设备,以及一些大型的视频监控平台,包括海康威视、浙江大华、苏州科达、杭州宇视等主流品牌的监控平台,对于有些特有品牌的平台, 也能够通过SDK接口、私有协议等方式接入进入本系统平台(国外品牌包括:Panasonic和axis等);反过来,本平台也提供开放接口,能够接入到其他标准或者非标准的平台。
前面有篇文章:《AS-V1000平台使用SDK的方式接入监控设备》,有兴趣可以查看。
(三)功能介绍
平台实现了丰富的功能,包含:实时多媒体数据转发和管理、移动流媒体转发管理、不间断录像、录像文件检索和回放、录像下载、设备状态管理、系统报警管理、视频转码、视频点播等等;整个平台具备稳定可靠、使用安全、兼容性强、接口开放、服务可堆叠、服务可多级级联、系统可平滑扩容等特点。
二、TCL网络摄像机
TCL网络摄像机是一款网络监控设备,它具备视频捕捉、编码、存储和网络传输等功能。用户可以通过网络远程访问这些摄像机,实现实时监控。TCL作为一家知名的家电及通讯设备制造商,其网络摄像机产品通常会具备一些特色功能,如高清视频、夜视功能、移动侦测、云存储等,以满足家庭、企业及商用安全监控的需求。
以下概要介绍一下TCL网络摄像机的一些主要特点和信息。
(一)360度全景自动旋转:
TCL的部分网络摄像机支持360度全景自动旋转,这使得它们能够无死角地监控周围环境。不论是室内还是室外,用户都可以通过摄像头全方位地观察。
(二)高清夜视和全彩夜视:
TCL网络摄像机提供了高清夜视和全彩夜视功能,确保在夜晚也能提供清晰而细腻的图像。这对于室外监控尤为重要,用户即使在黑暗中也能监控到重要情况。
(三)自动巡航和定点追踪:
一些TCL网络摄像机具备自动巡航和定点追踪功能。它们可以根据用户的设定,在预设的区域内进行自动巡航,确保所有角落都被监控到。同时,它们还能够通过智能识别技术,实现目标的准确定位和追踪。
(四)存储方式:
TCL网络摄像机支持云存储和扩展存储卡,用户可以根据实际需求选择合适的存储方式。云存储可以帮助用户远程访问摄像头的录像内容,而扩展存储卡则提供了更大的存储空间。
(五)多种像素选择:
TCL网络摄像机提供了多种像素选择,如300万、400万、500万、800万等,用户可以根据监控需求选择合适的像素。
(六)网络连接:
TCL网络摄像机支持无线Wi-Fi和有线网络连接,用户可以根据实际情况选择合适的连接方式。
(七)其他功能:
除了上述主要功能外,TCL网络摄像机还可能具备语音对讲、手机远程查看、移动检测、声光报警等功能,以满足不同用户的需求。
三、代码和解释
这里共享一段C++代码,代码定义了一个名为CNetSdkForTclIPC::ZXPtzControl的类函数,该类用于通过TCL网络摄像机的SDK来控制TCL网络摄像机的云台和镜头。
(一)代码和注释
以下是为代码和注释:
int CNetSdkForTclIPC::ZXPtzControl(long LoginID, int channelid, int opt, int param1, TExtPtzInfo *pExtPtzInfo)
{
// 定义一些变量,用于存储函数执行的结果和参数
TC_S32 retcode = 0; // 用于存储返回码
TC_U32 rspparam = 0; // 用于存储返回参数
// 定义一些变量,用于存储PTZ命令和相关参数
CM_PTZ_E ptz_cmd = PTZ_CTRL_NONE; // PTZ命令枚举,初始值为无命令
bool bstop = false; // 停止标志位,初始值为false
int iparam1 = param1; // 参数1的副本,用于后续计算
// 根据opt的值,判断是否执行PTZ位置设置等操作
if (opt == PTZ_OPT_POS_SET || opt == PTZ_OPT_POS_CALL || opt == PTZ_OPT_POS_CLEAR || opt == PTZ_OPT_ASS || opt == PTZ_OPT_WASH)
{
// 根据不同的opt值,设置相应的PTZ命令
if (opt == PTZ_OPT_ASS)
ptz_cmd = PTZ_CTRL_LIGHT;
else if (opt == PTZ_OPT_WASH)
ptz_cmd = PTZ_CTRL_WIPER;
else if (opt == PTZ_OPT_POS_SET)
ptz_cmd = PTZ_CTRL_SAVE_PRESET;
else if (opt == PTZ_OPT_POS_CLEAR)
ptz_cmd = PTZ_CTRL_CALL_PRESET; // 注意:这里没有执行清除操作
else
ptz_cmd = PTZ_CTRL_CALL_PRESET;
// 构造PTZ请求结构体
CM_PTZ PtzReq;
PtzReq.channel = channelid - 1; // 通道ID减1,可能是由于内部处理需要
PtzReq.ptz_cmd = (TC_U32)ptz_cmd; // 将PTZ命令转换为适合传输的数据类型
PtzReq.param1 = iparam1; // 设置参数1
PtzReq.param2 = 0; // 设置参数2为速度,这里默认为0
PtzReq.stop = bstop == true ? 1 : 0; // 设置停止标志位
// 发送PTZ控制命令
HandleCmd(CM_CMD_PTZ_CTRL, (char*)&PtzReq, sizeof(PtzReq), retcode, rspparam);
return 0; // 成功执行PTZ控制命令
}
// 根据opt的值,判断是否执行停止移动等操作
if (opt == PTZ_OPT_UP_STOP || opt == PTZ_OPT_DOWN_STOP || opt == PTZ_OPT_LEFT_STOP || opt == PTZ_OPT_RIGHT_STOP ||
opt == PTZ_OPT_UL_STOP || opt == PTZ_OPT_DL_STOP || opt == PTZ_OPT_UR_STOP || opt == PTZ_OPT_DR_STOP ||
opt == PTZ_OPT_ZOOMIN_STOP || opt == PTZ_OPT_ZOOMOUT_STOP || opt == PTZ_OPT_FOCUSNEAR_STOP || opt == PTZ_OPT_FOCUSFAR_STOP ||
opt == PTZ_OPT_IRISOPEN_STOP || opt == PTZ_OPT_IRISCLOSE_STOP)
{
// 设置停止标志位为true
bstop = true;
}
// 根据opt的值,判断是否执行平移和缩放等操作
if (opt == PTZ_OPT_UP || opt == PTZ_OPT_UP_STOP)
{
ptz_cmd = PTZ_CTRL_UP;
}
else if (opt == PTZ_OPT_DOWN || opt == PTZ_OPT_DOWN_STOP)
{
ptz_cmd = PTZ_CTRL_DOWN;
}
else if (opt == PTZ_OPT_LEFT || opt == PTZ_OPT_LEFT_STOP)
{
ptz_cmd = PTZ_CTRL_LEFT;
}
else if (opt == PTZ_OPT_RIGHT || opt == PTZ_OPT_RIGHT_STOP)
{
ptz_cmd = PTZ_CTRL_RIGHT;
}
else if (opt == PTZ_OPT_UL || opt == PTZ_OPT_UL_STOP)
{
ptz_cmd = PTZ_CTRL_LEFT_UP;
}
else if (opt == PTZ_OPT_DL || opt == PTZ_OPT_DL_STOP)
{
ptz_cmd = PTZ_CTRL_LEFT_DOWN;
}
else if (opt == PTZ_OPT_UR || opt == PTZ_OPT_UR_STOP)
{
ptz_cmd = PTZ_CTRL_RIGHT_UP;
}
else if (opt == PTZ_OPT_DR || opt == PTZ_OPT_DR_STOP)
{
ptz_cmd = PTZ_CTRL_RIGHT_DOWN;
}
else if (opt == PTZ_OPT_ZOOMIN || opt == PTZ_OPT_ZOOMIN_STOP)
{
ptz_cmd = PTZ_CTRL_ZOOM_TELE;
}
else if (opt == PTZ_OPT_ZOOMOUT || opt == PTZ_OPT_ZOOMOUT_STOP)
{
ptz_cmd = PTZ_CTRL_ZOOM_WIDE;
}
else if (opt == PTZ_OPT_FOCUSNEAR || opt == PTZ_OPT_FOCUSNEAR_STOP)
{
ptz_cmd = PTZ_CTRL_FOCUS_NEAR;
}
else if (opt == PTZ_OPT_FOCUSFAR || opt == PTZ_OPT_FOCUSFAR_STOP)
{
ptz_cmd = PTZ_CTRL_FOCUS_FAR;
}
else if (opt == PTZ_OPT_IRISOPEN || opt == PTZ_OPT_IRISOPEN_STOP)
{
ptz_cmd = PTZ_CTRL_IRIS_OPEN;
}
else if (opt == PTZ_OPT_IRISCLOSE || opt == PTZ_OPT_IRISCLOSE_STOP)
{
ptz_cmd = PTZ_CTRL_IRIS_CLOSE;
}
// 如果ptz_cmd不为PTZ_CTRL_NONE,则执行PTZ移动操作
if (ptz_cmd != PTZ_CTRL_NONE)
{
// 对于缩放、聚焦近、聚焦远和光圈打开、关闭的操作,需要对参数1进行转换
if (opt == PTZ_OPT_ZOOMIN || opt == PTZ_OPT_ZOOMOUT ||
opt == PTZ_OPT_FOCUSNEAR || opt == PTZ_OPT_FOCUSFAR ||
opt == PTZ_OPT_IRISOPEN || opt == PTZ_OPT_IRISCLOSE)
{
iparam1 = (unsigned int)((iparam1 * 1.0 / 15.0) * 7.0);
}
else
{
iparam1 = (unsigned int)((iparam1 * 1.0 / 255.0) * 7.0);
}
// 构造PTZ请求结构体
CM_PTZ PtzReq;
PtzReq.channel = channelid - 1;
PtzReq.ptz_cmd = (TC_U32)ptz_cmd;
PtzReq.param1 = 0;
PtzReq.param2 = iparam1; // 设置参数2为速度
PtzReq.stop = bstop == true ? 1 : 0;
// 发送PTZ请求到控制服务器
if (ptz_cmd == PTZ_CTRL_UP || ptz_cmd == PTZ_CTRL_DOWN ||
ptz_cmd == PTZ_CTRL_LEFT || ptz_cmd == PTZ_CTRL_RIGHT ||
ptz_cmd == PTZ_CTRL_LEFT_UP || ptz_cmd == PTZ_CTRL_LEFT_DOWN ||
ptz_cmd == PTZ_CTRL_RIGHT_UP || ptz_cmd == PTZ_CTRL_RIGHT_DOWN)
{
PtzReq.param2 = iparam1; // 设置参数2为速度
}
else
{
PtzReq.param2 = 0;
}
// 发送PTZ控制命令
ret = send_ptz_cmd(&PtzReq);
if (ret != 0)
{
printf("发送PTZ控制命令失败, 错误码: %d\n", ret);
return -1;
}
}
return 0;
}
(二)函数功能说明
这段代码是视频监控系统的一部分,用于实现对摄像头PTZ功能的编程控制。具体的讲,这段C++代码定义了一个名为CNetSdkForTclIPC
的类的成员函数ZXPtzControl
,该函数用于控制远程设备的PTZ(Pan-Tilt-Zoom,即变焦)功能。PTZ是视频监控摄像头常见的功能,允许用户远程控制摄像头的方向和焦距。
1、函数的参数
函数ZXPtzControl的参数如下:
- LoginID:一个长整型参数,可能代表登录会话ID。
- channelid:一个整型参数,代表要控制的通道ID。
- opt:一个整型参数,代表控制命令的类型。
- param1:一个整型参数,代表控制命令的附加参数。
- pExtPtzInfo:一个指向TExtPtzInfo结构的指针,可能用于传递额外的PTZ信息。
2、主体部分和分支
函数的主体部分分为多个分支,根据opt参数的值来确定具体的PTZ控制命令。
首先,代码定义了几个变量,包括TC_S32类型的retcode和rspparam,以及TC_U32类型的rspparam。这些变量用于存储函数执行后的返回码和参数。
接下来,根据opt的值,函数进行了多个分支判断:
(1)第一个分支:设置或调用预置位
处理PTZ_OPT_POS_SET、PTZ_OPT_POS_CALL、PTZ_OPT_POS_CLEAR、
PTZ_OPT_ASS和PTZ_OPT_WASH这几个命令。这些命令与设置或调用预设的PTZ位置相关。
(2)第二个分支:停止移动
处理停止移动的命令,如PTZ_OPT_UP_STOP、PTZ_OPT_DOWN_STOP等。在这个分支中,bstop变量被设置为true。
(3)第三个分支:平移和缩放
处理平移和缩放的命令,如PTZ_OPT_UP、PTZ_OPT_DOWN、PTZ_OPT_LEFT等。在这个分支中,根据命令类型设置ptz_cmd变量,然后构建一个CM_PTZ结构,包含通道ID、PTZ命令、参数和停止标志,并调用HandleCmd函数发送PTZ控制命令。
(4)补充说明
在处理平移和缩放命令的分支中,如果命令是PTZ_OPT_ZOOMIN、
PTZ_OPT_ZOOMOUT、PTZ_OPT_FOCUSNEAR、PTZ_OPT_FOCUSFAR、PTZ_OPT_IRISOPEN或PTZ_OPT_IRISCLOSE,参数param1会根据一定的比例进行转换,然后设置到CM_PTZ结构的param2字段,这个字段可能代表速度或者开度等。
(三)结束
最后,函数返回0,表示控制命令已成功处理。
四、效果展示
(一)正常浏览实时视频
可以通过视频监控平台的web客户端,查看TCL的视频图像,如下图示:
(二)PTZ向上移动
对视频图像的云台,往上移动一点,效果如下:
(三)PTZ调节镜头
然后,调节PTZ的 “镜头变倍+”,如下图示:
调整后效果如下:
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。