在我的Android应用中,我想通过更改分辨率、比特率来压缩mp4视频。我不想使用FFmpeg(因为我不想使用NDK),所以我决定使用MediaCodec API。
以下是我的逻辑步骤:
1. 使用 MediaExtractor 提取视频文件,然后解码数据。 2. 创建新的编码器,设置新的分辨率、比特率,并对数据进行编码。 3. 使用 MediaMuxer 创建一个新的 mp4 文件。
我的问题是:我不知道如何设置解码器输出和编码器输入之间的连接。我可以将视频解码到 Surface 上,也可以从 Surface 上编码新的视频。但我不明白它们之间如何连接。
我阅读了这些链接:Android MediaCodec: Reduce mp4 video size,Video compression on android using new MediaCodec Library 以及 Bigflake 的示例:https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java 有谁能给我一个清晰的解释,告诉我该怎么做吗?
以下是我的逻辑步骤:
1. 使用 MediaExtractor 提取视频文件,然后解码数据。 2. 创建新的编码器,设置新的分辨率、比特率,并对数据进行编码。 3. 使用 MediaMuxer 创建一个新的 mp4 文件。
我的问题是:我不知道如何设置解码器输出和编码器输入之间的连接。我可以将视频解码到 Surface 上,也可以从 Surface 上编码新的视频。但我不明白它们之间如何连接。
我阅读了这些链接:Android MediaCodec: Reduce mp4 video size,Video compression on android using new MediaCodec Library 以及 Bigflake 的示例:https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java 有谁能给我一个清晰的解释,告诉我该怎么做吗?
getInputSurface()
)并将其作为输出表面(通过configure()
)传递给解码器即可。 - fadden