android SDK中MediaExtractor、MediaCodec和MediaMuxer之间的关系是什么?

404*_*pio 1 android mediaextractor mediamuxer android-mediacodec

我正在尝试在 Android 上的视频样本上进行一些深度学习实验。我已经陷入了重新混合视频的困境。我有几个问题要在脑海中安排信息:)我已经阅读了一些页面: https: //vec.io/posts/android-hardware-decoding-with-mediacodec和https://bigflake.com/mediacodec/ #ExtractMpegFramesTest但我仍然一团糟。

我的问题:

  1. 我可以读取视频MediaExtractor,然后传递数据以MediaMuxer将视频保存在另一个文件中吗?不使用MediaCodec?
  2. 如果我想在保存之前修改帧,我可以在不使用 的情况下做到这一点吗Surface?只需修改ByteBuffer? 我假设我需要解码来自 的数据MediaExtractor,然后修改内容,然后将其编码为MediaMuxer。
  3. 与方法上下文中的sample相同吗?frameMediaExtractor::readSampleData
  4. 我需要解码样本吗?

l-l*_*l-l 5

这是每个类的作用的简要描述:

  • MediaExtrator:提取编码的视频/音频数据
  • MediaCodec:根据其配置方式,它可以是解码器或编码器。
  • MediaMuxer:将数据流复用到输出文件中。

管道通常应如下所示:

MediaExtractor -> MediaCodec(作为解码器) -> 你的编辑 -> MediaCodec(作为编码器) -> MediaMuxer

回答您的问题:

  1. MediaExtractor 将为您提供编码数据,如果您想对其执行任何操作,则必须使用 MediaCodec 对其进行解码。
  2. 没有表面也可以做到这一点,但效果非常有限。表面是要走的路。您可以在此处找到更多信息: 使用 MediaCodec 编辑帧和编码
  3. 样本可以是视频帧或音频样本
  4. 是的,您确实需要解码样本才能编辑它们