Android多媒体开发笔记【4】-- 上层mediaPlayer 是如何调到Stagefright的【2】【图解】
基于android 4.1.1 源码
【1】mediaserver 启动后会把media相关一些服务添加到servicemanager中,其中就有mediaPlayerService.这样应用启动前,系统就有了mediaPlayerService这个服务程序。
new MediaPlayer(); 调用SDK中 MediaPlayer.java (frameworks\base\media\java\android\media\MediaPlayer.java)static sp<MediaPlayerBase> createPlayer(player_type playerType, void* cookie, notify_callback_f notifyFunc){ sp<MediaPlayerBase> p; switch (playerType) { case SONIVOX_PLAYER: ALOGV(" create MidiFile"); p = new MidiFile(); break; case STAGEFRIGHT_PLAYER: ALOGV(" create StagefrightPlayer"); p = new StagefrightPlayer; break; case NU_PLAYER: ALOGV(" create NuPlayer"); p = new NuPlayerDriver; break; case TEST_PLAYER: ALOGV("Create Test Player stub"); p = new TestPlayerStub(); break; case AAH_RX_PLAYER: ALOGV(" create A@H RX Player"); p = createAAH_RXPlayer(); break; case AAH_TX_PLAYER: ALOGV(" create A@H TX Player"); p = createAAH_TXPlayer(); break; default: ALOGE("Unknown player type: %d", playerType); return NULL; } if (p != NULL) { if (p->initCheck() == NO_ERROR) { p->setNotifyCallback(cookie, notifyFunc); } else { p.clear(); } } if (p == NULL) { ALOGE("Failed to create player object"); } return p;}在上面中已经看不到opencore的影子了,creaPlayer 中会根据类型来创建播放器的实例。Stagefright的实例就是在这里创建的。
下一步我们能真正进入到Stagefright里了