Android音视频(六) 使用OpenGL ES 3.0预览Camera

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android音视频(六) 使用OpenGL ES 3.0预览Camera相关的知识,希望对你有一定的参考价值。

参考技术A 刚学习了OpenGL的纹理相关知识,终于可以接着写android音视频系列了。

本篇博客会介绍使用OpenGL ES 3.0相关知识预览Camera,并且提供Camera和Camera2两个版本实现。

顶点着色器

片段着色器

纹理的类型需要使用 samplerExternalOES ,而不是之前渲染图片的 sampler2D。

我们知道Android相机输出的原始数据一般都为YUV数据,而在OpenGL中使用的绝大部分纹理ID都是RGBA的格式,所以原始数据都是无法直接用OpenGL ES来渲染的。所以我们添加了一个扩展 #extension GL_OES_EGL_image_external_essl3 : require ,其中定义了一个纹理的扩展类型 GL_TEXTURE_EXTERNAL_OES 。后面绑定纹理时需要绑定到 GL_TEXTURE_EXTERNAL_OES 上,而不是类型GL_TEXTURE_2D上。

其实前面部分和加载图片没有什么区别,最后两行,对应上面流程中的1、2步。创建纹理,绑定外部纹理,然后根据纹理ID创建SurfaceTexture作为相机预览输出。

使用Camera2在OpenGL方面其实是一样的,并没有什么改动。所以只需要看一下Camera2的调用就好。

源码地址

以上是关于Android音视频(六) 使用OpenGL ES 3.0预览Camera的主要内容,如果未能解决你的问题,请参考以下文章

Android OpenGL ES 学习 - MediaCodec + OpenGL 解析H264视频+滤镜

Android OpenGL ES 学习 –渲染YUV视频以及视频抖音特效

Android OpenGL ES 学习 –渲染YUV视频以及视频抖音特效

使用 NDK、OpenGL ES 和 FFmpeg 的 Android 视频播放器

Android音视频 OpenGL ES2.0 绘制图片纹理

Android音视频 OpenGL ES2.0 绘制图片纹理