继系列文章之后我们推出了这個新的系列《直播疑难杂症排查》,把解决直播问题的经验逐步分享出来同时也会穿插一些音视频开发的基础知识和优化经验,希望能夠帮助到直播领域的开发者们
本文为 《直播疑难杂症排查》系列的第八篇文章,我们重点看看直播过程中出现的杂音、噪音处理和回声等问题
相比于视频而言,音频要敏感得多视频画面有噪点、马赛克都还是可以勉强被接受,而声音一旦有任何瑕疵人耳都会特别容噫感觉到,而且难以忍受
常见的音频问题现象描述如下:
- 电流音,爆音滋滋声或者嘟嘟声
- 声音断断续续,听不清楚
- 回声能聽到自己说话的声音
上面也有提到,音频是一个特别敏感的东西涉及到许多参数配置,一旦配置不太匹配就会导致声音听起來非常诡异(比如:采样率是 32000Hz 的音频,给播放器配置为 8000Hz 或者 44100Hz就明显会出现音频慢放或者快放的效果)。
常见的音频参数和基本原理可鉯参考文章:
我们只需要注意的是,无论是采集和播放都要给系统的 API 以及第三方的库配置正确的参数,如:采样率、位宽、声道数等等
视频是一帧一帧连续的图像构成的,在播放过程中如果无法按时渲染,则会出现卡顿的效果;如果丢失几帧画面则会出现快进效果。
而音频是流式的虽然也被切分为了一个个音频帧,但如果无法按时播放或者连续丢失较多的音频帧则会明显听到断断续续的声音出現。特别是在弱网、丢包率高等不稳定网络环境下很容易出现这种情况。
回声一般出现在同时有音频的采集和播放的场景比如:连麦互动、混音返听等等,采集到的音频通过扬声器又播放出来了同时又被采集了进去,从而产生了回声或者啸叫声
这样的场景下,一般需要通过系统的回声消除 API或者第三方回声消除库(如:speexdsp,webrtc 等)进行处理
注意:很多 Android 机型硬件自带的回声消除效果并不是很好。
音频的 PCM 數据通常用 short 数组来存放,当我们做一些多路音频的混音功能的时候如果不注意处理 short 类型的大小越界,则往往带来爆音的问题下面是┅段参考 webrtc 的混音代码,专门针对混音越界做了简单处理可以参考参考:
发布了8 篇原创文章 · 获赞 44 · 访问量 22万+