從Android 2.0,Google引進(jìn)了Stagefright,并在android2.3使用,Stagefright在Android中是以shared library的形式存在(libstagefright.so),其中AwesomePlayer可用來(lái)播放video/audio。AwesomePlayer提供許多API,可以讓上層的應(yīng)用用程式(Java/JNI)來(lái)呼叫,我在這里簡(jiǎn)單說(shuō)明一下video playback的流程(采用的是android2.2的源碼)。
在Android多媒體之MediaPlayer框架分析這篇博客中,提到了MediaPlayer核心功能是由mediaserver進(jìn)程中具體的播放器引擎完成的,而播放器引擎在不同的android版本上有很大的變化,變化的趨勢(shì)是從早期的OpenCore到StagefrightPlayer再到最新的NuPlayer。那么MediaPlayer核心功能到底是什么呢?MediaPlayer說(shuō)白了就是一個(gè)媒體播放器,而媒體播放器的核心功能就是播放音視頻,流程一般是從數(shù)據(jù)源(比如本地文件)獲取數(shù)據(jù),一般獲取到的數(shù)據(jù)是編碼壓縮后的數(shù)據(jù),所以會(huì)先解碼還原為原始的數(shù)據(jù),視頻一般就還原為YUV格式的,音頻則還原為PCM格式的,然后分別送到顯示設(shè)備和音頻輸出設(shè)備播放,下面是一張網(wǎng)上找的說(shuō)明播放器流程的圖,其實(shí)不管是什么播放器,都是一樣的原理,差異只是在具體實(shí)現(xiàn)上有所不同罷了。