视频监控平台:通过网络SDK对TCL网络摄像机进行PTZ控制 的源代码介绍及分享

目录

一、视频监控平台介绍

(一)概述

(二)视频接入能力介绍

(三)功能介绍

二、TCL网络摄像机

(一)360度全景自动旋转:

(二)高清夜视和全彩夜视:

(三)自动巡航和定点追踪:

(四)存储方式:

(五)多种像素选择:

(六)网络连接:

(七)其他功能:

三、代码和解释

(一)代码和注释

(二)函数功能说明

1、函数的参数

2、主体部分和分支

(1)第一个分支:设置或调用预置位

(2)第二个分支:停止移动

(3)第三个分支:平移和缩放

(4)补充说明

(三)结束

四、效果展示

(一)正常浏览实时视频

(二)PTZ向上移动

(三)PTZ调节镜头


一、视频监控平台介绍

(一)概述

        威迪斯特视频监控接入平台AS-V1000,也可以称为:视频监控综合资源管理平台,视频监控平台,视频监控汇聚平台(或视频监控汇集平台),视频监控管理平台,视频监控综合管理平台,是一套集成了用户设备权限管理、视音频监控、大容量存储、电子地图的系统平台软件。它结合了现代视频技术、网络通讯技术、计算机控制技术、流媒体传输技术的综合解决方案,为用户提供了强大的、灵活的组网和应用能力。

(二)视频接入能力介绍

        系统平台能够实现接入不同品牌的视频监控平台、视频相关设备、外围设备等等;支持国际和国内的一些标准对接协议,包括sdk协议、GB/T28181协议、ehome协议等等。可以通过各种协议,接入IPC、DVR、DVS、NVR等设备,以及一些大型的视频监控平台,包括海康威视、浙江大华、苏州科达、杭州宇视等主流品牌的监控平台,对于有些特有品牌的平台, 也能够通过SDK接口、私有协议等方式接入进入本系统平台(国外品牌包括:Panasonicaxis);反过来,本平台也提供开放接口,能够接入到其他标准或者非标准的平台。

        前面有篇文章:《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; // 停止标志位,初始值为falseint 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; // 注意:这里没有执行清除操作elseptz_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; // 设置参数1PtzReq.param2 = 0; // 设置参数2为速度,这里默认为0PtzReq.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){// 设置停止标志位为truebstop = 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,该函数用于控制远程设备的PTZPan-Tilt-Zoom,即变焦)功能。PTZ是视频监控摄像头常见的功能,允许用户远程控制摄像头的方向和焦距。

1、函数的参数

函数ZXPtzControl的参数如下:

  • LoginID:一个长整型参数,可能代表登录会话ID。
  • channelid:一个整型参数,代表要控制的通道ID。
  • opt:一个整型参数,代表控制命令的类型。
  • param1:一个整型参数,代表控制命令的附加参数。
  • pExtPtzInfo:一个指向TExtPtzInfo结构的指针,可能用于传递额外的PTZ信息。

2、主体部分和分支

函数的主体部分分为多个分支,根据opt参数的值来确定具体的PTZ控制命令。

首先,代码定义了几个变量,包括TC_S32类型的retcoderspparam,以及TC_U32类型的rspparam。这些变量用于存储函数执行后的返回码和参数。

接下来,根据opt的值,函数进行了多个分支判断:

(1)第一个分支:设置或调用预置位

        处理PTZ_OPT_POS_SET、PTZ_OPT_POS_CALLPTZ_OPT_POS_CLEAR

PTZ_OPT_ASSPTZ_OPT_WASH这几个命令。这些命令与设置或调用预设的PTZ位置相关。

(2)第二个分支:停止移动

        处理停止移动的命令,如PTZ_OPT_UP_STOPPTZ_OPT_DOWN_STOP等。在这个分支中,bstop变量被设置为true

(3)第三个分支:平移和缩放

        处理平移和缩放的命令,如PTZ_OPT_UPPTZ_OPT_DOWNPTZ_OPT_LEFT等。在这个分支中,根据命令类型设置ptz_cmd变量,然后构建一个CM_PTZ结构,包含通道IDPTZ命令、参数和停止标志,并调用HandleCmd函数发送PTZ控制命令。

(4)补充说明

        在处理平移和缩放命令的分支中,如果命令是PTZ_OPT_ZOOMIN、

PTZ_OPT_ZOOMOUT、PTZ_OPT_FOCUSNEARPTZ_OPT_FOCUSFARPTZ_OPT_IRISOPENPTZ_OPT_IRISCLOSE,参数param1会根据一定的比例进行转换,然后设置到CM_PTZ结构的param2字段,这个字段可能代表速度或者开度等。

(三)结束

        最后,函数返回0,表示控制命令已成功处理。

四、效果展示

(一)正常浏览实时视频

        可以通过视频监控平台的web客户端,查看TCL的视频图像,如下图示:

(二)PTZ向上移动

        对视频图像的云台,往上移动一点,效果如下:

(三)PTZ调节镜头

        然后,调节PTZ的 “镜头变倍+”,如下图示:

        调整后效果如下:


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tustin变换,连续传递函数离散化

Tustin变换,连续传递函数离散化 举例 上述说明了,不要盲目相信ChatGPT f_vehspd 12; phase_vehspd 120; f_res f_vehspd / tan((360-phase_vehspd) * pi/(4*180) );%连续传递函数 num [1 -2*f_res f_res^2]; den [1 2*f_res f_res^2]; sys tf(num…

示例:WPF中绑定枚举到ComboBox的方式

一、目的:在开发过程中,经常会需要把枚举绑定到ComboxBox下拉列表中,其实方法有很多,这里面通过MarkupExtension扩展GetEnumSourceExtension去绑定到列表 二、实现 定义GetEnumSourceExtension类 public class GetEnumSourceExte…

Part 4.2 背包动态规划

->背包模型模板(0/1,分组&#xff0c;完全&#xff0c;多重)<- [NOIP2018 提高组] 货币系统 题目背景 NOIP2018 提高组 D1T2 题目描述 在网友的国度中共有 n n n 种不同面额的货币&#xff0c;第 i i i 种货币的面额为 a [ i ] a[i] a[i]&#xff0c;你可以假设每…

算法03 二分查找算法【C++实现】

二分查找的概念 二分查找又称为折半查找&#xff0c;主要用于查找一个有序数组中某一个数的位置。 主要思想如下&#xff1a; 在一个有序数组中&#xff0c;取数组的中间值与要查找的数进行比较&#xff1b; 若要查找的数等于中间值&#xff0c;查找成功。 二分查找的步骤 …

Node.js安装扫盲

一、Node.js安装 在官网下载node.js安装包 双击打开node-v20.14.0-x64.ms文件&#xff0c;点击运行 进入安装Node.js的对话框&#xff0c;点击Next继续 勾选复选框后点击Next继续 默认安装路径 默认配置 这里不需要勾选&#xff0c;直接点击Next 点击Install 二、Node.js验…

【安装和引入 PyTorch 包,快来收藏】

在本文介绍 PyTorch 中一些最常用的命令和设置。 一个完成的 PyTorch 工作流程。 安装和引入 PyTorch 包 最好的安装教程就是去官方网站&#xff1a;https://pytorch.org/get-started/locally/ 安装结束之后&#xff0c;直接引入整个 torch 包&#xff1a; import torch或…

SQL注入-上篇

SQL注入 注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器&#xff0c;这些恶意数据可以欺骗解释器&#xff0c;从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sq…

MySQL约束详解:构建数据完整性基石

目录 MySQL约束1.1 约束1.1 数据类型1.2 主键约束[重要]1.3 自增约束1.4 唯一约束1.5 非空约束1.6 默认值代码演示 1.7 外键约束[了解]思维导图最后 MySQL约束 MySQL作为广泛使用的开源关系型数据库管理系统&#xff0c;其强大的数据约束功能对于维护数据的一致性和准确性至关…

4.类,方法,对象

1.1.2. 面向对象程序设计的三大特征 1.1.2.1. 封装 面向对象编程核心思想之一就是将数据和对数据的操作封装在一起&#xff0c;形成一般的概念&#xff0c;比如类的概念。 1.1.2.2. 继承 继承体现了一种先进的编程模式。子类可以继承父类的属性和方法。 1.1.2.3. 多态 多…

Day 44 Ansible自动化运维

Ansible自动化运维 几种常用运维工具比较 ​ Puppet ​ —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱ruby ​ SaltStack ​ —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配置脚本更简单 ​ Ansible ​ —基于 …

Python学习笔记12:进阶篇(一),类的相关知识

前言 在讲类之前&#xff0c;我们简单介绍一些Python的知识。这些知识在入门篇没讲&#xff0c;想学Python的&#xff0c;基本都对Python有基础的了解&#xff0c;但是今天开始的进阶知识&#xff0c;会涉及到一些Python的特性&#xff0c;所以在这里介绍一下。 Python是一种高…

Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )

上期链接&#xff1a;Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)-CSDN博客 上期我们聊了人物的受伤和死亡的逻辑和动画&#xff0c;我们主要学习了事件的执行&#xff0c;即我们在人物受伤时可能会触发很多的事件&#xff0c;比如触发人物受伤的动画以及播放音乐等…

LabVIEW电表改装与校准仿真系统

LabVIEW开发的电表改装与校准仿真实验平台不仅简化了传统的物理实验流程&#xff0c;而且通过虚拟仿真提高了实验的效率和安全性。该平台通过模拟电表改装与校准的各个步骤&#xff0c;允许学生在没有实际硬件的情况下完成实验&#xff0c;有效地结合了理论学习和实践操作。 项…

计算机组成原理(三)

文章目录 只读存储器和闪速存储器ROM 只读存储器光擦可编程只读存储器(EPROM) 闪速存储器 并行存储器双端口存储器多模块交叉存储器定量分析 相联存储器 只读存储器和闪速存储器 ROM 只读存储器 ROM ,只能读出不能写入&#xff0c;最大的优点是不易失性。 光擦可编程只读存储器…

Spring Security+Spring Boot实现登录认证以及权限认证

基本概念 “Authentication(认证)”是spring security框架中最重要的功能之一&#xff0c;所谓认证&#xff0c;就是对当前访问系统的用户给予一个合法的身份标识&#xff0c;用户只有通过认证才可以进入系统&#xff0c;在物理世界里&#xff0c;有点类似于“拿工卡刷门禁”的…

homework 2024.06.17 math, UI

A的宽度225 B的宽度150 这样画出来就比较标准&#xff0c; 225 * 2 150 * 3 2A 3B

【排序算法】希尔排序详解(C语言)

文章目录 前言希尔排序的原理原理思路 代码实现希尔排序的相关问题效率算法稳定性 前言 为什么会有希尔排序&#xff0c;要从插入排序说起&#xff0c;希尔排序一开始设计出来是为了改进插入排序&#xff0c;因为插入排序在处理大量数据时效率不高&#xff0c;特别是对于近乎有…

【MySQL】MySQL数据库基础|数据库的操作|常用数据类型|表的操作

目录 一、数据库的操作&#xff08;针对“数据集合”的操作&#xff09; 1.显示当前的数据库 2.创建数据库 3.使用数据库 4.删除数据库 二、常用数据类型 1.数值类型 2.字符串类型 3.日期类型 三、表的操作 1.列出当前数据库的表 2.创建表 3.查看表结构 4.删除表…

11.5.k8s中pod的调度-cordon,drain,delete

目录 一、概念 二、使用 1.cordon 停止调度 1.1.停止调度 1.2.解除恢复 2.drain 驱逐节点 2.1.驱逐节点 2.2.参数介绍 2.3.解除恢复 3.delete 删除节点 一、概念 cordon节点&#xff0c;drain驱逐节点&#xff0c;delete 节点&#xff0c;在对k8s集群节点执行维护&am…

CesiumJS【Basic】- #006 浏览器控制台查看位置角度

文章目录 浏览器控制台查看位置角度1 目标 浏览器控制台查看位置角度 1 目标 浏览器控制台查看位置角度