MediaRecorder
MediaCodec
MediaMuxer
MediaPlayer
ExoPlayer
MediaRecorder
音频或视频录制
MediaRecorder实现视频采集优缺点
优点: 使用方便,得到就是编码和封装好的音视频文件,可以直接使用。
缺点: 无法获取原始数据,从而无法对原始数据添加一些自己的处理。
MediaPlayer是使用Surface进行视频的展示的。
MediaPlayer只支持mp4、avi、3gp格式的视频,支持格式相对单一。
MediaPlayer可以播放网络视频,支持的网络视频的协议为:Http协议和RTSP协议两种。
start()之前用prepareAsync()装载视频 MediaPlayer.setOnPreparedListener() 避免装载超时引发ANR
使用prepare()同步的方式装载资源,可能会造成UI界面的卡顿
MediaMuxer
最多仅支持一个视频track和一个音频track
MediaCodec硬编码
我们最最常见的视频软解码开源库就是FFmpeg
硬解码效率非常高,这样不但能够减轻CPU的负担,还有着低功耗,发热少等特点。
但是,由于硬解码起步比较晚,软件和驱动对他的支持度很低,往往会出现兼容性不好的问题。
此外,硬解码的滤镜、字幕、画质方面都做的不够理想。
软解码需要对大量的视频信息进行运算,所以对CPU处理性能的要求非常高。巨大的运算量就会造成转换效率低,发热量高等问题。
不过,软解码不需要过多的硬件支持,兼容性非常高。而且软解码拥有丰富的滤镜,字幕,画面处理优化等效果,只有你CPU够强悍,就能够实现更加出色的画面效果。
Media 其他扩展
MediaMetadataRetriever:用来获取视频的相关信息,例如视频宽高、时长、旋转角度、码率等等。
MediaExtractor::视音频分离器,将一些格式的视频分离出视频轨道和音频轨道。
MediaCodec:视音频相应的编解码类。
MediaMuxer:视音频合成器,将视频和音频合成相应的格式。
MediaFormat:视音频相应的格式信息。
MediaCodec.BufferInfo:存放ByteBuffer相应信息的类。
MediaCrypto:视音频加密解密处理的类。
MediaCodecInfo:视音频编解码相关信息的类。
MediaFormat和MediaCodec.BufferInfo是串起上面几个类的桥梁,上面几个视音频处理的类通过这两个桥梁建立起联系,
从而变化出相应的功能,认真分析的话会感觉到Google设计的精妙。以下一一介绍各种类的使用