大家知道EasyCVR是一个支持协议很宽泛的视频平台,因此兼容了很多协议的优点,比如支持云台控制设备,也支持通过不同协议的级联平台等。近期EasyCVR在测试中出现本地平台能云台控制下级设备,但是上级设备却无法控制下级设备的情况。
针对此情况,我们进行了抓包分析。
通过抓包分析,能够查看到上级发送的控制消息,到本级的时候是正常发送且正常响应的,但是通过本级转发给下级的时候,下级回复的400错误。
此时发现问题,由于EasyCVR级联的通道和下级设备的真实id不一样,所以在通过上级发送控制命令到下级的时候,需要在下级再次转换,添加如下代码:
gbDevID := gbsChns[0].DeviceID
sipDev := uas.Server.GetDevice(gbDevID)
if sipDev == nil {
log.Println("级联MakePTZControlRequest错误")
return
}
reqControl, _, err = uas.Server.MakeDragZoomInControlRequest(code, uas.Server.Realm, length, width, midPointX, midPointY, lengthX, lengthY)
if err != nil {
log.Println("级联MakeDragZoomInControlRequest错误", err)
return
}
err = reqControl.SendByTransport(sipDev.Transport)
if err != nil {
log.Println("级联发送MakePTZControlRequest错误", err)
return
}
再次通过上级发送控制消息,并抓包检查,发现信息已经能够正常发送。