我正在用另一个文件中的音乐替换我的视频的音轨。所以我修改了标准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)。然而,视频仍然看起来很好,但音轨被替换了。
据我搜索,这个错误没有任何内容,甚至在日志中也没有。有谁知道是什么原因造成的以及如何防止它发生?
最佳答案
你得到 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 源代码中也没有,所以我不确定这是否是唯一的原因。
关于android - MediaCodec - 将 EOS 缓冲区发送到音频解码器时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48919712/