当前位置: 首页 > 知识库问答 >
问题:

调用MediaCodec时出现非法状态异常。配置()

令狐唯
2023-03-14

我在MediaCodec上得到了非法状态例外。configure()行,我正在尝试使用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, null, MediaCodec.CONFIGURE_FLAG_ENCODE); //<-This line fails
        mAudioEncoder.start();

有人知道那可能是什么吗?奇怪的是,它只发生在某些设备上。欢迎提出任何建议!

共有1个答案

宓和同
2023-03-14

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

mVideoFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);

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

 类似资料:
  • 问题内容: 将DoOutput设置为true时,出现非法状态异常。 为相同显示的堆栈跟踪为: 我没有发现我发送请求时做错了什么。任何人都可以指出缺少的内容或我做错了什么 问题答案: 我遇到了同样的问题并解决了。就我而言,这是因为我在NetBeans的调试界面中忘记了监视。希望它可以帮助其他人犯同样的错误。 如果您有任何相对于请求的响应值,如:手表,,甚至只是,你会在调试模式下出现此错误。 所有先前

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli

  • 我的主类似乎找不到我的 fmxl 文件,但我很确定路径是正确的。我不明白发生了什么。 这里是我的主要 我收到的错误是 Main.java:74 的错误是我的加载程序调用我不明白错误是由找不到我的fxml文件引起的?

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii

  • 有3个s,我想使用设置这3个声音可以无缝播放。代码很简单(省略重复代码) 这里我得到一个错误 E/MediaPlayer︰下一个播放器未准备好 D/AndroidRuntime︰关闭VM W/dalvikvm︰三个=1:线程退出与未捕获的异常(组=0x4175fda0) E/AndroidRuntime︰FATAL EXCEPTION: main Process:com.example.testg