通过Onvif协议停止调用云台接口为pending状态该如何处理
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,通过Onvif协议停止调用云台接口为pending状态该如何处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在摄像头设备支持云台的
千家信息网最后更新 2025年12月02日通过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安全错误
数据库的锁怎样保障安全
ajax提交+数据库
网络安全和电商哪个好
软件开发技术简历
昆山订货软件开发
外部访问服务器
楚雄网络安全执法
间谍软件开发iOS
汉中新华互联网科技学校
网络安全法规定 发生风险
海西州网络技术发展
国家三级网络技术官网
网络安全信息 研讨
E4108网络安全
软件开发行业的就业方向
家庭网络安全教育直播
摩尔庄园所有服务器是互通的吗
网络安全什么时候起
软件开发高职学校南宁
软件开发模式简介
关于网络安全的小技巧
2020护苗网络安全课堂
网络安全讲座观后感800字
南京中国移动软件开发
dns服务器是单独用一台电脑吗
莱西专业软件开发公司
信息与网络安全协议
山西通讯软件开发创意
收服务器李
从事网络安全的职业不能出国吗
计算机科学 网络技术