2

我一直在使用FFmpeg进行视频转码,它可以工作,但速度很慢。

我也尝试过 Intel Inde 库,但不适用于我测试过的一些 Android 手机。

因此,我想利用 MediaCodec Api 对视频进行转码。

我已经阅读了 BigFlake的一些示例代码,这有助于我了解 Api 的一些概念。但是我仍然不知道如何将视频文件从一种格式转码为另一种格式。

我没有使用编解码器的经验,我认为流程是:

Decode input video file(frame?) -> feed into encoder -> convert the stream to a .MP4 file.

感谢是否有人能指出我正确的方向。

4

1 回答 1

2

您似乎已经了解基本原理。您的工作流程是正确的——将解码器的输出馈送到编码器的输入。如果您希望结果为 .mp4 文件,请通过MediaMuxer发送 AVC 输出。

棘手的部分与您试图通过转码完成的工作有关。更改视频的大小或比特率很简单,因为您只需要适当地配置编码器。过滤视频有点复杂,因为出于性能原因,您可能希望使用 OpenGL ES(Bigflake 上的 DecodeEditEncode 测试证明了这一点)。改变帧速率可能会变得复杂。

为了获得最佳结果,请通过 Surface 执行所有操作(需要 API 18+)。这假设您的视频解码器支持输出到 Surface;如果没有,您可能需要自己渲染它。

在Grafika中可以找到一些额外的 MediaCodec 示例。

于 2016-04-22T18:28:33.917 回答