MediaCodec.configure Android时出现IllegalStateException

时间:2013-06-21 11:12:14

标签: 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();
  

异常   
java.lang.IllegalStateException   
android.media.MediaCodec.native_configure(Native方法)   
在android.media.MediaCodec.configure(MediaCodec.java:256)   
在com.agent.mobile.TestAppActivity.initMediaCodec(TestAppActivity.java:234)

1 个答案:

答案 0 :(得分:5)

必须在格式中设置一些必需的值。如果你查看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()