Android - 解码时对视频进行编码

时间:2016-06-07 09:33:25

标签: android video opengl-es-2.0 mediacodec video-encoding

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

问题在于,我发现解码视频的唯一方法是使用MediaPlayer和SurfaceTexture,但MediaPlayer没有逐帧解码选项。所以现在,它就像一个实时编码/解码,没有停顿。

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

那么可以一步一步地解码,以遵循编码过程吗?我担心我目前的方法不是很准确。

提前致谢!

2 个答案:

答案 0 :(得分:1)

是的,您需要使用MediaExtractor和MediaCodec对其进行解码(而不是使用MediaPlayer),而不是使用MediaPlayer。(使用MediaPlayer已经使用的SurfaceTexture)。

这方面的一个示例是http://bigflake.com/mediacodec/上的ExtractMpegFramesTest,也可能是DecodeEditEncodeTest(或者对于> = Android 5.0异步版本,请参阅https://github.com/mstorsjo/android-decodeencodetest)。

答案 1 :(得分:0)

编辑:错了,mediaPlayer的流不能一帧一帧地使用,看起来它只能以“真实”的速度运行。

我实际上已经设法使用MediaPlayer。以下是这个答案:

stackoverflow - SurfaceTexture.OnFrameAvailableListener stops being called

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

但是 - 如果你想真正寻找特定的框架,那么mstorsjo的解决方案会更好。就我而言,我只是想确保编码过程不会比视频输入流更快或更慢。