我使用SurfaceTexture和OpenGL ES 2.0使用glsl着色器修改视频。我也可以使用MediaCodec对结果视频进行编码。
问题在于,我发现解码视频的唯一方法是使用MediaPlayer和SurfaceTexture,但MediaPlayer没有逐帧解码选项。所以现在,它就像一个实时编码/解码,没有停顿。
我也尝试过使用seekTo / pause / start,但它永远不会更新纹理..
那么可以一步一步地解码,以遵循编码过程吗?我担心我目前的方法不是很准确。
提前致谢!
答案 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。以下是这个答案:
stackoverflow - SurfaceTexture.OnFrameAvailableListener stops being called
使用计数器,您可以加快或加快视频流的速度,并将其与预览或编码同步。
但是 - 如果你想真正寻找特定的框架,那么mstorsjo的解决方案会更好。就我而言,我只是想确保编码过程不会比视频输入流更快或更慢。