Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)
Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)
文章目录
- Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)
- 1、PTZ简单再介绍
- 2、代码
- 3、结果
1、PTZ简单再介绍
之前学习Onvif协议的时候我们已经对PTZ有了基本的了解,这里当我们实现PTZ控制的时候再简单做一下介绍说明,主要针对我们这里实现的PTZ的说明。
PTZ:Pan/Tilt/Zoom,对于枪机的话基本就是固定一个位置或者水平移动,但是球机除了水平移动外,还可以旋转(没有跳跃),此外摄像头还有变焦的功能,目前我们暂时只实现简单的水平移动和旋转,变焦的接口等有需要也可以类似封装。而移动一般包含绝对移动、相对移动和连续移动三种方式,我们暂时使用连续移动,通过移动后调用停止也可以模拟其它两种移动的效果。
连续移动
就设置移动或变焦的速度
即可。就2d移动坐标来说:以原点坐标(x=0,y=0)
进行相对移动控制,那么上(x=0,y=正的相对位置)
、下(x=0,y=负的相对位置)
、左(x=负的相对位置,y=0)
、右(x=正的相对位置,y=0)
、左上(x=负的相对位置,y=正的相对位置)
、左下(x=负的相对位置,y=负的相对位置)
、右上(x=正的相对位置,y=正的相对位置)
、右下(x=正的相对位置,y=负的相对位置)
;
2、代码
/*** @Description: 摄像头云台控制,包括模式设置和移动方向控制* @time: 2021-03-30 11:14:14* @receiver client:onvif客户端* @param direction:云台移动方向,通过PTZDirection接口传入封装后的方向值进行方向传递* @param moveMode:云台移动模式,通过MoveMode接口传入封装后的模式值进行模式控制* @return returnInfo:结果Code码和Info信息,Code码为0则成功,否则失败,通过获取Info查看失败原因*/
func (client *GoOnvifClient) PTZControl(direction PTZDirection, moveMode moveMode) returnInfo {if client.localSelectProfileToken == "" {return returnInfo{PTZErr, "profile token is nil."}}if moveMode == CONTINUOUS || moveMode == DISCONTINUOUS {client.ptzMoveMode = moveMode} else {client.ptzMoveMode = DISCONTINUOUS}switch direction {case UP, DOWN, LEFT, RIGHT, UP_LEFT, DOWN_LEFT, UP_RIGHT, DOWN_RIGHT, STOP:client.direction = directionres := client.ptzControl()if res.Code != 0 {return res}if moveMode == DISCONTINUOUS {time.Sleep(1 * time.Second)res = client.ptzStop()if res.Code != 0 {return res}}default:return returnInfo{PTZErr, "direction err."}}return returnInfo{OK, "ptz control success!"}
}/*** @Description: 根据输入的Profile token和PTZ速度、方向进行PTZ控制* @time: 2021-03-25 14:31:55* @receiver client* @return returnInfo*/
func (client *GoOnvifClient) ptzControl() returnInfo {ptzContinuousMoveReq := ptz.ContinuousMove{ProfileToken: onvif.ReferenceToken(client.localSelectProfileToken),Velocity: onvif.PTZSpeed{PanTilt: onvif.Vector2D{X: 0,Y: 0,},},}switch client.direction {case UP:ptzContinuousMoveReq.Velocity.PanTilt.Y = client.ptzSpeedcase DOWN:ptzContinuousMoveReq.Velocity.PanTilt.Y = -client.ptzSpeedcase LEFT:ptzContinuousMoveReq.Velocity.PanTilt.X = -client.ptzSpeedcase RIGHT:ptzContinuousMoveReq.Velocity.PanTilt.X = client.ptzSpeedcase UP_LEFT:ptzContinuousMoveReq.Velocity.PanTilt.X = -client.ptzSpeedptzContinuousMoveReq.Velocity.PanTilt.Y = client.ptzSpeedcase DOWN_LEFT:ptzContinuousMoveReq.Velocity.PanTilt.X = -client.ptzSpeedptzContinuousMoveReq.Velocity.PanTilt.Y = -client.ptzSpeedcase UP_RIGHT:ptzContinuousMoveReq.Velocity.PanTilt.X = client.ptzSpeedptzContinuousMoveReq.Velocity.PanTilt.Y = client.ptzSpeedcase DOWN_RIGHT:ptzContinuousMoveReq.Velocity.PanTilt.X = client.ptzSpeedptzContinuousMoveReq.Velocity.PanTilt.Y = -client.ptzSpeedcase STOP:return client.ptzStop()default:return returnInfo{PTZErr, "Unknown ptz direction."}}return client.sendReqGetResp(PTZErr, ptzContinuousMoveReq)
}/*** @Description: 根据输入的Profile token设置PTZ停止* @time: 2021-03-25 14:29:43* @receiver client* @return returnInfo*/
func (client *GoOnvifClient) ptzStop() returnInfo {stopReq := ptz.Stop{ProfileToken: onvif.ReferenceToken(client.localSelectProfileToken),}return client.sendReqGetResp(PTZErr, stopReq)
}
调用,我们可以选择在循环中调用,也可以做一个web服务,从web界面上获取控制参数:
//设置速度后循环进行ptz控制,初始化时设置了默认速度0.2
PTZ:for {//断续模式移动一次1s后会调用停止进行停止,连续模式则会绕着指定的方向一直移动fmt.Println("选择控制模式,1:连续移动,0:断续移动,2:退出PTZ")moveMode := uint(0)fmt.Scanln(&moveMode)switch moveMode {case 2:break PTZdefault:}direction := uint(0)fmt.Println("输入PTZ:1:上;2:下;3:左;4:右;5:左上;6:左下;7:右上;8:右下;9:停")fmt.Scanln(&direction)switch direction {case 1, 2, 3, 4, 5, 6, 7, 8, 9:res = client.PTZControl(client.PTZDirection(direction), client.MoveMode(moveMode))if res.Code != 0 {fmt.Println(res.Info)return}default:continue}}
3、结果
Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)相关推荐
- Go语言实现Onvif客户端:9、预置点删改查及跳转
Go语言实现Onvif客户端:9.预置点删改查及跳转 文章目录 Go语言实现Onvif客户端:9.预置点删改查及跳转 1.前言 2.代码 3.结果 1.前言 我们可以根据摄像头的所拍的位置设置预置点. ...
- Onvif/RTSP摄像头直播中云台控制
LiveNVR支持预置位控制,包括转到指定预置位,设置指定预置位,删除指定预置位 预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便 之前我们说过如何用Onvif协议进行设备的发现, ...
- SkeyeVSS国标视频汇聚云服务使用Onvif、GB28181协议对监控摄像机设备进行PTZ云台控制
SkeyeVSS平台可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚.整合.集中管理,实现视频资源的鉴权管理.按需调阅.全网分发.智能分析等.平台可支持多协议.多类型设备接入,包括国标GB281 ...
- Onvif协议:IPC客户端开发之PTZ控制
介绍 在安防摄像头中,不仅仅涉及到固定摄像头的枪击,同样还包含可以360°转动的球机.因此对球机的云台方向控制是Onvif协议开发过程中必不可少的过程 球机的云台控制主要包含:八个方向(上.下.左.右 ...
- ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
概要: 目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为开发者的你还在犹豫是否了解下吗?本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流 ...
- 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 目前ONVIF协议家族设备已占据数字监控行业 ...
- ONVIF协议开发之网络摄像头云台控制(C版)
在之前的文章中(<python-onvif实现客户端控制相机云台>),介绍过用python实现基于onvif协议的相机云台控制,考虑到嵌入式端的执行效率问题,还是需要实现C/C++版本的接 ...
- onvif学习笔记8:最近写的一个ONVIF客户端的心得小结
最近,利用业余时间编写一个简单的ONVIF客户端MFC程序,这里记录一下过程. 语言选择 在之前调查过,有用QT实现的,有用python实现的,虽然正在学python,无奈才看了3天的书,没自信去搞. ...
- Onvif协议学习:14、球机云台控制PTZ
Onvif协议学习:14.球机云台控制PTZ 文章目录 Onvif协议学习:14.球机云台控制PTZ 一.介绍 二.代码实现 八个方向.放下及缩小控制 聚焦控制 原文链接:https://blog.c ...
最新文章
- SUST_ACM_2019届暑期ACM集训热身赛题解
- leetcode算法题--二维区域和检索 - 矩阵不可变
- python创建项目包
- win10系统下安装mysql
- v4l2视频采集摄像头
- 中国版MSN慈善缘何遇冷:白领网民参与只为时尚(转自--竞报)
- 算法题10 最长等差序列问题
- STM8 ADC转换模式-------单次模式
- 2021 前端面试经常被问到 Javascript+HTML5+CSS+ 框架问题(89 篇资料总结)
- OpenCV-闭运算(CLOSE)
- 自治系统间的路由协议--BGP详细介绍
- Linux查找启动的隐藏服务,Linux服务器入侵检测排查方法
- Mac用bootcamp安装Windows 11双系统
- SLG手游策略游戏-分析思维
- manjaro install ftp server
- 2.1 被隐藏了的过程
- RS485通信----基本原理+电路图
- 计算机手动配置信息,手动修改并设置电脑开机画面入您所愿
- 抖音不搞「盲目」社交
- el-table设置表头样式