Android 采集编码基本流程
我们很多应用少不了 Android录屏,Android 视频电话,首先都需要采集和编码。下面我们介绍基本的原理过程。
一,采集。
- SurfaceTexture 在介绍采集图像采集之前,先介绍SurfaceTexture ,字面意思可以看出分两部分Surface 和Texture,即为平面和纹理,说到问题我们想到opengl,不错这个类就是把surface转成opengl纹理,有个队列,队列输入surface 图像,输出opengl纹理。如下图。
通过上图,无论是一个摄像头还是一个解码器,或者是一个屏幕采集器,都可以通过SurfaceTexture采集到图像。下面我们看具体如何实现的。
- 摄像头采集。
2.1,Opengl 初始化,生成一个纹理。
//生成gl 程序。
program_mediacodec = createProgram(vertexSource, fragmentSource);
avPosition_mediacodec = GLES20.glGetAttribLocation(program_mediacodec, "av_Position");
afPosition_mediacodec = GLES20.glGetAttribLocation(program_mediacodec, "af_Position");
samplerOES_mediacodec = GLES20.glGetUniformLocation(program_mediacodec, "sTexture");
enable_correction = GLES20.glGetUniformLocation(program_mediacodec,"enable_correction");
//生成纹理,这个创建两个纹理,一个是关联Camara,一个关联桌面。
int[] textureids = new int[2];
GLES20.glGenTextures(2, textureids, 0);
textureId_mediacodec = textureids[0];
textureId_mediacodec2 = textureids[1];
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
GL