通过Onvif协议停止调用云台接口为pending状态该如何处理
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,通过Onvif协议停止调用云台接口为pending状态该如何处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在摄像头设备支持云台的
千家信息网最后更新 2024年11月17日通过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安全错误
数据库的锁怎样保障安全
唐山网络技术操作
ama期刊全文数据库
华讯应届毕业生软件开发月薪
连接数据库失败 请检查
网络安全厂家售后必备技能
服务器的防护涉及到哪些防护
河北项目软件开发需要多少钱
中公网络安全
用代码数据库中所有员工信息
深圳远程医疗健康软件开发
网络技术学会了什么
数据库数据迁移和同步差异
腾讯网络安全人才
数据库资源来自于哪
戴尔服务器u盘启动快捷键按f几
正在检索权限管理服务器
戴尔刀片服务器插上就死机
服务器安全管理中
内江会展中心网络安全展会
access数据库输出表格
软件开发项目台账模板
医院办公网络安全
数据库课后思考题答案
a5m2数据库管理系统
网络安全管理一体机价格
惠普服务器 网络管理
索沛cs服务器
网络安全防泄密体系
网络数据库技术分析
js连数据库