Android视频拍摄功能总结

主要变量

WindowSurface mDisplaySurface //对Surface的包装

WindowSurface mEncoderSurface

渲染器: FullFrameRect -->


1.初始化

1.1 初始化Camera

1.2 在SurfaceView.surfaceCreate()

1.2.1 初始化OpenGL ES 2.0

根据 mEGLDisplay , EGLContext 这2个变量初始化 EglCore

1.2.2 将Surface和OpenGL ES 2.0绑定

调用 EGL14.eglCreateWindowSurface(surface) 绑定

EGL14.eglCreateWindowSurface(surface) 封装在 EglCore

surface = SurfaceView.Holder.surface

最终创建出 WindowSurface mDisplaySurface

1.2.3 创建渲染器

初始化 片元着色气 , 顶点着色气 和 着色器运行时所需的变量名 ---> 生成mFullFrameBlit

mFullFrameBlit 保有每帧绘制时所需的变量

mFullFrameBlit 可以生成一个纹理ID

1.2.3 生成一个Texture

SurfaceTexture mCameraTexture = mFullFrameBlit.createTextureObject --->

1.2.4 添加 帧更新监听器(onFrameAvailable)

1.2.5 将Camera和Texture绑定

Camera.setPreviewTexture(mCameraTexture)

1.2.6 打开Camera,此时onFrameAvailable就会被循环调用

 

2.帧的更新过程(onFrameAvailable的调用)

2.1 更新SurfaceView

抓住camera的下一帧

把这一帧更新到SurfaceView

首先我们吧这个Surface打住,以便可以进行读写操作。

当 mCameraTexture.updateTexImage() ,从Camera中获取数据更新到Texture

OpenGL ES 2.0 的渲染器,根据这个TextureID做渲染

完了以后将OpenGl ES 2.0 中的数据移到Surface中 EGL14.eglSwapBuffers(mEGLDisplay, eglSurface)

2.2 录像输出到MediaCodec.Surface

大致流程跟

首先我们吧这个Surface打住,以便可以进行读写操作。

这里注意:我们不需要调用updateTexImage()

OpenGL ES 2.0 的渲染器,根据这个TextureID做渲染

交给MideaCodec做编码(这是一个异步操作)

添加一个时间轴

完了以后将OpenGl ES 2.0 中的数据移到Surface中

 

3.开始拍摄

3.1 初始化MediaCodec

3.2 将Surface和OpenGL ES 2.0绑定

1.2.2 Surface = MediaCodec.getInputSurface()

3.2 打开拍摄标记为,用以判断是否执行2.2

 

4.结束拍摄

4.1 MediaCode.stop()

转载于:https://www.cnblogs.com/jarvisyin/p/6486192.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值