android SDK 中 MediaExtractor、MediaCodec 和 MediaMuxer 之间的关系是什么?
What is relation between MediaExtractor, MediaCodec and MediaMuxer in android SDK?
我正在尝试对 android 视频样本进行一些深度学习实验。而且我已经陷入了 remuxing 视频。我有几个问题需要在脑海中整理信息:) 我已经阅读了一些页面:https://vec.io/posts/android-hardware-decoding-with-mediacodec and https://bigflake.com/mediacodec/#ExtractMpegFramesTest 但我仍然一团糟。
我的问题:
- 我可以使用
MediaExtractor
读取视频,然后将数据传递给 MediaMuxer
以将视频保存在另一个文件中吗?不使用 MediaCodec?
- 如果我想在保存前修改帧,我可以不使用
Surface
吗?只是修改ByteBuffer
?我假设我需要解码来自 MediaExtractor
的数据,然后修改内容,然后将其编码为 MediaMuxer
.
- 在方法
MediaExtractor::readSampleData
的上下文中,sample
是否与 frame
相同?
- 我需要解码样本吗?
这是对每个 class 功能的简要描述:
- MediaExtrator:提取编码的 video/audio 数据
- MediaCodec:根据其配置方式,它可以是解码器或编码器。
- MediaMuxer:将数据流多路复用到输出文件中。
管道通常应该是这样的:
MediaExtractor -> MediaCodec(作为解码器) -> 你的编辑 -> MediaCodec(作为编码器) -> MediaMuxer
为您解答问题:
- MediaExtractor 会给你编码的数据,如果你想做的话
任何带有它的东西你都必须使用 MediaCodec 对其进行解码。
- 或许可以在没有表面的情况下这样做,但它会
相当有限。表面是要走的路。你可以找到更多信息
这里:
- 样本可以是视频帧或音频样本
- 是的,您确实需要解码样本才能对其进行编辑
我正在尝试对 android 视频样本进行一些深度学习实验。而且我已经陷入了 remuxing 视频。我有几个问题需要在脑海中整理信息:) 我已经阅读了一些页面:https://vec.io/posts/android-hardware-decoding-with-mediacodec and https://bigflake.com/mediacodec/#ExtractMpegFramesTest 但我仍然一团糟。
我的问题:
- 我可以使用
MediaExtractor
读取视频,然后将数据传递给MediaMuxer
以将视频保存在另一个文件中吗?不使用 MediaCodec? - 如果我想在保存前修改帧,我可以不使用
Surface
吗?只是修改ByteBuffer
?我假设我需要解码来自MediaExtractor
的数据,然后修改内容,然后将其编码为MediaMuxer
. - 在方法
MediaExtractor::readSampleData
的上下文中,sample
是否与frame
相同? - 我需要解码样本吗?
这是对每个 class 功能的简要描述:
- MediaExtrator:提取编码的 video/audio 数据
- MediaCodec:根据其配置方式,它可以是解码器或编码器。
- MediaMuxer:将数据流多路复用到输出文件中。
管道通常应该是这样的:
MediaExtractor -> MediaCodec(作为解码器) -> 你的编辑 -> MediaCodec(作为编码器) -> MediaMuxer
为您解答问题:
- MediaExtractor 会给你编码的数据,如果你想做的话 任何带有它的东西你都必须使用 MediaCodec 对其进行解码。
- 或许可以在没有表面的情况下这样做,但它会
相当有限。表面是要走的路。你可以找到更多信息
这里:
- 样本可以是视频帧或音频样本
- 是的,您确实需要解码样本才能对其进行编辑