// inspired by: https://github.com/Kickflip/kickflip-android-sdk/blob/e35e0a5bb7161ccffebd564ec1a76a0e2c053fc8/sdk/src/main/java/io/kickflip/sdk/av/AudioEncoderCore.java
package io.cine.android.streaming;
import android.media.MediaCodec;
import android.media.MediaCodecInfo;
import android.media.MediaFormat;
/**
* @hide
*/
public class AudioEncoderCore extends AndroidEncoder {
protected static final String MIME_TYPE = "audio/mp4a-latm"; // AAC Low Overhead Audio Transport Multiplex
private static final String TAG = "AudioEncoderCore";
private static final boolean VERBOSE = false;
/**
* Configures encoder and muxer state
*/
public AudioEncoderCore(Muxer muxer) {
super(muxer);
AudioEncoderConfig config = muxer.getConfig().getAudioEncoderConfig();
mBufferInfo = new MediaCodec.BufferInfo();
MediaFormat format = MediaFormat.createAudioFormat(MIME_TYPE, config.getSampleRate(), config.getChannelConfig());
// Set some properties. Failing to specify some of these can cause the MediaCodec
// configure() call to throw an unhelpful exception.
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, config.getSampleRate());
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, config.getNumChannels());
format.setInteger(MediaFormat.KEY_BIT_RATE, config.getBitrate());
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 16384);
mEncoder = MediaCodec.createEncoderByType(MIME_TYPE);
mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mEncoder.start();
mTrackIndex = -1;
}
public MediaCodec getMediaCodec() {
return mEncoder;
}
@Override
protected boolean isSurfaceInputEncoder() {
return false;
}
}