与 iOS 中强大的 AVFoundation 框架相比,Android framework 中提供的有关多媒体处理的类可谓屈指可数,但总比没有好吧。今天我们就来谈谈这几个类。
这里提到的多媒体处理主要是指音视频处理。包括音视频的裁剪、合并;视频画面的各种变换,旋转、缩放、翻转;视频滤镜;音视频的播放,快速、慢速、倒序播放等等。
主要涉及到的类有:
- MediaExtractor:媒体提取器
- MediaCodec:编解码器
- MediaMuxer:媒体混合器
- MediaMetadataRetriever: 获取音视频信息的类
- MediaFormat: 包含音视频帧信息的类
- GLSurfaceView: 展示 openGL 渲染的 View
- OpenGL 相关的类
MediaExtractor 在 Android4.1(API16)加入。可以从一段音视频中提取出一帧一帧的数据,与 MediaMuxer 配合使用可以完成视频的裁剪和合并,与 MediaCodec、GLSurfaceView 配合使用可以完成视频的播放。
MediaCodec 在 Android4.1(API16)加入。在 Android4.3(API18)提供输入可以为 Surface。在 Android5.0(API21)又增加了异步处理模式。它是一个低等级的媒体编解码器,可以作为编码器,也可以作为解码器。 可攻可受,嘿嘿嘿。是音视频处理中最为核心的类。
由于相关文档在以前不是很完善,来自 Android 媒体团队的 fadden(现已不在)维护了一个网站 http://bigflake.com/mediacodec/ 。上面有大量的相关资源。此外在 stackoverflow 上面只要是 MeidaCodec 相关的问题随处可见 fadden 的身影。感谢 fadden。现在官方文档已经相当详细了,不过都是英文的,对于阅读困难的人,国内也有人进行了翻译。地址在[这里](http://www.cnblogs.com/xiaoshubao/archive/2016/04/11/5368183.html) 。
MediaMuxer 在 Android4.3(API18)。可以合成 MP4 格式的视频,输入源通常为从 MediaExtractor 或者 MediaCodec 提供的已编码的数据。
MediaMetadataRetriever 主要用来获取视频的方向信息。在合成视频时,可纠正视频方向。此外还可以获取视频某一帧画面的 bitmap,前提必须是 android 支持的视频格式。
MediaFormat 内部持有一个包含音视频帧信息的 map。
GLSurfaceView 可与 MediaPlayer 配合,完成视频变换的各种效果实时预览。
OpenGL 是一门单独的技术,然而关于其在 Android 中使用的文档和列子实在太少。唯一的一本书《OpenGL ES 应用开发实践指南 Android 卷》在网上也买不到,只能去淘宝买复印版。。。