Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 媒体编解码器出列输出缓冲区非法状态异常_Android_Mp3_Android Mediacodec_Decoder - Fatal编程技术网

Android 媒体编解码器出列输出缓冲区非法状态异常

Android 媒体编解码器出列输出缓冲区非法状态异常,android,mp3,android-mediacodec,decoder,Android,Mp3,Android Mediacodec,Decoder,我尝试用Android媒体编解码器解码mp3音频数据流。 采样率为44100时,解码工作正常,但延迟太大。所以我将采样率设置为16000,但是现在解码器不再工作了。我在dequeueOutputBuffer处得到一个非法状态异常 这是代码中可能存在问题的部分: bufferInfo = new MediaCodec.BufferInfo(); outputBufferIndex = decoder.d

我尝试用Android媒体编解码器解码mp3音频数据流。 采样率为44100时,解码工作正常,但延迟太大。所以我将采样率设置为16000,但是现在解码器不再工作了。我在dequeueOutputBuffer处得到一个非法状态异常

这是代码中可能存在问题的部分:

                        bufferInfo = new MediaCodec.BufferInfo();
                        outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, -1);


                        while (outputBufferIndex >= 0) {



                            outputBuffer = decoder.getOutputBuffer(outputBufferIndex);

                            outputBuffer.position(bufferInfo.offset);
                            outputBuffer.limit(bufferInfo.offset + bufferInfo.size);

                            outData = new byte[bufferInfo.size];
                            outputBuffer.get(outData);

                            track.write(outData, 0, outData.length);

                            decoder.releaseOutputBuffer(outputBufferIndex, false);
                            outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, -1);


                        }
我还尝试将dequeueOutputBuffer的超时设置为0,但这并没有改变任何事情

这是我收到的错误:

E/SoftMP3: mp3 decoder returned error 1
E/ACodec: [OMX.google.mp3.decoder] ERROR(0x80001001)
E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
E/AndroidRuntime: FATAL EXCEPTION: Thread-79054
    Process: com.example.jonas.audio_client, PID: 26394
    java.lang.IllegalStateException
       at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
       at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1107) 
如果我打印提取器获得的音频格式,我会看到采样率设置为16000

D/Format:: {bitrate=32000, mime=audio/mpeg, durationUs=6509000, channel-count=1, sample-rate=16000, bit-rate=32000}

谢谢你的帮助

我遇到了与此类似的问题,但使用了视频编码器。我解决了我的问题,把我的视频的比特率搞乱了,直到它工作。现在,我已经用
32*宽*高*帧率/100的比特率解决了我的问题。所以我建议你尝试改变你的比特率


我受到了影响,无法得出此解决方案。

如果在模拟器上运行此解决方案,请确保在模拟器设置中选择了图形作为硬件:GLES 2.0。软件版本似乎存在一些问题。

我已尝试更改
int比特率=450000
to
int比特率=32*resultHeight*resultWidth*25/100但它仍然根本不起作用。我也犯了同样的错误。