Android - OpenGL ES 2 - 在顶点上显示视频 (SurfaceView)

Android - OpenGL ES 2 - Display video on vertices (SurfaceView)

现在我使用 SurfaceView 通过 OpenGL ES 2.0 在顶点上显示图像。 我不能使用 GLSurfaceView,因为我想自己管理 OpenGL 上下文。 我还使用离屏表面通过 MediaCodec 对我的 OpenGL 场景的视频进行编码。

在 Java 中加载图像,但在 C++ (NDK) 中完成绘制调用。

下一步也是在顶点上显示视频(来自文件)。所以我想我需要加载视频的每一帧(解码),并像图像一样(将图像放在顶点上)。但我不知道如何检索视频文件的帧,如 Bitmap 或 GLint ?这可能还是有不同的解决方案?提前致谢!

您可以使用 SurfaceTexture。 SurfaceTexture 的目的是获取发送到其 Surface 的任何内容并使其作为 GLES 纹理可用。

您可以在 Grafika's "texture from camera" Activity.

中找到在 GLES 矩形上显示实时摄像头源的示例

您没有说明解码视频的来源是什么,但只要它可以将其输出发送到 Surface,整个过程就相当高效——帧通过句柄传递,而不是复制。另一种方法是解码视频帧,必要时将 YUV 转换为 RGB,然后使用 glTexImage2D() 上传每个帧。那会慢很多。