视频监控平台EasyCVR通过Onvif无法探测对应设备如何处理

文章讲述了EasyCVR安防系统如何支持Onvif协议,包括其在局域网内的应用与遇到的问题。重点介绍了通过抓包调试发现GetStreamUrl中的ProfileToken参数不匹配导致的流地址获取失败,以及提供的解决方案。

从研发初期开始,EasyCVR安防协议视频综合管理系统就被设计为一个“全能型”平台,支持各种私有协议接入,并且还提供了onvif探测功能。使用Onvif协议的优势在于,终端用户和集成商可以使用不同制造商的技术和解决方案。该协议的支持大大拓展了EasyCVR的适用范围,使其更具广泛性。

在局域网内使用EasyCVR时,可以利用Onvif探测的方式轻松发现可用的摄像头并直接获取流地址,操作简单便捷。然而,在某些特定场景中,可能会遇到无法成功探测或获取流地址的情况,但使用Onvif设备管理器却能够发现设备。

通过抓包调试定位问题,发现在GetStreamUrl中的参数与EasyCVR中的内容存在差异。在GetStreamUrl中,参数为Profile Token=Profile_1,并且成功获取到地址时传递此参数。而在EasyCVR中传输的参数为Profile Token=Profile_101,当返回101时表示获取地址失败,因此无法进行Onvif探测。 

上图为onvif device manager的抓包结果。要解决此问题,我们只需在EasyCVR中将101字段改为1即可正常获取流地址。参考代码如下:

fmt.Println("call GetStreamUri")
	m_media_url_req := media.GetStreamUri{
		XMLName:"http://www.onvif.org/ver10/media/wsdl",
		StreamSetup:onvif2.StreamSetup{
			Stream:    "RTP-Unicast",
			Transport: onvif2.Transport{
				Protocol: "RTSP",
				Tunnel:   nil,
			},
		},
		ProfileToken: "Profile_1",
	}
	{
		m_media_url_resp, err := dev.CallMethod(m_media_url_req)
		if err == nil {
			//fmt.Println("resp:", readResponse(m_media_url_resp))
			bs, _ := ioutil.ReadAll(m_media_url_resp.Body)
			log.Printf("output %+v %s", m_media_url_resp.StatusCode, bs)
 
			//{
			//	var methodStruct interface{}
			//	methodStruct,e :=getMediaStructByName("GetProfiles")
			//	if e == nil{
			//		str := string(bs)
			//		resp, err := xmlAnalize(methodStruct, &str)
			//		if err != nil {
			//			return
			//		}
			//
			//		log.Println(resp)
			//	}
			//}
		}
	}

目前在TSINGSEE青犀视频开发的多个视频平台项目当中,EasyNVR和EasyCVR在支持RTSP协议的同时已经支持了Onvif探测,支持通过Onvif控制摄像头云台,该功能可以在测试中使用,欢迎大家测试。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值