之前做TUTK音视频流的拉流APP时踩了很多坑,曾经因为编解码问题熬了好几次夜,网上的资料也很有限,自己一点点拼凑来的,在这里Mark一下曾经走过的路。
android的音频采集,我用的是androidRecord,设置参数然后按照官方方法调用就行,没什么问题。上代码
public AudioRecord audioRecord;
private int SAMPLE_RATE = 16000; //采样率 8K或16K
private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; //音频通道(单声道)
private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; //音频格式
private static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC; //音频源(麦克风)
int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
audioRecord = new AudioRecord(
AUDIO_SOURCE, //音频源
SAMPLE_RATE, //采样率
CHANNEL_CONFIG, //音频通道
AUDIO_FORMAT, //音频格式\采样精度
bufferSizeInBytes * 4 //缓冲区
);
这里是初始化androidRecord,缓冲区最好设置为2倍以上的大小,防止录制出来的音频数据播放时卡顿等问题,这里主要要注意采样率和音频通道,有可能会因为音频通道设置不正确造成音频播放异常(我曾经出现过)。
如果需要AEC回音消除可以修改上面的音频源参数 MediaRecorder.AudioSource.VOICE_COMMUNICATION,使用android自带的回音消除,具体效果我没有单独验证过,因为我的APP是和IPC一块使用的,IPC和APP同时使用AEC的话全双工通信基本没有回音,效果OK。
private static AcousticEchoCanceler canceler;//回声消除
/**
* 添加AEC回声消除
*
* @return
*/
public static boolean chkNewDev() {
return android.os.Build