Android中Media Framework淺析(二)——MediaServer

MediaServer是整個android中media部分的核心和靈魂。幾乎所有與多媒體播放相關的內容都放在這裏。包括了音視頻的編解碼以及顯示輸出。MediaServer的main函數位於frameworks/base/media/mediaserver/main_mediaserver.cpp中。函數非常簡單:

int main(int argc, char** argv)
{

//獲得service manager的代理供IPC使用。

    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm = defaultServiceManager();
    LOGI("ServiceManager: %p", sm.get());

    AudioFlinger::instantiate();
    MediaPlayerService::instantiate();
    CameraService::instantiate();
    AudioPolicyService::instantiate();

//循環處理binder所送過來的消息。

    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

   Mediaserver作爲一個service,需要向其他的模塊提供各種服務,因此main函數的開頭和結尾與其他的service並無其他的區別,這裏不具體介紹。如果這裏有疑惑請參閱其他關於binder方面的文章。

   而中間的四句話也非常好理解,所有的::instantiate()函數都是static型函數,並,分別是創建各個子模塊的對象實例。由此可看出media server service共分4個子模塊:AudioFlinger, MediaPlayerService,CameraService, AudioPolicyService。 下面我們分別來具體分析這四個子模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章