JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制

接上一篇

使用Onvif协议最重要的应用就是对设备进行PTZ云台控制,PTZ控制包含转动、变焦等,这里我们主要讨论常用的转动和变焦(也就是放大缩小)

流程

要进行设备PTZ控制,我们首先需要获取到设备的Device Service Address和此设备的用户名密码

前两个流程和获取流地址一样

获取设备能力Capabilities

获取设备的能力,并且可以获取到Media和PTZ的URI,使用这两个URL可以进行流和PTZ操作,这里如果PTZ URI获取不到意味着这个设备无法支持PTZ控制

_tds__GetCapabilities* capabilities = soap_new__tds__GetCapabilities(proxyDevice, -1);

tt__CapabilityCategory* category = new tt__CapabilityCategory;

capabilities->Category = category;

*(capabilities->Category) = tt__CapabilityCategory__All;

_tds__GetCapabilitiesResponse* response = soap_new__tds__GetCapabilitiesResponse(proxyDevice, -1);

if (SOAP_OK == proxyDevice->GetCapabilities(capabilities, response))

{

if (response->Capabilities)

{

//Media URI: response->Capabilities->Media->XAddr;

//PTZ URI: response->Capabilities->PTZ->XAddr;

}

}

获取Media Profile

使用上一步获取到的Media URI获取设备的Media Profile

_trt__GetProfiles* getProfiles = soap_new__trt__GetProfiles(proxyMedia, -1);

_trt__GetProfilesResponse* response = soap_new__trt__GetProfilesResponse(proxyMedia, -1);

if (SOAP_OK == proxyMedia->GetProfiles(getProfiles, response))

{

int size = response->__sizeProfiles;

for (int i = 0; i < size; ++i)

{

if (response->Profiles[i])

{

//Media Profile Token: response->Profiles[i]->token;

//一般设备包含多个Profile Token,包含主码流、子码流、第三码流

}

}

}

PTZ控制

使用获取的Media URI和Media Profile Token进行PTZ控制

PTZ控制,这里只考虑ContinuousMove,需要在停止的时候发送停止命令

_tptz__ContinuousMove* continuousMove = soap_new__tptz__ContinuousMove(ptzProxy, -1);

_tptz__ContinuousMoveResponse* response = soap_new__tptz__ContinuousMoveResponse(ptzProxy, -1);

continuousMove->ProfileToken = const_cast(profile.c_str());

tt__PTZSpeed* velocity = soap_new_tt__PTZSpeed(ptzProxy, -1);

continuousMove->Velocity = velocity;

tt__Vector2D* panTilt = soap_new_tt__Vector2D(ptzProxy, -1);

continuousMove->Velocity->PanTilt = panTilt;

continuousMove->Velocity->PanTilt->space = "http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace";

tt__Vector1D* zoom = soap_new_tt__Vector1D(ptzProxy, -1);

continuousMove->Velocity->Zoom = zoom;

switch (command)

{

case LEFT:

continuousMove->Velocity->PanTilt->x = -((float)speed / 10);

continuousMove->Velocity->PanTilt->y = 0;

break;

case RIGHT:

continuousMove->Velocity->PanTilt->x = ((float)speed / 10);

continuousMove->Velocity->PanTilt->y = 0;

break;

case UP:

continuousMove->Velocity->PanTilt->x = 0;

continuousMove->Velocity->PanTilt->y = ((float)speed / 10);

break;

case DOWN:

continuousMove->Velocity->PanTilt->x = 0;

continuousMove->Velocity->PanTilt->y = -((float)speed / 10);

break;

case ZOOMIN:

continuousMove->Velocity->Zoom->x = ((float)speed / 10);

break;

case ZOOMOUT:

continuousMove->Velocity->Zoom->x = -((float)speed / 10);

break;

default:

break;

}

if (ptzProxy->ContinuousMove(continuousMove, response) == SOAP_OK)

//转动成功

停止PTZ控制

_tptz__Stop* stop = soap_new__tptz__Stop(ptzProxy, -1);

_tptz__StopResponse* response = soap_new__tptz__StopResponse(ptzProxy, -1);

stop->ProfileToken = const_cast(profile.c_str());

bool* pantilt = new bool;

stop->PanTilt = pantilt;

*(stop->PanTilt) = true;

bool* zoom = new bool;

stop->Zoom = zoom;

*(stop->Zoom) = true;

if (SOAP_OK == ptzProxy->Stop(stop, response))

//停止成功

获取更多信息

Copyright © EasyDarwin.org 2012-2017

0818b9ca8b590ca3270a3433284dd417.png

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

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

相关文章

DataWorks支持PyODPS类型任务

摘要&#xff1a; 昨天&#xff0c;DataWorks推出了PYODPS任务类型&#xff0c;集成了Maxcompute的Python SDK&#xff0c;可在DataWorks的PYODPS节点上直接编辑Python代码操作Maxcompute&#xff0c;也可以设置调度任务来处理数据&#xff0c;提高数据开发效率。昨天&#xff…

vue base64图片不显示_技巧 | word中插入的图片显示不完整怎么办?

已经好久没有更新了&#xff0c;都快忘记有这个公众号存在了~这几个月发生了很多事情&#xff0c;工作上的任务也迟迟没有减轻&#xff0c;之前保持的日记也已经很久没有写了。但是觉得要是没有什么用什么方式将脑袋中时不时飘过的念头记录下来的话&#xff0c;过段时间就会完全…

重磅 | 华为发布绝杀计算战略!投15亿美元打造开放生态,全球最快AI训练集群Atlas 900,绝了!...

戳蓝字“CSDN云计算”关注我们哦&#xff01; 文 | 阿晶、丹丹、王银发于上海华为HC大会现场出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 科技的不断发展正逐步加速智能世界的到来。一直&#xff0c;华为致力于提供经济且充裕的算力&#xff0c;力图像使…

90后实习生,是如何成长为阿里云分布式NoSQL领域专家

摘要&#xff1a; 我是亦征&#xff0c;本名王怀远&#xff0c;现在是阿里云存储服务团队的研发&#xff0c;正值五四青年节&#xff0c;受云栖社区邀请&#xff0c;来分享下自己的成长故事。从5年前第一次进入阿里云实习到如今&#xff0c;我一直都在表格存储TableStore团队&a…

AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)

摘要&#xff1a; 好吧&#xff0c;伙计们&#xff0c;我回来了。说我拖更不写文章的可以过来用你的小拳拳狠命地捶我胸口.... 那么今天我们来讲关于使用pythonopencvface来实现人脸验证及人脸解锁。代码量同样不多&#xff0c;你可以将这些代码运用在其它一些智能领域&#xf…

zTree笔记,设置无法勾选父节点(禁用父节点)和父节点禁用时回显选中子节点时关联父节点状态

名称链接zTree APIhttp://www.treejs.cn/v3/api.phpzTree Demohttp://www.treejs.cn/v3/demo.php#_101 最近又用到了zTree&#xff0c;虽然zTree的APi已经很全很方便很易懂了&#xff0c;但是难免有的方法找不到。为了方便他人方便自己&#xff0c;做下笔记记录下 zTree笔记1 …

你需要知道的那些 redis 数据结构(前篇)

戳蓝字“CSDN云计算”关注我们哦&#xff01; 作者 | 饿了么物流技术团队来源 | CSDN 企业博客redis 对于团队中的同学们来说是非常熟悉的存在了&#xff0c;我们常用它来做缓存、或是实现分布式锁等等。对于其 api 中提供的几种数据结构&#xff0c;大家也使用得得心应手。api…

对数周期天线hfss建模_HFSS也有金手指,FADDM招式详解

FADDM(Finite Array Domain Decomposition Method)即有限大阵区域分解法是HFSS针对周期阵列天线的一种高效仿真方法,这种方法不仅能提升天线阵列建模和求解的效率&#xff0c;还能保证仿真结果的精准度。FADDM的优势同样的硬件可求解更大规模的阵列与在HFSS全模型求解具有同样精…

Tensorflow快餐教程(7) - 梯度下降

摘要&#xff1a; 梯度下降梯度下降学习完基础知识和矩阵运算之后&#xff0c;我们再回头看下第一节讲的线性回归的代码&#xff1a;import tensorflow as tf import numpy as nptrX np.linspace(-1, 1, 101) trY 2 * trX np.random.randn(*trX.shape) * 0.33 # 创建一些线性…

腾讯物联网操作系统正式开源,最小体积仅1.8 KB

9月18日&#xff0c;腾讯宣布将开源自主研发的轻量级物联网实时操作系统TencentOS tiny。相比市场上其它系统&#xff0c;腾讯TencentOS tiny在资源占用、设备成本、功耗管理以及安全稳定等层面极具竞争力。该系统的开源可大幅降低物联网应用开发成本&#xff0c;提升开发效率&…

云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍

摘要&#xff1a; 本文带大家简单理解阿里巴巴Java开发手册中的规约内容以及P3C项目&#xff0c;可以帮助开发者扫描出所有潜在的代码隐患。在中间也聊了一些对于不同语言设计的理解&#xff0c;如何去看待语言的设计&#xff0c;其实是我们去学习一个语言的核心。演讲嘉宾简介…

你的数据安全么?Hadoop再曝安全漏洞| 黑客利用Hadoop Yarn资源管理系统未授权访问漏洞进行攻击

摘要&#xff1a; 4月30日&#xff0c;阿里云发现&#xff0c;俄罗斯黑客利用Hadoop Yarn资源管理系统REST API未授权访问漏洞进行攻击。 Hadoop是一款由Apache基金会推出的分布式系统框架&#xff0c;它通过著名的 MapReduce 算法进行分布式处理&#xff0c;Yarn是Hadoop集群的…

博文强识|进阶企业大咖

出品 | CSDN云计算 每个周三周五&#xff0c;和小编共同分享优秀博文&#xff0c;一起遨游在知识的海洋。 你需要知道的那些 redis 数据结构&#xff08;前篇&#xff09; redis 对于团队中的同学们来说是非常熟悉的存在了&#xff0c;我们常用它来做缓存、或是实现分布式锁等…

php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

本文主要和大家分享微信小程序模拟下拉菜单开发实例&#xff0c;希望能帮助到大家。一.知识点1.实现动态显示和隐藏某个控件列表1data:{open:false},showitem:function(){this.setData({open:!this.data.open})},.display_show{display: block;}.display_none{display: none;}2…

算法导论 pdf_学习数据结构和算法最好的书是什么?

-----------通知&#xff1a;如果本站对你学习算法有帮助&#xff0c;请收藏网址&#xff0c;并推荐给你的朋友。由于 labuladong 的算法套路太火&#xff0c;很多人直接拿我的 GitHub 文章去开付费专栏&#xff0c;价格还不便宜。我这免费写给你看&#xff0c;多宣传原创作者是…

Tensorflow快餐教程(8) - 深度学习简史

摘要&#xff1a; 深度学习简史深度学习简史从机器学习流派说起如果要给机器学习划分流派的话&#xff0c;初步划分可以分为『归纳学习』和『统计学习』两大类。所谓『归纳学习』&#xff0c;就跟我们平时学习所用的归纳法差不多&#xff0c;也叫『从样例中学习』。归纳学习又分…

usb设备驱动程序(一)

代码&#xff1a; #include <linux/atomic.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/usb.h> #include <linux/videodev2.h> #include <linux…

Tensorflow快餐教程(9) - 卷积

摘要&#xff1a; 卷积的计算方法卷积卷积就是滑动中提取特征的过程在数学中&#xff0c;卷积convolution是一种函数的定义。它是通过两个函数f和g生成第三个函数的一种数学算子&#xff0c;表征函数f与g经过翻转和平移的重叠部分的面积。其定义为&#xff1a;h(x)f(x)∗g(x)∫…

商家笑了 设计师哭了,京东+英特尔的AI这招太绝

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;在如今“无促销不电商”的大环境熏陶下&#xff0c;商家需要榨干了脑浆想尽各种奇招&#xff0c;玩法虽多&#xff0c;但万变不离其宗。面对上万、甚至…

明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...

类型别名(type alias)一个名字&#xff0c;是某种类型的同义词。使用类型名有很多好处&#xff0c;能让复杂的类型名字变得简单明了&#xff0c;易于理解和使用。有两种方法可用于定义类型别名。传统的方法是使用关键字typedef :typedef double wages; //wages是double的同义词…