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

news2024/12/23 13:21:00

要求

  • 源设备向目标设备发送控制命令,控制命令类型包括:
    • 摄像机云台控制
    • 远程启动
    • 录像控制
    • 报警布防/撤防
    • 报警复位
    • 强制关键帧
    • 拉框放大/缩小
    • 看守位控制
    • 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.coloradmin.cn/o/1127258.html

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

相关文章

ASO优化之什么是长尾关键词

通常长尾关键词的竞争通常较小&#xff0c;我们可以通过优化长尾关键词&#xff0c;来更轻松地在搜索结果中获得高排名。那么我们需要找到哪些应该优化的关键词以及如何优化。 1、长尾关键词的好处。 长尾关键字中添加的详细信息可以帮助缩小受众群体的范围&#xff0c;使得长…

python爬虫入门(四)爬取猫眼电影排行(使用requests库和正则表达式)

本例中&#xff0c;利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。 1.目标 提取出猫眼电影 TOP100 的电影名称、时间、评分、图片等信息&#xff0c;提取的站点 URL 为 http://maoyan.com/board/4&#xff0c;提取的结果会以文件形式保存下来。 2.抓取分析…

迅为龙芯2K1000开发板加载PMON镜像

注意&#xff1a;这里不建议大家在没有 Ejtag 的情况下对 PMON 进行操作&#xff0c;以免开发板变砖。 设置完网络后&#xff0c;我们输入命令 load -f 0xbfc00000 -r tftp://192.168.1.38/gzrom-dtb.bin&#xff0c;其中 192.168.1.38 为虚拟机 Ubuntu 的 IP 地址&#xff0…

数字孪生 Digital Twin 标准体系

1.什么是数字孪生&#xff1f; 数字孪生&#xff08;Digital T w in &#xff09;作为一种在信息世界刻画物理世界 、仿真物理世界 、优化物理世界 、可视化物理世界的重要技术 &#xff0c;为实现数字化转型 、智能化&#xff08;如智慧城市 、智能制造&#xff09; 、服务化 …

工业RFID系统识别原理

RFID技术是一种无线通信技术&#xff0c;可以实现非接触式的标签信息识别和读取&#xff0c;常常也被应用在工业生产、物流仓储等领域。工业RFID系统可以通过无线电信号识别和跟踪工业生产和管理领域中的物体&#xff0c;以下是工业RFID系统组成及相关应用介绍。 工业RFID系统组…

雅可比矩阵和雅可比坐标

雅可比行列式的简要介绍 一、说明 在本教程中&#xff0c;您将回顾一下雅可比行列式的简单介绍。完成本教程后&#xff0c;您将了解&#xff1a; 雅可比矩阵收集了可用于反向传播的多元函数的所有一阶偏导数。雅可比行列式在变量之间变化时非常有用&#xff0c;它充当一个坐标空…

阶段性学习小记

大家好&#xff0c;今天我们来详细的总结一下最近这段时间的习题。 习题一 #include<stdio.h> int main() {char arr[13] { 0 };int N 0;scanf("%d", &N);int k 0;int i 0;while (N){if (k ! 0 && k % 3 0)arr[i] ,;arr[i] N % 10 0;N / 1…

三步,金蝶K3的数据可视化了

数据可视化的一大特点就是“一图胜千言”&#xff0c;没什么能比图表更直观展现数据的了。那&#xff0c;金蝶K3系统上那海量数据能不能也做成数据可视化报表&#xff1f;操作复杂吗&#xff0c;难度大吗&#xff1f; 换了别的软件来做&#xff0c;操作多、难度大是板上钉钉&a…

重复性管理--从泛值到泛型以及泛函(中)--泛函是什么及为什么

在前面, 我们探讨了泛型范式在解决重复性问题上的应用, 在这里, 将继续探讨泛函范式在解决重复性问题上的作用. 注: 关于"泛函(functional)“这一名称, 前面说了, 泛型的本质是"参数化类型”, 那么, 按照这一思路, 泛函的意思也可以理解为"函数的参数化"或…

jvm垃圾回收算法有哪些及原理

目录 垃圾回收器1 Serial收集器2 Parallel收集器3 ParNew收集器4 CMS收集器5 G1回收器三色标记算法标记算法的过程三色标记算法缺陷多标漏标 垃圾回收器 垃圾回收机制&#xff0c;我们已经知道什么样的对象会成为垃圾。对象回收经历了什么——垃圾回收算法。那么谁来负责回收垃…

电子宣传册制作攻略,打造完美视觉效果

随着互联网的普及&#xff0c;电子宣传册已成为企业宣传的重要手段之一。但是你知道如何制作一份吸引人的电子宣传册&#xff0c;打造完美的视觉效果呢&#xff1f; 我们只需利用FLBOOK这个在线电子期刊制作平台&#xff0c;就可以打造出完美视觉效果的电子宣传册&#xff0c;操…

postgres和postgis下载链接

PostGIS Index of /postgis/windows/ postgres PostgreSQL 10.9 (64-bit) Download arcgis支持的版本 适用于 PostgreSQL 的 ArcGIS 11.1 和 ArcGIS Pro 3.1 要求 适用于—ArcGIS Enterprise | ArcGIS Enterprise 文档 arcgis如何连接 ArcMap 中的数据库连接—ArcMap | 文…

亚马逊添加购物车和收藏有什么区别

亚马逊的添加购物车和收藏是两个不同的功能&#xff0c;它们在用户行为和用途上有明显的区别&#xff1a; 1、添加购物车&#xff08;Add to Cart&#xff09;&#xff1a; 当用户点击"添加到购物车"按钮时&#xff0c;所选商品将被放入他们的购物车&#xff0c;而…

Power BI 傻瓜入门 7. 清理、转换和加载数据

本章内容包括 根据异常、属性和数据质量问题确定清理需求解决数据类型、值、键、结构和查询之间的不一致在数据加载之前根据查询和命名约定对数据进行流化处理 要进行任何数据清理和转换&#xff0c;您的组织需要分析师、工程师和侦探。这里的想法是&#xff0c;在进入系统之…

严重内卷的电商直播还有机会吗?教你如何在电商直播中脱颖而出!

用行业内的一句话来讲&#xff1a;如今的电商直播带货&#xff0c;没有最卷只有更卷&#xff01; 过去&#xff0c;电商直播带货只是中规中矩的“叫卖式”直播。随着“全民直播带货”的潮流兴起&#xff0c;电商直播带货行业的竞争变得越来越激烈&#xff1a;同质化的内容不断…

ADC架构种类说明_笔记

ADC架构种类说明 FLASH_架构ADC 可达GHz级别Pipeline_ADC架构SAR ADC架构![在这里插入图片描述](https://img-blog.csdnimg.cn/d42b65568b6648ec92b04e7b6c53fa0d.png?x-oss-processimage/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Ieq5bCP5ZCD5aSa,size_20,col…

怎么下载微信视频号视频?

你是否曾经在浏览视频号时看到了一些精彩的视频号&#xff0c;希望能够保存下来&#xff0c;但却不知道如何下载&#xff1f;别担心&#xff01;本篇文章将为你介绍一个方便易用的视频号下载工具&#xff0c;让你轻松保存喜欢的视频号视频&#xff01;犀牛下载是一款专门为微信…

drf-分页,coreapi自动生成接口文档

目录 分页 视图类继承ListAPIView的分页具体使用方法 # 第一种PageNumberPagination页码分页 # 第二种LimitOffsetPagination偏移分页 # 第三种CursorPagination游标分页 视图类的使用 视图类继承APIView或GenericAPIView的分页使用 coreapi 如何写好接口文档 自动生…

众和策略可靠吗?A股构筑“市场底” 卫星互联网和5.5G逆势走强

可靠 周一A股三大指数低开低走&#xff0c;午后加快下探并创出今年以来新低&#xff0c;尾盘跌幅略有收窄。截至收盘&#xff0c;上证综指收于2939.29点&#xff0c;跌落1.47%&#xff1b;深证成指收于9425.98点&#xff0c;跌落1.51%&#xff1b;创业板指收于1864.91点&#…

AtCoder Beginner Contest 325 题解 A-E

目录 A - Takahashi sanB - World MeetingC - SensorsD - Printing MachineE - Our clients, please wait a moment A - Takahashi san 原题链接 题目描述 给你两个字符串&#xff0c;将第二个字符串改为san后与第一个字符串一起输出 public static void solve() throws IOExc…