浪潮平台具有政务、企业、行业信息化软件、终端产品和解决方案,由于浪潮平台支持国标GB28181协议,不少企业在选择浪潮平台时都需要通过国标GB28181协议与其他平台级联。
EasyNVR具备良好的开放性,并且支持二次开发,很多用户都会选择EasyNVR作为浪潮平台的下级平台。但是TSINGSEE青犀视频开发人员在将EasyNVR接入浪潮平台时,发现偶尔无法接入的问题。
我们详细看下图,最左边的图是EasyNVR使用GB28181协议接入浪潮上级平台的抓包图,从抓包可以看出实际是接入不进去的;右边两张图可以看出使用其他下级平台和海康摄像头接入浪潮上级平台,是可以接入的。
观察抓包图,对比最左的图和右边两张图,发现左图EasyNVR内少了@ip:端口。对此我们需要找到发送sip信息的地方进行修改。
修改如下:
func (c *Client) MakeRequest(method, to string, body string) (req *Request, err error) {
buf := bytes.NewBufferString("")
sip := c.Cascade.Serial + "@" + c.Cascade.Realm
buf.WriteString(fmt.Sprintf("%s sip:%s %s
", strings.ToUpper(method), sip, SIP_VERSION))
buf.WriteString(fmt.Sprintf("Via: %s/%s %s:%d;rport;branch=%s
", SIP_VERSION, strings.ToUpper(c.Cascade.CommandTransport), c.LocalHost, c.LocalPort, GenBranch()))
buf.WriteString(fmt.Sprintf("From: <sip:%s@%s>;tag=%s
", c.LocalSerial, c.Cascade.Realm, GenTag()))
buf.WriteString(fmt.Sprintf("To: <sip:%s>
", to))
buf.WriteString(fmt.Sprintf("Call-ID: %s
", GenCallID()))
c.cseq++
buf.WriteString(fmt.Sprintf("CSeq: %d %s
", c.cseq, strings.ToUpper(method)))
buf.WriteString(fmt.Sprintf("Max-Forwards: 70
"))
buf.WriteString(fmt.Sprintf("User-Agent: EasyGBS
"))
req, err = UnmarshalRequest(buf.String(), "")
if err != nil {
return
}
req.SetBody(body)
return
}
修改后重新抓包检查,返回200,则代表接入成功,至此该问题成功解决。
一般只要上级平台支持国标协议,都可与TSINGSEE青犀视频EasyNVR视频平台进行级联,我们之前就讲过EasyNVR级联EasyGBS的方式,大家可以了解一下:RTSP协议视频平台EasyNVR通过GB28181级联国标平台EasyGBS操作步骤介绍。
如果还想了解更多视频平台的级联或者操作的相关内容,可以关注我们的博客,如需直接测试,也可联系我们获取测试账号,我们欢迎大家的咨询了解。