GB28181学习(十一)——控制(PTZ、镜头、光圈等控制)

要求

  • 源设备向目标设备发送控制命令,控制命令类型包括:
    • 摄像机云台控制
    • 远程启动
    • 录像控制
    • 报警布防/撤防
    • 报警复位
    • 强制关键帧
    • 拉框放大/缩小
    • 看守位控制
    • PTZ精准控制
    • 存储卡格式化
    • 目标跟踪
    • 软件升级
    • 设备配置
  • 设备配置的内容包括:
    • 基本参数
    • 视频参数范围
    • SVAC编码
    • SVAC解码
    • 视频参数属性
    • 录像计划
    • 报警录像
    • 视频画面遮挡
    • 画面翻转
    • 报警上报开关
    • 前端OSD
    • 图像抓拍配置
  • 控制采用MESSAGE方法实现;
  • 源设备向目标设备发送控制命令后,目标设备不需要发送应答命令的控制命令包括:
    • 摄像机云台控制
    • 远程启动
    • 强制关键帧
    • 拉框放大/缩小
    • PTZ精准控制
    • 存储卡格式化
    • 目标跟踪
  • 源设备向目标设备发送控制命令后,目标设备需要发送应答命令的控制命令包括:
    • 录像控制
    • 报警布防/撤防
    • 报警复位
    • 看守位控制
    • 软件升级
    • 设备配置
  • 源设备包括:
    • SIP客户端
    • 网关
    • 联网系统
  • 目标设备包括:
    • SIP设备
    • 网关
    • 联网系统

流程

  • 无应答设备控制流程

在这里插入图片描述

  • 有应答设备控制流程

在这里插入图片描述

协议接口

请求命令

  • MESSAGE消息头Content-type头域为Content-type:Application/MANSCDP+xml;
  • 设备控制命令消息体采用XML封装;
  • 设备控制命令应包括:
    • 命令类型(CmdType);
    • 命令序列号(SN);
    • 设备编码(DeviceID);
    • 子命令;
  • 设备收到MESSAGE消息后,应立即返回应答,应答命令中无消息体;

应答命令

  • MESSAGE消息头Content-type头域为Content-type:Application/MANSCDP+xml;
  • 设备控制命令消息体采用XML封装;
  • 设备控制命令应包括:
    • 命令类型(CmdType);
    • 命令序列号(SN);
    • 设备编码(DeviceID);
    • 执行结果(Result);
  • 设备收到MESSAGE消息后,应立即返回应答,应答命令中无消息体;

控制定义

指令格式

在这里插入图片描述

PTZ控制、镜头变大/缩小s

定义

在这里插入图片描述

示例

在这里插入图片描述

FI指令

定义

在这里插入图片描述

示例

在这里插入图片描述

代码

命令宏定义:

enum PTZControlType
{PTZ_CTRL_HALT = 0,			// 停止PTZ_CTRL_RIGHT,		        // 右转PTZ_CTRL_RIGHTUP,		    // 右上PTZ_CTRL_UP,		        // 上转PTZ_CTRL_LEFTUP,		    // 左上PTZ_CTRL_LEFT,		        // 左转PTZ_CTRL_LEFTDOWN,		    // 左下PTZ_CTRL_DOWN,		        // 下转PTZ_CTRL_RIGHTDOWN,		    // 右下PTZ_CTRL_ZOOM,              // 镜头放大/缩小PTZ_CTRL_IRIS,              // 光圈放大/缩小PTZ_CTRL_FOCUS,             // 镜头聚焦/放焦
};

PTZ转换流程:

std::string CMySipContext::ParsePTZCmd(CMyGBDevice* device, const std::string& gbid, PTZControlType ptzType, int paramValue)
{unsigned char ptzCmdStr[8] = { 0xA5, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };PTZControlType type = ptzType;if (0 == paramValue)type = PTZ_CTRL_HALT;switch (type){case PTZ_CTRL_HALT:break;case PTZ_CTRL_RIGHT:     // 右ptzCmdStr[3] = 0x01;ptzCmdStr[4] = paramValue & 0xFF;break;case PTZ_CTRL_RIGHTUP:   // 右上ptzCmdStr[3] = 0x09;ptzCmdStr[4] = paramValue & 0xFF;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_UP:        // 上ptzCmdStr[3] = 0x08;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_LEFTUP:    // 左上ptzCmdStr[3] = 0x0A;ptzCmdStr[4] = paramValue & 0xFF;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_LEFT:      // 左ptzCmdStr[3] = 0x02;ptzCmdStr[4] = paramValue & 0xFF;break;case PTZ_CTRL_LEFTDOWN:  // 左下ptzCmdStr[3] = 0x06;ptzCmdStr[4] = paramValue & 0xFF;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_DOWN:      // 下ptzCmdStr[3] = 0x04;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_RIGHTDOWN: // 右下ptzCmdStr[3] = 0x05;ptzCmdStr[4] = paramValue & 0xFF;ptzCmdStr[5] = paramValue & 0xFF;break;case PTZ_CTRL_ZOOM:if (paramValue > 0){ptzCmdStr[3] = 0x10;ptzCmdStr[6] = (paramValue & 0x0F) << 4;}else if (paramValue < 0){ptzCmdStr[3] = 0x20;ptzCmdStr[6] = ((-paramValue) & 0x0F) << 4;}break;case PTZ_CTRL_IRIS:if (paramValue > 0){ptzCmdStr[3] = 0x44;ptzCmdStr[5] = paramValue & 0xFF;}else if (paramValue < 0){ptzCmdStr[3] = 0x48;ptzCmdStr[5] = (-paramValue) & 0xFF;}break;case PTZ_CTRL_FOCUS:if (paramValue > 0){ptzCmdStr[3] = 0x41;ptzCmdStr[4] = paramValue & 0xFF;}else if (paramValue < 0){ptzCmdStr[3] = 0x42;ptzCmdStr[4] = (-paramValue) & 0xFF;}break;default:break;}std::string cmdstr;char tmp[8] = { 0, };for (int i = 0; i < 7; i++){ptzCmdStr[7] += ptzCmdStr[i];sprintf(tmp, "%02X", ptzCmdStr[i]);cmdstr += tmp;}sprintf(tmp, "%02X", ptzCmdStr[7]);cmdstr += tmp;char szPTZInfo[200] = { 0 };pj_ansi_snprintf(szPTZInfo, 200,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n""<Control>\n""<CmdType>DeviceControl</CmdType>\n""<SN>130</SN>\n""<DeviceID>%s</DeviceID>\n""<PTZCmd>%s</PTZCmd>\n""</Control>\n", gbid.c_str(), cmdstr.c_str());return szPTZInfo;
}

抓包

PTZ控制

  • 上(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F010800FA00B7</PTZCmd>
</Control>
  • 下(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F010400FA00B3</PTZCmd>
</Control>
  • 左(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0102FA0000B1</PTZCmd>
</Control>
  • 右(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0101FA0000B0</PTZCmd>
</Control>
  • 左上(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F010AFAFA00B3</PTZCmd>
</Control>
  • 左下(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0106FAFA00AF</PTZCmd>
</Control>
  • 右上(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0109FAFA00B2</PTZCmd>
</Control>
  • 右下(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0105FAFA00AE</PTZCmd>
</Control>
  • 停止(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0100000000B5</PTZCmd>
</Control>

镜头放大/缩小

  • 放大(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F01100000A065</PTZCmd>
</Control>
  • 缩小(值:-250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F01200000A075</PTZCmd>
</Control>

光圈放大/缩小

  • 光圈放大(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F014400FA00F3</PTZCmd>
</Control>
  • 光圈缩小(值:-250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F014800FA00F7</PTZCmd>
</Control>

镜头聚焦/放焦

  • 镜头聚焦(值:250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType>v<SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0141FA0000F0</PTZCmd>
</Control>
  • 镜头放焦(值:-250 请求)
<?xml version="1.0" encoding="UTF-8"?>
<Control><CmdType>DeviceControl</CmdType><SN>130</SN><DeviceID>xxx</DeviceID><PTZCmd>A50F0142FA0000F1</PTZCmd>
</Control>

界面展示

在这里插入图片描述

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

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

相关文章

React TypeScript安装npm第三方包时,些包并不是 TypeScript 编写的

npm install types/包名称 例如&#xff1a;npm install types/jquery 学习链接

QSPI介绍

0 Preface/Foreword 1 QSPI介绍

Win10下基于VS2015编译SQLite3源码

一、下载SQLite SQLite SQLite Download Page 下载红框部分的3个文件 提示&#xff1a;这里有个 sglite-autoconf-3420000.tar.gz 是免编译版&#xff0c;想省事就下载这个&#xff0c;但我自己用这个老是编译不过 所以我这里不推荐这个了 二、配置SQLite 打开vs 2015或者其他…

Android Kotlin 协程初探 | 京东物流技术团队

1 它是什么&#xff08;协程 和 Kotlin协程&#xff09; 1.1 协程是什么 维基百科&#xff1a;协程&#xff0c;英文Coroutine [kəru’tin] &#xff08;可入厅&#xff09;&#xff0c;是计算机程序的一类组件&#xff0c;推广了协作式多任务的子程序&#xff0c;允许执行被…

SqueezeNet 一维,二维网络复现 pytorch 小白易懂版

SqueezeNet 时隔一年我又开始复现神经网络的经典模型&#xff0c;这次主要复的是轻量级网络全家桶&#xff0c;轻量级神经网络旨在使用更小的参数量&#xff0c;无限的接近大模型的准确率&#xff0c;降低处理时间和运算量&#xff0c;这次要复现的是轻量级网络的非常经典的一…

muduo源码学习base——Atomic(原子操作与原子整数)

Atomic(原子操作与原子整数&#xff09; 前置知识AtomicIntegerTget()getAndAdd()getAndSet() 关于原子操作实现无锁队列(lock-free-queue) 前置知识 happens-before&#xff1a; 用来描述两个操作的内存可见性 如果操作 X happens-before 操作 Y&#xff0c;那么 X 的结果对于…

有奖招募——2023年度清华社“荐书官”活动今日开始了!

又到“1024程序员节”了&#xff0c;维护网络世界稳定和平的程序员大大们&#xff0c;辛苦了&#xff01;生活难免有bug&#xff0c;来给彼此个hug~ 过完1024&#xff0c;这一年也快要结束了&#xff0c;岁末回顾又要提上日程。很多人都有整理年度书单的习惯&#xff0c;那么这…

架构风格区别-架构案例(五十九)

管道-过滤器和仓库的区别&#xff1f; 独立的数据仓库&#xff0c;处理流独立&#xff0c;处理数据用连接仓库工具数据与处理在一起&#xff0c;改动的话需要重启系统需要仓库工具与仓库连接&#xff0c;数据与处理分离&#xff0c;性能差可以支持并发连接访问仓库&#xff0c…

【经验分享】如何构建openGauss开发编译提交一体化环境

前文 本文适合对openGauss源代码有好奇心的爱好者&#xff0c;那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的&#xff1f;openGauss的编译环境是如何构建的&#xff1f;如何向openGauss提交代码&#xff0c;笔者集合官方和几位博主实践提…

2023年【危险化学品生产单位主要负责人】考试报名及危险化学品生产单位主要负责人模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位主要负责人考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品生产单位主要负责人模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品生产单位主要负…

用nodejs爬虫台湾痞客邦相册

情景:是这样的,我想保存一些喜欢的小伙伴的照片,一张张保存太慢了, 所以我写了个js,放在国外服务器爬,国内的自己解决~ 使用方法 1.点相册随便一张, 复制url, 这张开始接下来的图片都会保存 /*** 2023年10月23日 22:58:44* 支持解析痞客邦相册* 只需要复制相册第一张图片的ur…

新款模块上线实现SIP模块与扩拨电话之间打点与喊话功能 IP矿用电话模块SV-2800VP

新款模块上线实现SIP模块与扩拨电话之间打点与喊话功能 IP矿用电话模块SV-2800VP 一、简介 SV-2800VP系列模块是我司设计研发的一款用于井下的矿用IP音频传输模块&#xff0c;可用此模块打造一套低延迟、高效率、高灵活和多扩展的IP矿用广播对讲系统&#xff0c;亦可对传统煤…

Linux 下安装配置部署MySql8.0

一 . 准备工作 MySQL安装包&#xff1a;在官网下载需要的版本&#xff0c;这里我用的版本是 MySQL 8.0.34 https://dev.mysql.com/downloads/mysql/ 本次linux机器使用的是阿里云ECS实例 二 . 开始部署 1. 将安装包上传至服务器 解压到当前文件夹 tar -zxvf mysql-8.0.34…

SAP HANA Time Zone设置

通常对于MINICHECK中检查出来的Timezone时区设置问题&#xff0c;可以通过以下方式进行修改 对于ABAP系统 修改HANA 参数即可 • indexserver.ini -> [global] -> timezone_default_data_client_name 000 • indexserver.ini -> [global] -> timezone_default_da…

蓝桥杯每日一题2023.10.21

后缀表达式 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 30分解法&#xff1a;要求出最大的结果就需要加的数越大&#xff0c;减的数越小&#xff0c;以此为思路简单列举即可 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10…

微信小程序设计之主体文件app-json-pages

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

【2021集创赛】Digilent杯二等奖:基于FPGA的动态视觉感知融合的运动目标检测系统

杯赛题目&#xff1a;Diligent杯&#xff1a;基于FPGA开源软核的硬件加速智能平台 参赛组别&#xff1a;A组 设计任务&#xff1a; 利用业界主流软核处理器(仅限于Cortex-M系列及 RISC-V系列)在限定的DIGILENT官方FPGA平台上构建SoC片上系统&#xff0c;在 SoC中添加面向智能应…

Python数据挖掘 | 升级版自动查核酸

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…

GoLong的学习之路(五)语法之数组

书接上回&#xff0c;上回书说到&#xff0c;循环语句&#xff0c;在go中循环语句的少了whlie这个关键词&#xff0c;但是与之for可以改这个改这个特点。并且在终止关键词中&#xff0c;又有标签可以方便&#xff0c;停止。这次说数组 文章目录 Array(数组)数组的初始化方法一方…

计算机网络_03_tcp/ip四层模型

文章目录 1.为什么会有tcp/ip?2.tcp/ip是什么?3.为什么会有tcp/ip四层模型?4.tcp/ip四层模型介绍 1.为什么会有tcp/ip? 早期的计算机(计算机网络没有出现之前)几乎都是各自为战, 各种操作系统厂家百花齐放, 市面上的大部分计算机使用的都是不同的操作系统, 为每个人提供定…