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