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

标签 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)。然而,视频仍然看起来很好,但音轨被替换了。

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

最佳答案

你得到 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/

相关文章:

android - 如何突出显示或检查选定的列表项

android - 如何检测音量是否设置为静音?

Android MediaCodec 视频颜色错误和播放速度过快

java - 为什么 ExtractMpegFramesTest 不适用于旋转的输入文件?

java - 安卓工作室;启动至 USB 设备(手机),安装但无法打开

android - TextView 的颜色在带有 ConstraintLayout 的真实设备上显示为白色

android - 如何列出我的联系人列表并在 applozic 中发送消息

Android MediaCodec Format/Resolution Change 中流

安卓媒体编解码器 : Is it possible to encode audio and video at the same time using mediacodec and muxer?

Android MediaCodec 编码器 - 三星设备的奇怪结果