MediaCodec.configure Android时发生IllegalStateException

我尝试为“ audio / 3gpp”创建编码器,但我的应用崩溃了…

我用这个代码

String mMime = "audio/3gpp";
MediaCodec mMediaCodec = MediaCodec.createEncoderByType(mMime);
MediaFormat mMediaFormat = MediaFormat.createAudioFormat(mMime, RECORDER_SAMPLERATE, 1);
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();

Exception

java.lang.IllegalStateException

android.media.MediaCodec.native_configure(Native Method)

at android.media.MediaCodec.configure(MediaCodec.java:256)

at com.agent.mobile.TestAppActivity.initMediaCodec(TestAppActivity.java:234)

最佳答案
必须使用格式设置一些必填值.如果您查看docs for MediaFormat,它会显示“所有未标记为可选的键都是必需的”.如果您未能设置强制密钥,则MediaCodec会引发错误,因为它一直处于非法状态.

加:

mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, <bit rate>);
mMediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, <sample rate>);
mMediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);

KEY_MIME应该已经由createEncoderByType()为您设置了.

转载注明原文:MediaCodec.configure Android时发生IllegalStateException - 代码日志