android – 调用MediaCodec.configure()时出现非法状态异常

我在MediaCodec.configure()行上得到了IllegalStateException,我正在尝试使用MediaCodec录制音频.这只发生在某些手机上,标签上的一切都很好.这个特殊的崩溃示例来自三星galaxy S4.
异常痕迹:
01-22 17:33:38.379: V/ACodec(16541): [OMX.google.aac.decoder] Now Loaded
01-22 17:33:38.379: V/ACodec(16541): onConfigureComponent
01-22 17:33:38.379: W/ACodec(16541): [OMX.google.aac.decoder] Failed to set standard component role 'audio_encoder.aac'.
01-22 17:33:38.379: E/ACodec(16541): [OMX.google.aac.decoder] configureCodec returning error -2147483648
01-22 17:33:38.379: E/MediaCodec(16541): Codec reported an error. (omx error 0x80001001,internalError -2147483648)
01-22 17:33:38.384: D/AndroidRuntime(16541): Shutting down VM
01-22 17:33:38.384: W/dalvikvm(16541): threadid=1: thread exiting with uncaught exception (group=0x418d0700)
01-22 17:33:38.414: W/BugSenseHandler(16541): Transmitting crash Exception Unable to resolve host "bugsense.appspot.com": No address associated with hostname
01-22 17:33:41.404: E/AndroidRuntime(16541): FATAL EXCEPTION: main
01-22 17:33:41.404: E/AndroidRuntime(16541): java.lang.IllegalStateException
01-22 17:33:41.404: E/AndroidRuntime(16541):    at android.media.MediaCodec.native_configure(Native Method)
01-22 17:33:41.404: E/AndroidRuntime(16541):    at android.media.MediaCodec.configure(MediaCodec.java:259)
01-22 17:33:41.404: E/AndroidRuntime(16541):    at com.example.poc.MyRenderer.startRecordpressed(MyRenderer.java:344)

音频格式声明:

MediaFormat format = new MediaFormat();
    format.setString(MediaFormat.KEY_MIME,"audio/mp4a-latm");
    format.setInteger(MediaFormat.KEY_AAC_PROFILE,MediaCodecInfo.CodecProfileLevel.AACObjectLC);
    format.setInteger(MediaFormat.KEY_SAMPLE_RATE,44100);
    format.setInteger(MediaFormat.KEY_CHANNEL_COUNT,1);
    format.setInteger(MediaFormat.KEY_BIT_RATE,64000);

音频编码初始化:

mAudioEncoder = MediaCodec.createEncoderByType("audio/mp4a-latm");
        mAudioEncoder.configure(mAudioFormat,null,MediaCodec.CONfigURE_FLAG_ENCODE); //<-This line fails
        mAudioEncoder.start();

有谁知道那可能是什么?奇怪的是它只发生在某些设备上.
欢迎大家提出意见!

解决方法

尝试在运行Jellybean(4.1.2)的某些Samsung设备上配置视频编解码器时,我看到同样的错误.在许多情况下,在格式参数中将KEY_MAX_INPUT_SIZE设置为0(在调用configure之前)将修复它:
mVideoFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE,0);

我在研究类似的bug(https://stackoverflow.com/questions/15105843/mediacodec-jelly-bean#=)时发现了这个解决方案,并对这个修复了多少个编解码器配置错误感到惊讶.也就是说,我没有在音频编解码器上尝试过,所以不能保证它会在你的情况下工作:/

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...