使用MediaCodec录制Surface

15

在我的应用程序中,我可以使用GPUImage库来显示从相机传输的视频的效果(如模糊滤镜、高斯滤镜)。

基本上,该库会从相机接收输入,获取原始字节数据,将其从YUV格式转换为RGBA格式,然后对该图像应用效果并使用OpenGL在GLSurfaceViewSurface上显示。最终,对用户而言,看起来就像是应用了效果的视频。

现在,我想使用MediaCodec API将Surface的帧记录为视频。

但是,这个讨论说我们无法将预定义的Surface传递给MediaCodec

我在bigflake看到了一些示例,他是使用MediaCodec.createInputSurface()创建Surface,但我需要从GLSurfaceView获取Surface

那么,我该如何将一个Surface的帧记录为视频?

我将并行记录音频,使用FFMPEG合并该视频和音频,并呈现给用户已应用效果的视频。

1个回答

9

您可以在Grafika中看到完整的示例。

特别是,“Show + capture camera”活动将摄像机输出记录为.mp4格式。它还演示了在GL着色器中应用一些简单的图像处理技术。它使用了GLSurfaceView和一种复杂的方法来保持跨方向变化的记录。

此外,“Record GL app with FBO”活动以几种不同的方式记录OpenGL ES渲染。它使用简单的SurfaceView,并且更加直观易懂。


使用MediaCodec在后台(Service)记录视频是否可行?我目前使用FFmpegFrameRecorder进行录制,效果不错。我会在Activity中启动相机,并在onPreviewFrame回调中将相机重置为Service方法,然后在Service中获取字节以便使用FFmpeg录制视频。但是,使用MediaCodec时那些GL视图的东西怎么办呢? - user924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接