1. 在前面的介紹中,從Java到MediaPlayer---Binder---MediaPlayerService::Client已經講清楚了。可是,在MediaPlayerService::Client <MediaPlayerService::create-> new Client / MediaPlayerService::Client::setDataSource->getPlayerType/createPlayer->android::createPlayer>中調用android::createPlayer之後,並把新建立的真正的Player儲存到MediaPlayerService::Client中的mPlayer之後就沒有下文了。
2. 真正的Player到底是什麼樣的?
根據本人的瞭解,有PVPlayer, StagefrightPlayer,MidiFile,VorbisPlayer,每個Player處理不同的媒體類型,他們通過getPlayerType(const char* url)的傳回值進行分工完成。每個Player都有自己的特長,並做自己善於做的事情。詳細分工情況見代碼:sp<MediaPlayerBase> createPlayer(player_type
playerType, void* cookie,
notify_callback_f notifyFunc)函數。
3. 如果要在自己的晶片上實現硬體Demux和硬體Decoder(如對於機頂盒中的TS流),怎麼辦呢?
據本人瞭解,有兩種辦法:
1)基於MediaPlayerInterface介面,實現其中所有的介面函數,自已建立一個XXPlayer,並增加到android::createPlayer中。每個介面函數的具體實現就與以前在Linux環境下實現的方式一樣,簡單吧,以前的成果都可以用上了。
2)在現在的Player(如StagefrightPlayer)中寫Extractor和Decoder外掛程式。
為了實現第二種方案,需要先瞭解StagefrightPlayer的架構。為什麼兩種方案都需要瞭解呢,因為怎麼做,取決於你的首席架構師或CTO等。