MediaCodec - 将 EOS 缓冲区发送到音频解码器时出现奇怪的错误

Gen*_*337 4 android android-mediacodec

我正在努力用另一个文件中的音乐替换我的视频的音轨。所以我修改了标准ExtractDecodeEditEncodeTest代码(来自 bigflake),以便MediaExtractor从所说的“另一个文件”创建音频。但是,当我尝试将 EOS 缓冲区发送到音频解码器时,发生了一件奇怪的事情:

this.audioDecoder.queueInputBuffer(decoderInputBufferIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);

这使我获得了android.media.MediaCodec$CodecException: Error 0xfffffff3.

当我在 try-catch-finally 循环中捕获它时,它显然是一个android.media.MediaCodec.error_neg_13(代码:-13)。然而,视频仍然看起来不错,替换了音轨。

据我搜索,这个错误没有任何内容,甚至在日志中也没有。有谁知道是什么导致了它以及我如何防止它发生?

小智 7

android.media.MediaCodec.error_neg_13如果MediaCodec.BUFFER_FLAG_END_OF_STREAM是在包含要处理的数据的缓冲区中而不是在空缓冲区中发送的,则您会得到。

我的解决方案是将其发送到MediaCodec.BUFFER_FLAG_END_OF_STREAM一个不包含任何数据的单独缓冲区中。

在我研究这个错误的过程中,我没有找到任何对 的引用android.media.MediaCodec.error_neg_13,甚至在 libstagefright 源代码中也没有,所以我不确定这是否是唯一的原因。