android AAC音频编码
自从android 4.2开始, android是提供sdk来进行AAC的编解码的,大部分手机厂商都支持。
实现如下:
/*初始化MediaCodec, 用于编码;初始化AudioRecord, 用于音频获取原始数据*/
private void Init() {
if((mMediaCodec == null) && (mAudioRecord == null)) {
bufferSize = AudioRecord.getMinBufferSize(_miSamplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT)*2;
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, _miSamplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
mMediaCodec = MediaCodec.createEncoderByType("audio/mp4a-latm");
MediaFormat format = new MediaFormat();
format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
format.setInteger(MediaFormat.KEY_BIT_RATE, _miBitRate);
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, _miSamplingRate);
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, bufferSize);
mMediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
}
return;
}
//开始饮用MediaCodec进行编码,主要问题是MediaCodec.start后,需要少量时间的初始化,但是当前android sdk没有提供获取MediaCodec状态的接口!
//因此进行sleep(2000)的等待
public void Start() {
if(_bStart) {
return;
}
_bStart = true;
Init();
mAudioRecord.startRecording();
//mMed