android - MediaCodec.configure Android 时出现 IllegalStateException

标签 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() 为您设置。

关于android - MediaCodec.configure Android 时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233835/

相关文章:

java - 在父上下文或祖先上下文中找不到方法

android - 自定义对话框 - 您必须先对 child 的 parent 调用 removeView()

android - 在后台 Activity 时关闭 DialogFragment(支持库)获取 IllegalStateException

android - MediaRecorder.start() 中的 IllegalStateException

android - 是否可以从 Android 应用程序向非 Android 移动设备发送短信?

android - 应用程序更新的推送通知

android - 从编辑文本中选择文本并将所选文本转换为图像

java - 我可以使用运行时参数来修复 Java 中的错误 API 调用吗?

java - 需要帮助在使用基本适配器的 ListView 上设置点击事件

android - 无法关闭自定义对话框