前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyGBS平台语音级联出现卡住假死的状态,该如何解决?

EasyGBS平台语音级联出现卡住假死的状态,该如何解决?

原创
作者头像
TSINGSEE青犀视频
发布2022-09-23 09:29:29
3000
发布2022-09-23 09:29:29
举报
文章被收录于专栏:TSINGSEE青犀视频

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。

在级联功能上,EasyGBS可通过国标GB28181协议向上级平台级联,也能支持第三方平台通过国标GB28181协议级联到EasyGBS,实现数据的互通共享,并且也能支持语音级联功能。

今天和大家分享一下我们在开发语音级联时遇到的问题以及解决办法。

在开发EasyGBS级联语音时,EasyGBS配置完上级平台的信息,选择支持语音的通道注册到上级,在上级平台播放级联上来的通道,使用https访问并进行对讲,当第一次语音对讲时,设备不出声,并一直处于卡住假死的状态:

于是进行抓包分析:

发现语音通知命令<CmdType>Broadcast</CmdType>\n和设备初始化注册命令CSeq: 15 INVITE都正常,包括上级平台的语音都已经成功发送到下级平台,所以,可以判断是下级平台在向设备发送语音时,出现了问题。

代码语言:javascript
复制
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,所以,在之后即使赋值过后,这边也不会取到了。

可参照如下代码进行优化:

添加如下代码:

代码语言:javascript
复制
audioOnOffChan := Server.UacAudioOnOff[key]

	if audioOnOffChan == nil {

		audioOnOffChan = make(chan bool)

		Server.UacAudioLock.RLock()

		Server.UacAudioOnOff[key] = audioOnOffChan

		Server.UacAudioLock.RUnlock()

	}

在取值之前进行一次值判断即可。

修改后再次抓包,语音级联已经一切正常了。

EasyGBS平台部署轻快、可拓展性强,支持将接入的视频流进行全终端、全平台分发,凭借优秀的视频资源接入与处理能力,EasyGBS已经在很多项目场景中落地应用,如明厨亮灶、智慧工地、雪亮工程、平安乡村等等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档