Android中真正的Player


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等。

 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com