MediaRecorder示例:
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(mContext, mUri, mHeaders);
mMediaPlayer.setDisplay(mSurfaceHolder);
mMediaPlayer.prepareAsync();
示例代码简单介绍了一下MediaRecorder和MediaRecorder的API,参考上面提供的demo已经可以实现简单的播放器和音视频录制功能了.上面我们又引出两个接口来:Camera, Surface. 拍照等功能我们都可以使用Camera的接口实现,关于Camera的API可以参考google的demo:github.com/googlearchi… Surface我们接下来介绍.
1.3 进阶版本
上面的的MediaRecorder,MediaPlayer直接封装了图中的蓝色部分与绿色部分.它们将输入编码复用以及解码解复用输出封装到了一起,可定制性差: 1.MediaPlayer只支持固定的编码和封装,不支持rtmp等 2.MediaRecorder无法支持mp3,opus, ogg等编码,无法对采集到音视频做预处理(比如变声,美颜等)
基于上述几个原因,我们再认识几个API:
- 视频采集 Camera
- 音频采集 AudioRecorder
- 视频预处理:SurfaceTexture, Surface, EGL ,GLES10
- 音视频编码 MediaCodec MediaFormat
- 音视频封装(复用) MediaMuxer
- 音视频(解复用) MediaExtractor
- 音视频解码 MediaCodec
- 视频预览 SurfaceView, GLSurfaceView, TextureView
- 音频播放 AudioTrack
上述API Android也为我们提供了示例https://github.com/google/grafika,里面包含的示例相当全面:
- Play video (TextureView). 基于MediaCodec ,MediaExtractor, TextureView封装的播放器,可以帮助理解这几个api.
- Continuous capture. 基于Camera,GLES20,SurfaceTexture,SurfaceView,MediaCodec实现的建议的视频录制器.
- Double decode. 类似于Play video示例,只是解码两路视频渲染到TextureView.
- Hardware scaler exerciser. 演示OpenGL进行画面缩放
- Live camera (TextureView). 演示Camera,SurfaceTexture以及TextureView使用
- Multi-surface test. 演示三路视频渲染
- Play video (SurfaceView). 类似于Play video (TextureView),只是输出从TextureView变成了SurfaceView.
- Record GL app. 基于FBO同时将摄像头采集数据输出到编码器和屏幕,FBO是实时美颜的关键技术.
- Record Screen using MediaProjectionManager.基于MediaProjectionManager将屏幕内容录制成文件.之前我们的输入都是摄像头,Android5.0开始提供了MediaProjectionManager,可以对屏幕内容进行采集.
- Scheduled swap. 了解一个新伙伴Choreographer
- Show + capture camera. 摄像头同时输出到文件和屏幕(与"RecordFBOActivity"输出对象变成了GLSurfaceView)
- Simple Canvas in TextureView. 一般的我们把基于OpenGL的渲染称为"硬"渲染,基于Canvas的称为"软&