与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。现在官方文档已经相当详细了,不过都是英文的,对于阅读困难的人,国内也有人进行了翻译。地址在这里。
MediaMuxer 在Android4.3(API18)。可以合成MP4格式的视频,输入源通常为从MediaExtractor或者MediaCodec提供的已编码的数据。
MediaMetadataRetriever 主要用来获取视频的方向信息。在合成视频时,可纠正视频方向。此外还可以获取视频某一帧画面的bitmap,前提必须是android支持的视频格式。
MediaFormat 内部持有一个包含音视频帧信息的map。
GLSurfaceView 可与MediaPlayer配合,完成视频变换的各种效果实时预览。
OpenGL是一门单独的技术,然而关于其在Android中使用的文档和列子实在太少。唯一的一本书《OpenGL ES应用开发实践指南 Android卷》在网上也买不到,只能去淘宝买复印版。。。