为什么直播会有回音?
相比视频,音频要敏感得多。视频图像中的噪音和马赛克还是可以勉强接受的,一旦声音有任何瑕疵,就会特别容易让人感觉到,难以忍受。
问题现象
常见的音频问题描述如下:
-电流声、音爆声、河马小厨师声或嘟嘟声。
-我听不清楚。
-艾可,你能听到自己的声音
问题调查
1.参数配置问题
如上所述,音频是一个特别敏感的东西,涉及到很多参数配置。一旦配置不匹配,声音会听起来很奇怪(比如采样率为32000Hz,播放器配置为000Hz或者44100Hz,音频会明显播放缓慢或者快速)。
常用音频参数和基本原理请参考文章:Android音频开发(1):基础知识。
我们只需要注意的是,无论是采集还是回放,系统的API和第三方库都要配置正确的参数,比如采样率、位宽、通道数等等。
2.代码层面的原因
代码级别的常见问题如下:
-音频缓冲区的大小不匹配。一段1024字节的音频放在一个2048字节的数组里,最后产生一个随机数。
-音频重采样算法问题,导致采样数据出现问题。
Android的ByteBuffer取出数组。你不能使用。array()方法,但是您需要使用。get()方法。
-iOS系统,其他app通过系统API改变了AudioSession采样率的配置。
一个接一个的回答
3.网络波动
视频由一帧一帧的连续图像组成。在播放的过程中,如果不能按时渲染,就会有卡顿的效果。如果丢了几帧,就会出现快进效果。
音频是流式的,虽然也分音频帧,但是如果不能按时播放或者连续丢失更多音频帧,就会明显听到断断续续的声音。尤其是在网络弱、丢包率高的不稳定网络环境下,这种情况很容易出现。
4.回波消除
回声通常出现在音频采集和播放同时进行的场景中,例如麦麦互动、混音和听音等。采集到的音频通过扬声器再次播放出来,同时进行采集,产生回声或口哨声。
在这样的场景下,一般需要通过系统的回声消除API或者第三方回声消除库(如speexdsp、webrtc等)来处理。).
注:很多安卓机型的硬件的回声消除效果都不是很好。
5.混合出界
音频的PCM数据通常存储在短数组中。我们在做一些多声道混音功能时,如果不注意短型的大小,往往会带来音爆问题。以下是对webrtc的混合代码的参考,专门用于混合越界的简单处理。