本文首发地址 https://blog.youkuaiyun.com/CSqingchen/article/details/105492716
最新更新地址 https://gitee.com/chenjim/chenjimblog
源码地址: Gitee: OpenGLRecorder
简单的音视频录制,我们可以使用 MediaRecorder ,具体示例可以参考 Gitee: Camera2Video。本文将介绍采集 Camera 的预览数据,然后通过 OpenGL 添加水印、贴纸、美颜滤镜等后渲染到 GLSurfaceView ,再用 MediaCodec 硬编码后通过 MediaMuxer 写入 MP4 文件。
大致流程如下,详细可以参见相应代码连接
- CameraGlView 用来显示Camera预览的View
CameraGlView extends GLSurfaceView
- 创建SurfaceTexture,用来显示Camera预览,参见 CameraRenderer.java
mSurfaceTexture = new SurfaceTexture(mTextures[0]); mCameraHelper.startPreview(mSurfaceTexture);
- CameraFilter.java,通过 OpenGL 将 Camera 数据写入 FBO(Frame Buffer Object 帧缓存)
- TimeFilter.java,通过 OpenGL 在 FBO 上添加时间水印。可以参考此处添加贴纸、美颜等。
- ScreenFilter.java,将 FBO 绘制到 mSurfaceTexture
- MediaRecorder.java,用 MediaCodec 和 EGL 对 Surface 的内容采集编码为 avc 并写入到 MP4 文件
可以总结为下图所示
参考文章:
- OpenGL ES SDK for Android: High Quality Text Rendering
- Github:opengl-es-sdk-for-android/HighQualityTextJava
- Github:android-openGL-canvas
- Github:Media for Mobile is a set of easy to use components and API for a wide range of media scenarios such as video editing and capturing
- VideoRecorder高性能任意尺寸视频录制 断点录制 离屏录制 录制时的Canvas API支持 实时滤镜,相关资料介绍Link
- 抖音录制视频预习资料