随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

【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
		}()

	}

再次发送两次语音请求测试,抓包查看数据都显示正常,则该问题优化完毕。

 

posted on   EasyGBS  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示