[java]
mediaPlayer=new MediaPlayer();
mediaPlayer.setDataSource(path);
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.prepare();
mediaPlayer.start();
不用考慮檔案來源、協議、檔案容器格式、檔案音視頻格式等等有關技術,只需遵循SDK介面規範簡單幾步就能把視頻播出來。這也是android這個軟體棧所要達到的目的。但是真正的播放器功能實現是在frameworks層,主要是Stagefright。
在我們研究Stagefright之前,有個問題需要解決:上層mediaPlayer 是如何調到Stagefright的?
先來張android的架構圖,android的分層結構還是很清晰的。但是上層的java程式是不是順序的一層一層調到media framework的呢?,如果按照傳統的這種思想看代碼的話你的腦袋都會看大。所以這裡要先稍稍解釋一下android的靈魂 binder,理解了binder 就成功了一半。
android的靈魂binder
binder是android 系統下的一種IPC機制。是進程間互動的一種方式。在開發android應用時,腦袋一定要一直保持C/S結構的思想。
android應用的開發說白了就是通過android提供的一系列的服務來完成自己的目的,咱們剛才也的那個播放器的apk也是需要android提供的播放器的服務來完成的。
apk是一個獨立的進程,android的系統服務也是很多個獨立的進程。binder的功能就是把client 和 service 串連起來。
來張簡圖
在你我開發應用之前,android已 經為我們提供了很多種service服務。包括mediaplayerser 這種視頻播放的服務,所以我們開發應用就會很簡單,只需申請這些服務就行。
如果把這些服務看成是姑娘們,當然需要一個嬤嬤來管理這些姑娘,因為在你沒給錢之前嬤嬤不會讓你和姑娘見面,為你服務。
這個嬤嬤就是Service Manager,Service Manager這個嬤嬤手中有個姑娘的表,新來的姑娘都會先來這裡登記一下姓名和住址資訊。
這個時候你(client)來了,你需要一個擅長播放的姑娘為你服務。你需要先聯絡嬤嬤,嬤嬤會根據你的需求查表來找到這個播放的姑娘,接下來這個姑娘就為你服務了。
binder 機制支援了這些人之間的互動通訊 工作。可見binder是一個非常基礎的組件。