【BUG修复】国标GB28181协议视频智能分析平台国标平台EasyGBS接入设备后重复发送语音对讲消息无响应问题分析
在早前的版本更新中,EasyGBS已经支持了语音对讲的功能,不管是发送一段语音,还是实时进行语音讲话,EasyGBS都能很好的运行。
但是近期发现通过EasyGBS和设备在进行语音对讲过程中,第一次对讲可以正常进行,再次发送对讲消息的时候设备则没有响应了。进过抓包分析对讲流程发现,第二次对讲之后,设备不会回复对讲消息,需等设备回复关闭对讲通道后,才能够再次发送对讲消息。
因此此处为了加强语音体验的使用感,我们需要对代码进行修改,当和通道建立一次连接过后,超时十秒没收到语音消息,才会再次向设备发送语音喊话请求
if !Server.Talk {
sipDev := Server.GetDevice(deviceId)
if sipDev == nil {
err = fmt.Errorf("[talk] device[%s] not found", deviceId)
return
}
reqBroadcast, _, err := Server.MakeTalkRequest(deviceId, Server.Realm, channelId)
err = reqBroadcast.SendByTransport(sipDev.Transport)
if err != nil {
return err
}
_, err = Server.WaitAck(reqBroadcast.HeaderMap["Call-ID"], reqBroadcast.HeaderMap["CSeq"])
if err != nil {
return err
}
go func() {
key := fmt.Sprintf(`%s:`, deviceId)
var talkChan = make(chan string)
Server.TalkChanDataLock.RLock()
Server.TalkChanData[key] = talkChan
Server.TalkChanDataLock.RUnlock()
Server.TalkChanData[key] <- talkData
return
}()
}
再次发送两次语音请求测试,抓包查看数据都显示正常,则该问题优化完毕。