网络摄像头国标GB28181流媒体协议视频平台EasyGBS级联后语音对讲卡死的解决方案

最近有很多用户对EasyGBS视频平台的级联很感兴趣,我也接到了不少用户的咨询。但是在语音这一块,似乎还有点问题需要我们处理,比如上一篇解决了EasyGBS级联后语音重复的问题,处理完该问题后,继续测试的时候又出现了问题——语音对讲卡死,所以本文也来讲下该问题的排查过程。

EasyGBS架构2.5D.png

我们将EasyGBS的上级平台配置好,并且在上级平台配置信息里选择支持语音的通道注册到上级,

67.png

然后上级平台播放级联上来的通道,https访问进行对讲,

68.png

但是此时第一次讲话,设备不会出声,一直处于卡死的状态。我们再来通过抓包分析一下。

69.png

抓包可以发现语音通知命令
Broadcast\n和设备初始化注册命令CSeq: 15 INVITE都是正常的,包括上级的语音都已经发送到下级来了,所以应该是下级在朝着设备发送语音的时候出现了问题。

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,所以之后即使赋值过后这边也不会取到了。

针对此问题我们对代码进行了改善如下

audioOnOffChan := Server.UacAudioOnOff[key]
	if audioOnOffChan == nil {
		audioOnOffChan = make(chan bool)
		Server.UacAudioLock.RLock()
		Server.UacAudioOnOff[key] = audioOnOffChan
		Server.UacAudioLock.RUnlock()
	}

在取值之前进行一次值判断,修改之后再次抓包则一切正常。

70.png

随后再次启动语音对讲,则没有问题了。如果大家仍然对我们EasyGBS级联比较感兴趣,可以看一下本文:EasyGBS如何实现视频流的向上级联?视频相关解决方案均可访问TSINGSEE青犀视频,可以联系我们获取演示方案,直观感受,也可随意进行下载及测试,如有疑问,欢迎随时咨询我们。

EasyDarwin开源流媒体服务器,是由国内开源流媒体团队TSINGSEE青犀视频开发和维护的一款开源流媒体平台框架。从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值