直播中杂音、噪音和回声问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题现象
常见的音频问题现象描述如下:
•电流音,爆音,滋滋声或者嘟嘟声
•声音断断续续,听不清楚
•回声,能听到自己说话的声音
问题排查
1.参数配置问题
上面也有提到,音频是一个特别敏感的东西,涉及到许多参数配置,一旦配置不太匹配,就会导致声音听起来非常诡异(比如:采样率是32000Hz 的音频,给播放器配置为8000Hz 或者44100Hz,就明显会出现音频慢放或者快放的效果)。
常见的音频参数和基本原理,可以参考文章:《Android音频开发(1):基础知识》
我们只需要注意的是,无论是采集和播放,都要给系统的API 以及第三方的库配置正确的参数,如:采样率、位宽、声道数等等。
2.代码层面的原因
常见的代码层面的问题有如下几种:
•音频buffer 大小不匹配,一段1024 bytes 的音频,放到了2048 bytes 的数组,导致尾部有随机数
•音频resample 重采样的算法问题,导致采样出来的数据出了问题
•Android 的ByteBuffer 取出数组,是不能直接用.array() 方法的,而需要用.get() 方法
•iOS 系统,其他app 通过系统API 更改了AudioSession 采样率的配置
3.网络波动
视频是一帧一帧连续的图像构成的,在播放过程中,如果无法按时渲染,则会出现卡顿的效果;如果丢失几帧画面,则会出现快进效果。
而音频是流式的,虽然也被切分为了一个个音频帧,但如果无法按时播放或者连续丢失较多的音频帧,则会明显听到断断续续的声音出现。特别是在弱网、丢包率高等不稳定网络环境下,很容易出现这种情况。
4.回声消除
回声一般出现在同时有音频的采集和播放的场景,比如:连麦互动、混音返听等等,采集到的音频通过扬声器又播放出来了,同时又被采集了进去,从而产生了回声或者啸叫声。
这样的场景下,一般需要通过系统的回声消除API,或者第三方回声消除库(如:speexdsp,webrtc 等)进行处理。
注意:很多Android 机型硬件自带的回声消除效果并不是很好。
5.混音越界
音频的PCM 数据,通常用short 数组来存放,当我们做一些多路音频的混音功能的时候,如果不注意处理short 类型的大小越界,则往往带来爆音的问题。下面是一段参考webrtc 的混音代码,专门针对混音越界做了简单处理,可以参考参考: