android – 使用MediaCodec截断视频

android – 使用MediaCodec截断视频,第1张

概述我用 Android MediaCodec库来转码视频文件(主要是改变分辨率 Sample code here) 我想要实现的另一件事是截断视频 – 仅开始15秒.逻辑是检查videoExtractor.getSampleTime()是否大于15秒,我只是将EOS写入解码器缓冲区. 但我得到一个异常引起:android.media.MediaCodec $CodecException:Error 我用 Android MediaCodec库来转码视频文件(主要是改变分辨率 Sample code here)

我想要实现的另一件事是截断视频 – 仅开始15秒.逻辑是检查vIDeoExtractor.getSampleTime()是否大于15秒,我只是将EOS写入解码器缓冲区.

但我得到一个异常引起: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,size,presentationTime,vIDeoExtractor.getSampleFlags());            }            vIDeoExtractorDone = !vIDeoExtractor.advance();            if (!vIDeoExtractorDone && vIDeoExtractor.getSampleTime() > mVIDeoDurationlimit * 1000000) {                vIDeoExtractorDone = true;            }            if (vIDeoExtractorDone)                vIDeoDecoder.queueinputBuffer(decoderinputBufferIndex,MediaCodec.BUFFER_FLAG_END_OF_STREAM);            break;        }

完整的源代码可以在here找到.

解决方法 我不确定这是否是错误的来源,但我认为在任意点将EOS写入解码器缓冲区是不安全的.

原因是当输入视频使用H264 Main Profile或更高版本时,
pts可能不是递增的顺序(因为存在B帧),所以你可能会错过视频结尾的几帧.
此外,当您发送到解码器的最后一帧是B帧时,解码器可能会期待下一个数据包,但您发送EOS标志并产生错误(不太确定).

你可以做什么,你可以在你到达你想要的帧后使用vIDeoEncoder.signalEndOfinputStream()将EOS标志发送到编码器,(解码器输出的点数保证递增顺序,至少在androID版本> =之后4.3?)

总结

以上是内存溢出为你收集整理的android – 使用MediaCodec截断视频全部内容,希望文章能够帮你解决android – 使用MediaCodec截断视频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1135683.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存