我使用Android MediaCodec库来转码视频文件(主要是在这里更改分辨率示例代码)
我想要实现的另一件事是截断视频 - 仅开始15秒.逻辑是检查videoExtractor.getSampleTime()它是否大于15秒,我只是写一个EOS解码器缓冲区.
但我得到一个例外 Caused by: android.media.MediaCodec$CodecException: Error 0xfffffff3
这是我的代码:
while ((!videoEncoderDone) || (!audioEncoderDone)) {
while (!videoExtractorDone
&& (encoderOutputVideoFormat == null || muxing)) {
int decoderInputBufferIndex = videoDecoder.dequeueInputBuffer(TIMEOUT_USEC);
if (decoderInputBufferIndex == MediaCodec.INFO_TRY_AGAIN_LATER)
break;
ByteBuffer decoderInputBuffer = videoDecoderInputBuffers[decoderInputBufferIndex];
int size = videoExtractor.readSampleData(decoderInputBuffer, 0);
long presentationTime = videoExtractor.getSampleTime();
if (size >= 0) {
videoDecoder.queueInputBuffer(
decoderInputBufferIndex,
0,
size,
presentationTime,
videoExtractor.getSampleFlags());
}
videoExtractorDone = !videoExtractor.advance();
if (!videoExtractorDone && videoExtractor.getSampleTime() > mVideoDurationLimit * 1000000) { …Run Code Online (Sandbox Code Playgroud) 我正在努力用另一个文件中的音乐替换我的视频的音轨。所以我修改了标准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)。然而,视频仍然看起来不错,替换了音轨。
据我搜索,这个错误没有任何内容,甚至在日志中也没有。有谁知道是什么导致了它以及我如何防止它发生?