OpenGL ES:视频加滤镜后导出

视频加滤镜播放:

MediaCodec解码——>OpenGL es——> GLSurfaceView

在这里插入图片描述

视频滤镜合成导出:
MediaCodec解码——>OpenGL es——> MediaCodec编码
MediaCodec解码——>outputSurface——>OpenGL es——>inputSurface——>MediaCodec编码

大体来说就是OpenGL渲染后的输出不一样,需要使用编码器编码保存到本地,由于OpenGL ES并不负责窗口管理以及上下文管理,该职责由各个平台自行完成,没有了GLSurfaceView为我们创建的上下文环境,因此我们需要使用相关的API初始化OpenGL的上下文环境以支持后续的操作。

主要流程还是上图所示,该功能的实现,需要对整体的流程有一定的了解同时也需要掌握MediaCodec的使用以及需要注意一些坑,否则可能会导致视频无法播放。

注意:

  1. MediaMuxer写完数据需要手动停止并释放资源,否则写的视频文件没有文件尾会导致不能播放。同理解码器和编码器在用完以后也需要释放。
  2. 一个线程对应一个OpenGL es 上下文,因此我们需要初始化俩个上下文环境,一个用于OpenGL着色器、顶点数据等渲染配置的初始化,一个用于在编解码线程中渲染。编解码线程中的上下文需要设置与OpenGL的初始化的线程共享上下文资源,包括纹理、FrameBuffer以及其他的Buffer等资源。
  3. 渲染一次完成后,需要切换一次egl的frame buffer,EGL的工作模式是双缓存模式,内部拥有俩个frame buffer(fb),当EGL将一个fb渲染到屏幕上的时候,另一个就在后台等待OpenGL进行交换。
	EGL14.eglSwapBuffers(mEglDisplay, mEglSurfaceEncoder);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值