0

到目前为止我所知道的是,我需要使用可以同时在两个 TextureView 上渲染的 SurfaceTexture。所以它将是:MediaCodec -> SurfaceTexture -> 2x TextureViews

但是如何以编程方式获得 SurfaceTexture 以在 MediaCodec 中使用?据我所知,为每个 TextureView 创建了一个新的 SurfaceTexture,所以如果我的活动中有两个 TextureView,我将得到两个 TextureView!?那是一对多... ;)

或者有没有其他方法可以将 MediaCodec 输出两次渲染到屏幕上?

4

1 回答 1

3

您实际上需要两个 TextureView,还是只是为了方便?

例如,您可以拥有一个覆盖整个屏幕的 SurfaceView 或 TextureView,然后使用 GLES 在左侧和右侧进行渲染。使用 SurfaceTexture 中的视频输出,您可以随意渲染它。Grafika中的“来自相机的纹理”活动演示了处理来自视频源的图像的各种方法。

如果你真的想要两个 TextureView,你可以拥有它们。对 SurfaceTexture 和两个 TextureView 使用单个 EGL 上下文,并在eglMakeCurrent()需要渲染时在 EGL 表面之间切换。

在任何情况下,您都应该创建自己的 SurfaceTexture 来接收视频,而不是使用来自 TextureView 的视频 - 参见例如这段代码

于 2015-06-23T15:41:53.110 回答