相关疑难解决方法(0)

使用MediaCodec截断视频

我使用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)

android mediacodec

8
推荐指数
1
解决办法
639
查看次数

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

我正在努力用另一个文件中的音乐替换我的视频的音轨。所以我修改了标准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 android-mediacodec

4
推荐指数
1
解决办法
1884
查看次数

标签 统计

android ×2

android-mediacodec ×1

mediacodec ×1