通过Onvif协议停止调用云台接口为pending状态该如何处理
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,通过Onvif协议停止调用云台接口为pending状态该如何处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在摄像头设备支持云台的
千家信息网最后更新 2026年11月01日通过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安全错误
数据库的锁怎样保障安全
咖啡网
互联网核心科技是什么
互联网科技的发展
互联网 的科技创新
互联网科技公司官网
掌上梦互联网科技
四川狮子座互联网科技
老年人脱离互联网科技的作文
互联网科技实习生岗位职责
顶级互联网科技成果有哪些
金融科技与互联网金融相同和不同
河南猎农互联网科技有限公司
南平创想时代互联网科技有限公司
华夏互联网科技业
东莞新华互联网科技学校
互联网公司高科技产品
上海钢联属于互联网科技股吗
厦门江牛科技互联网
世界互联网科技成果奖
互联网科技博主张洲
互联网是第几次科技革命的成果
科技互联网企业
云信互联网科技有限公司
智慧科技互联网
善班互联网科技有限公司
深圳互联网科技怎么样
崇明区互联网教育科技售后服务
华中科技大学互联网的牛人
互联网科技年终奖
恒生科技指数 中概互联网