Android - 在解码视频的同时对其进行编码

Android - Encode a video while decoding it

我使用 SurfaceTexture 和 OpenGL ES 2.0 使用 glsl 着色器修改视频。我还可以使用 MediaCodec 对结果视频进行编码。

问题是我发现解码视频的唯一方法是使用 MediaPlayer 和 SurfaceTexture,但 MediaPlayer 没有逐帧解码选项。所以现在,就像现场直播 encoding/decoding,没有暂停。

我也尝试过使用 seekTo/pause/start,但它永远不会更新纹理..

那么是否可以逐步解码以遵循编码过程?恐怕我目前的方法不是很准确。

提前致谢!

是的,不使用 MediaPlayer,您需要使用 MediaExtractor 和 MediaCodec 对其进行解码(转换为您已经与 MediaPlayer 一起使用的同一个 SurfaceTexture)。

http://bigflake.com/mediacodec/, possibly also DecodeEditEncodeTest (or for a >= Android 5.0 async version of it, see https://github.com/mstorsjo/android-decodeencodetest 处的 ExtractMpegFramesTest 就是一个例子。

编辑:错误,mediaPlayer 的流不能逐帧使用,似乎它只适用于 "real" 速度。

实际上我已经用 MediaPlayer 做到了。按照这个答案:

Whosebug - SurfaceTexture.OnFrameAvailableListener stops being called

使用计数器,您可以加速或减速视频流,并将其与预览或编码同步。

但是 - 如果您想对特定帧进行真正的搜索,那么 mstorsjo 的解决方案会更好。就我而言,我只是想确保编码过程不会比视频输入流更快或更慢。