【发布时间】:2015-04-29 00:47:37
【问题描述】:
我将 MediaExtractor 的输出传递给 MediaCodec 解码器,然后将解码器的输出缓冲区传递给编码器的输入缓冲区。我遇到的问题是,当它从编码器出来时,我需要将分辨率从解码器输出的 1920x1080 降低到 1280x720。我可以使用 Surface 来做到这一点,但我正在尝试以 Android 4.1 为目标,因此需要以另一种方式实现这一目标。有谁知道如何使用 MediaCodec 以与 4.1 兼容的方式更改视频文件的分辨率?
【问题讨论】:
-
如果没有 Surface 输入,您需要在软件中进行。 MediaCodec 在 4.3 (API 18) 之前有些不稳定。如果您使用 ffmpeg,或许通过 NDK,您将拥有一个仅适用于任何 Android 设备的纯软件解决方案。
-
由于 GPL 许可,我希望避免使用 ffmpeg。从我所看到的情况来看,我不太可能定位
-
FFmpeg 是 LGPL 2.1 或更高版本,除非您使用配置选项来更改许可证,例如
--enable-gpl。 -
我需要编码为 h264,所以我不认为 LGPL 是一种选择。我在想的一件事可能是以目标分辨率从解码器渲染到表面,然后将表面的每一帧作为位图输入编码器。不过,我还不知道这是否可行。
标签: android ffmpeg video-encoding android-mediacodec