仿微信相机拍摄预览 MediaCodec硬编解码

字数 424阅读 555

尝试利用Android仿照微信相机完成一个拍摄录制短视频的功能:

  1. 利用Android camera 和 SurfaceView实时预览
  2. 手动对焦、自动对焦、拍摄预览照片
  3. 利用MediaCodec 硬编码成H264视频数据
  4. 使用AudioRecord 录制音频数据
  5. 利用MediaMuxer 混合AAC和H264打包成MP4文件
  6. 利用MediaExtractor 分离MP4和MediaCodec硬解码、TextureView播放视频数据

网上也有很多仿微信相机的应用,不过基本上是使用 MediaRecord 录制视频,相对比较简单。与他们不同的是,这里我更想学习整个 MP4 的录制流程,从采集、编码、封包成 MP4 到解析、解码、播放,这更能够加深对音视频的理解和后续的学习。

附带的源码,具体的源码分析可以看《仿微信相机 利用 MediaCodec API 从录制 MP4 到解析播放》

最后完成的效果如下:


image.png

存在很多不足,主要是学习使用,并且在github上不同的分支有实现不同的功能,如利用opengl增加水印等。


增加水印.png

这部分是在以上的基础上进行修改的:

  1. 利用GLSurfaceView进行预览
  2. 增加FBO将外部纹理绘制成普通纹理,以及blend混合增加水印绘制层,同时可以控制到预览层还是录制层
  3. 借助GLSurfaceView的EGL环境,共享EGLContext、和MediaCodec创建输出的Surface结合,将GLSurfaceView的纹理,绘制到MediaCodec创建的Surface中,实现录制视频功能

OpenGLES mediaCodec 预览录制视频 添加水印

推荐阅读更多精彩内容