【问题标题】:Android MediaCodec: video file processing: add the original audio, while process videoAndroid MediaCodec:视频文件处理:添加原始音频,同时处理视频
【发布时间】:2014-05-02 14:26:50
【问题描述】:

输入是一个视频文件。 我想处理每个视频帧,而音频保持不变。 输出是一个视频文件。

我基本上遵循 bigflake.com 中的示例 DecodeEditEncodeTest.java 和 MeidaMuxerText.java 在不添加音轨的情况下,该应用程序运行良好。 现在我将音轨添加到 mMuxer 中。

由于我不需要处理音频,所以我不会对音频使用解码或编码。

这是一个两难境地。 如果我想知道样本数据是视频还是音频,我将使用: int chunkSize = extractor.readSampleData(inputBuf, 0)

如果我将 inputBuf 设置为一般的 ByteBuffer,并且如果样本结果是音频,那就没问题了。 我只是使用 mMuxer.writeSampleData 将 inputBuf 写入输出视频文件。

但如果样本是视频,那么我应该将数据写入解码器的输入缓冲区。但是现在既然先不知道,那如何确定使用哪个缓冲区呢?

【问题讨论】:

    标签: android audio android-mediacodec


    【解决方案1】:

    MediaExtractor.getSampleTrackIndex() 告诉您当前样本来自哪个轨道。

    【讨论】:

    • 我以为getSampleTrackIndex()是在读取当前样本的track,所以我们需要先使用getSampleTrackIndex()。但是如果我们使用getSampleTrackIndex(),我们需要设置dataBuffer;如果我们需要设置dataBuffer,我们需要知道它是什么格式(视频或音频)。
    • “当前样本”不是你刚刚读取的样本,而是提取器中当前位置的样本。换句话说,您可以调用 getSampleTrackIndex() 来找出要从哪个轨道读取下一个样本,然后调用 readSampleData() 将该样本读入适当的缓冲区,然后调用 Advance() 继续下一个样本。
    猜你喜欢
    • 2019-06-07
    • 2020-12-24
    • 2020-06-07
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多