Stagefright框架是Android 2.3正式引入的多媒體框架,其在Android 2.0中就已經(jīng)添加到Android的代碼庫(kù)中。Stagefright框架的引入對(duì)上層應(yīng)用沒(méi)有影響,其接口在原生的多媒體服務(wù)中引入。
static sp< MediaPlayerBase> createPlayer(player_type playerType, void* cookie,notify_callback_f notifyFunc)
{
……
case STAGEFRIGHT_PLAYER:
LOGV("create StagefrightPlayer");
p = new StagefrightPlayer;
break;
……
}
Stagefright框架和OpenCORE框架切換非常簡(jiǎn)單,目前Stagefright已經(jīng)成為默認(rèn)的媒體播放器。
static player_type getDefaultPlayerType()
{
return STAGEFRIGHT_PLAYER;
}
Stagefright框架并沒(méi)有完全拋棄openCORE框架的內(nèi)容,而是封裝了一個(gè)OMX層用于引用openCORE的OMX組件部分。
Stagefright框架本身同樣比較復(fù)雜,下面分播放框架和記錄框架兩部分進(jìn)行簡(jiǎn)要說(shuō)明。
1.播放框架
Stagefright的播放主要是圍繞著AwesomePlayer進(jìn)行的, Stagefright播放框架的類(lèi)圖如圖1-1所示。

圖1-1 Stagefright播放框架的類(lèi)圖
在Stagefright播放框架中,AwesomePlayer是重要的一個(gè)類(lèi),如果支持硬件視頻渲染,則需要對(duì)VideoRenderer進(jìn)行實(shí)現(xiàn),在Qualcomm平臺(tái)上,相應(yīng)的類(lèi)為QComHardwareRenderer。如果不支持硬件視頻渲染,系統(tǒng)將采取軟件渲染的方式,相應(yīng)的渲染類(lèi)為SoftwareRenderer。當(dāng)然軟件渲染會(huì)會(huì)造成系統(tǒng)性能的下降。也不支持高清視頻。
解析器的封裝是通過(guò)MediaExtractor類(lèi)進(jìn)行的,對(duì)于不同的多媒體格式,針對(duì)MediaExtractor進(jìn)行實(shí)現(xiàn)即可,目前Stagefright支持的媒體播放格式包括WAV、OGG、MP4、AMR、MP3等。
AwesomePlayer通過(guò)AwesomeEvent事件來(lái)驅(qū)動(dòng)整個(gè)播放過(guò)程。
具體的解碼過(guò)程通過(guò)OMXCodec根據(jù)文件格式調(diào)用不同的解碼器進(jìn)行解碼,Stagefright播放框架提供的解碼器包括AMRNBDecoder、AMRWBDecoder、AACDecoder、AVCDecoder、G711Decoder、M4vH263Decoder、VorbisDecoder、VPXDecoder等。
2.記錄框架
在Stagefright記錄框架中,StagefrightRecorder是重要的一個(gè)類(lèi)。Stagefright記錄框架的類(lèi)圖如圖1-2所示。

圖1-22 Stagefright記錄框架的類(lèi)圖
Stagefright記錄框架的音頻數(shù)據(jù)源通過(guò)AudioSource配置,視頻數(shù)據(jù)源通過(guò)CameraSource配置。針對(duì)不同多媒體格式的記錄過(guò)程,Stagefright記錄框架提供了AMRWriter、MPEG2TSWriter、MPEG4Writer等類(lèi)進(jìn)行支持。
具體的編碼過(guò)程通過(guò)OMXCodec根據(jù)文件格式調(diào)用不同的編碼器進(jìn)行編碼,Stagefright記錄框架提供的編碼器包括AMRNBEncoder、AMRWBEncoder、AACEncoder、AVCEncoder、M4vH263Encoder等。