国标GB28181协议EasyGBS平台出现语音播报重复现象,该如何解决?
国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。
有用户反馈,在EasyGBS平台中出现了语音播报错误的情况。除了第一次正常播报以外,后续的语音都是重复播报。收到用户反馈后,技术人员立即开展排查与解决,以下为解决步骤:
1)首先通过抓包分析,发现第一次发送时,上下级平台的音频一致,但是第二次上级平台发送的是新采集的音频,下级平台向设备发送的却是上次的音频;
2)随后排查代码发现,因为每次建立的udp链接读取过后,都放在了一个缓存的buf数组里,并且udp的监听链接也没有关闭,所以会导致数据错乱,出现发送上图数据的情况;
3)只需要添加以下代码:
Server.UacAudioUdpConn[key] = nil
并在每次获取到udp链接时,将本次使用的链接置空;
case audioOnOff := <-Server.UacAudioOnOff[key]:
if dataConn != nil {
Server.UacAudioUdpConn[key] = nil
bufUDP := make([]byte, 102400)
//err := dataConn.SetReadDeadline(time.Now().Add(time.Second * 5))
//if err != nil {
// Server.UacAudioUdpConn[key].Close()
// log.Println("超时处理")
// return
//}
time.Sleep(time.Second * 1)
for audioOnOff {
n, _, err := dataConn.ReadFromUDP(bufUDP)
if err != nil {
//Server.UacAudioUdpConn[key].Close()
log.Printf("udp read error, %v", err)
continue
}
rtpBuf := make([]byte, n)
copy(rtpBuf, bufUDP[:n])
tempint, err := transportMS.UDPConn.Write(rtpBuf)
if err != nil {
log.Printf("发送rtperr : %s ,tempint :%d", err, tempint)
return
}
time.Sleep(80 * time.Millisecond)
log.Println("发送tempint", tempint)
}
}
4)按上述方法修改后,每次发送的语音都和上级发送的语音一致了,语音播报重复的问题得到了解决。
除了提供API接口供用户调用、集成与二次开发,EasyGBS还能提供个性化定制,以满足用户的多样化功能需求。感兴趣的用户可以前往演示平台进行体验与部署测试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2021-09-16 EasyGBS出现云端录像删除过后录像文件还存在的情况优化方案
2021-09-16 EasyGBS后台操作日志功能实现方式分享
2021-09-16 EasyGBS视频录像播放不了而告警录像可以播是什么原因?
2020-09-16 国标GB28181流媒体协议视频平台EasyGBS中的5070端口什么时候需要开放出来?
2020-09-16 TSINGSEE青犀视频EasyGBS分享界面调用ifram嵌套后出现滚动条,如何解决?
2020-09-16 国标GB28181流媒体协议EasyGBS视频平台如何做页面嵌套?