网络摄像头国标GB28181流媒体协议视频平台EasyGBS级联后语音对讲卡死的解决方案
最近有很多用户对EasyGBS视频平台的级联很感兴趣,我也接到了不少用户的咨询。但是在语音这一块,似乎还有点问题需要我们处理,比如上一篇解决了EasyGBS级联后语音重复的问题,处理完该问题后,继续测试的时候又出现了问题——语音对讲卡死,所以本文也来讲下该问题的排查过程。
我们将EasyGBS的上级平台配置好,并且在上级平台配置信息里选择支持语音的通道注册到上级,
然后上级平台播放级联上来的通道,https访问进行对讲,
但是此时第一次讲话,设备不会出声,一直处于卡死的状态。我们再来通过抓包分析一下。
抓包可以发现语音通知命令
Broadcast\n和设备初始化注册命令CSeq: 15 INVITE都是正常的,包括上级的语音都已经发送到下级来了,所以应该是下级在朝着设备发送语音的时候出现了问题。
1 2 3 4 5 6 7 8 | for { select { //等待级联的udp链接建立完成 case audioOnOff := <-Server.UacAudioOnOff[key]: dataConn := Server.UacAudioUdpConn[key] if dataConn != nil { Server.UacAudioUdpConn[key] = nil bufUDP := make([] byte , 102400) |
由于是先取值再赋值,取值的时候还没有赋值,所以虽然这个UacAudioOnOff是通道,但是因为取值的时候是nil,所以之后即使赋值过后这边也不会取到了。
针对此问题我们对代码进行了改善如下
1 2 3 4 5 6 7 | audioOnOffChan := Server.UacAudioOnOff[key] if audioOnOffChan == nil { audioOnOffChan = make(chan bool ) Server.UacAudioLock.RLock() Server.UacAudioOnOff[key] = audioOnOffChan Server.UacAudioLock.RUnlock() } |
在取值之前进行一次值判断,修改之后再次抓包则一切正常。
随后再次启动语音对讲,则没有问题了。如果大家仍然对我们EasyGBS级联比较感兴趣,可以看一下本文:EasyGBS如何实现视频流的向上级联?视频相关解决方案均可访问TSINGSEE青犀视频,可以联系我们获取演示方案,直观感受,也可随意进行下载及测试,如有疑问,欢迎随时咨询我们。
EasyDarwin开源流媒体服务器,是由国内开源流媒体团队TSINGSEE青犀视频开发和维护的一款开源流媒体平台框架。从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结