从Android 2.0,Google引进了Stagefright,并在android2.3使用,Stagefright在Android中是以shared library的形式存在(libstagefright.so),其中AwesomePlayer可用來播放video/audio。AwesomePlayer提供許多API,可以让上层的应用用程式(Java/JNI)來呼叫,我在这里简单说明一下video playback的流程(采用的是android2.2的源码)。
在Android多媒体之MediaPlayer框架分析这篇博客中,提到了MediaPlayer核心功能是由mediaserver进程中具体的播放器引擎完成的,而播放器引擎在不同的android版本上有很大的变化,变化的趋势是从早期的OpenCore到StagefrightPlayer再到最新的NuPlayer。那么MediaPlayer核心功能到底是什么呢?MediaPlayer说白了就是一个媒体播放器,而媒体播放器的核心功能就是播放音视频,流程一般是从数据源(比如本地文件)获取数据,一般获取到的数据是编码压缩后的数据,所以会先解码还原为原始的数据,视频一般就还原为YUV格式的,音频则还原为PCM格式的,然后分别送到显示设备和音频输出设备播放,下面是一张网上找的说明播放器流程的图,其实不管是什么播放器,都是一样的原理,差异只是在具体实现上有所不同罢了。