尝试利用Android仿照微信相机完成一个拍摄录制短视频的功能:
- 利用Android camera 和 SurfaceView实时预览
- 手动对焦、自动对焦、拍摄预览照片
- 利用MediaCodec 硬编码成H264视频数据
- 使用AudioRecord 录制音频数据
- 利用MediaMuxer 混合AAC和H264打包成MP4文件
- 利用MediaExtractor 分离MP4和MediaCodec硬解码、TextureView播放视频数据
网上也有很多仿微信相机的应用,不过基本上是使用 MediaRecord 录制视频,相对比较简单。与他们不同的是,这里我更想学习整个 MP4 的录制流程,从采集、编码、封包成 MP4 到解析、解码、播放,这更能够加深对音视频的理解和后续的学习。
附带的源码,具体的源码分析可以看《仿微信相机 利用 MediaCodec API 从录制 MP4 到解析播放》
最后完成的效果如下:
image.png
存在很多不足,主要是学习使用,并且在github上不同的分支有实现不同的功能,如利用opengl增加水印等。
增加水印.png
这部分是在以上的基础上进行修改的:
- 利用GLSurfaceView进行预览
- 增加FBO将外部纹理绘制成普通纹理,以及blend混合增加水印绘制层,同时可以控制到预览层还是录制层
- 借助GLSurfaceView的EGL环境,共享EGLContext、和MediaCodec创建输出的Surface结合,将GLSurfaceView的纹理,绘制到MediaCodec创建的Surface中,实现录制视频功能
网友评论