我可以在显示到屏幕后重用 SurfaceView 进行编码吗?

Can I reuse SurfaceView to encode after display to screen?

我正在使用 OpenGLES2 输出显示到 SurfaceView 或使用 MediaCodec 编码为 mp4。

但是,我一次只能做一个。我显然可以使用 OpenGLES2 在两个单独的表面上绘图,但那将是对 GPU 的真正低效使用。

我想要的是使用某种引用计数来重用缓冲区在屏幕上绘制并对单个 OpenGLES2 输出进行编码。就像相机服务在共享表面概念中的作用一样。

能否同时对一个缓冲区进行显示和编码? Android 中是否存在某种 T 形元素(如 GStreamer 中的元素)?

你不能让你的 surfaceView 比屏幕大。 虽然有多种方法可以以不同的方式执行此操作,但您不能在显示到屏幕后直接重用 surfaceview 进行编码。

目前没有可用的 T 组件。

但是您可以通过绘制到帧缓冲区对象然后将帧复制到屏幕和编码器来避免渲染两次。

这是一个 example(很旧)。