通过Onvif协议停止调用云台接口为pending状态该如何处理
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,通过Onvif协议停止调用云台接口为pending状态该如何处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在摄像头设备支持云台的
千家信息网最后更新 2025年01月27日通过Onvif协议停止调用云台接口为pending状态该如何处理
通过Onvif协议停止调用云台接口为pending状态该如何处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
在摄像头设备支持云台的情况下,视频结构化安防智能平台EasyNVR是支持通过onvif协议来调用摄像头的云台控制,但是在调用过程中,如果用户名和密码错误,调用停止云台控制接口会一直处于pending状态。
通过浏览器调试界面可以看到该接口的pending状态,一直没有返回内容。
分析后端接口,发现具体到StopPTZ方法里面逻辑有问题,目前采用的逻辑如下:
func StopPTZ(host, username, password, deviceUrl string) (err error) { if dll == nil { err = fmt.Errorf("onvif dll not init") return } ptz := fmt.Sprintf("stop ptz host[%s] username[%s] password[%s] deviceUrl[%s]", host, username, password, deviceUrl) global.OperationLogger.Info(ptz) _host := uintptr(unsafe.Pointer(syscall.StringBytePtr(host))) _username := uintptr(unsafe.Pointer(syscall.StringBytePtr(username))) _password := uintptr(unsafe.Pointer(syscall.StringBytePtr(password))) _deviceUrl := uintptr(unsafe.Pointer(syscall.StringBytePtr(deviceUrl))) i := 1 for i <= 500 { r1, _, _ := procStopPtz.Call(_host, _username, _password, _deviceUrl) if r1 == 0 { break } if i == 500 { log.Printf("EasyOnvifClient_StopPtz failed, ret[%d], retryed 5s", r1) err = fmt.Errorf("EasyOnvifClient_StopPtz failed, ret[%d]", r1) } time.Sleep(10 * time.Millisecond) } return}
我们将其中的i := 1逻辑进行修改,且time.Sleep处为1而非为10,即可解决问题。修改后的逻辑代码参考如下:
func StopPTZ(host, username, password, deviceUrl string) (err error) { if dll == nil { err = fmt.Errorf("onvif dll not init") return } ptz := fmt.Sprintf("stop ptz host[%s] username[%s] password[%s] deviceUrl[%s]", host, username, password, deviceUrl) global.OperationLogger.Info(ptz) _host := uintptr(unsafe.Pointer(syscall.StringBytePtr(host))) _username := uintptr(unsafe.Pointer(syscall.StringBytePtr(username))) _password := uintptr(unsafe.Pointer(syscall.StringBytePtr(password))) _deviceUrl := uintptr(unsafe.Pointer(syscall.StringBytePtr(deviceUrl))) for i := 0; i <= 500; i += 100 { r1, _, _ := procStopPtz.Call(_host, _username, _password, _deviceUrl) if r1 == 0 { return } if i == 500 { log.Printf("EasyOnvifClient_StopPtz failed, ret[%d], retryed 5s", r1) err = fmt.Errorf("EasyOnvifClient_StopPtz failed, ret[%d], timeout 5s", r1) } time.Sleep(1 * time.Millisecond) } return}
重新运行并调用接口检查,可以看到以上的报错内容消失,问题已解决:
func StopPTZ(host, username, password, deviceUrl string) (err error) { if dll == nil { err = fmt.Errorf("onvif dll not init") return } ptz := fmt.Sprintf("stop ptz host[%s] username[%s] password[%s] deviceUrl[%s]", host, username, password, deviceUrl) global.OperationLogger.Info(ptz) _host := uintptr(unsafe.Pointer(syscall.StringBytePtr(host))) _username := uintptr(unsafe.Pointer(syscall.StringBytePtr(username))) _password := uintptr(unsafe.Pointer(syscall.StringBytePtr(password))) _deviceUrl := uintptr(unsafe.Pointer(syscall.StringBytePtr(deviceUrl))) for i := 0; i <= 500; i += 100 { r1, _, _ := procStopPtz.Call(_host, _username, _password, _deviceUrl) if r1 == 0 { return } if i == 500 { log.Printf("EasyOnvifClient_StopPtz failed, ret[%d], retryed 5s", r1) err = fmt.Errorf("EasyOnvifClient_StopPtz failed, ret[%d], timeout 5s", r1) } time.Sleep(1 * time.Millisecond) } return}
重新运行并调用接口检查,可以看到以上的报错内容消失,问题已解决:
关于通过Onvif协议停止调用云台接口为pending状态该如何处理问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
问题
接口
云台
状态
内容
逻辑
摄像头
方法
更多
分析
帮助
控制
摄像
支持
检查
解答
运行
易行
简单易行
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
steam好友服务器什么意思
网络安全技术与实训试题及答案
信息安全与网络安全大学前8所
赣州兆鑫软件开发
三菱plc连接sql数据库
通信企业网络安全事故案例
数据库连接几个表
数据库触发器的概述
数据库乘方用什么表达
软件开发在线观看视频缓存
网络安全的释义
战地连不上ea服务器
服务器查看所有管理员用户
安装2008数据库提示引用语句
磁盘阵列的网络安全
水文监测数据库
vfp数据库设计器
工信部巡查网络安全事件
做一个家庭网络安全检测工作
梦幻2008服务器进不去
steam连不上服务器怎么解决
怎么入侵qq群数据库
mysql数据库查看器
鄂尔多斯市云计算网络安全培训
网络安全设计与集成要求
hybbs数据库
软件测试占软件开发的多少
怎么寻找软件开发的活
专业做app软件开发团队
分布式系统 数据库