2013-03-08 45 views
4

默認情況下,我需要知道MediaPlayer在通過漸進式下載「流式傳輸」時緩存音頻/視頻內容的位置/方式。Android MediaPlayer緩存漸進式下載地址/方式

我們正在評估Android媒體播放器應用的選項。一個值得關注的問題是防止內容被複制(儘可能)。漸進式下載有很多好處,但我們需要確保我們正在採取合理措施來保護媒體。我必須在錯誤的地方做錯誤的搜索,因爲我一直沒有找到任何細節。我搜索了我們的測試設備的文件系統,試圖從我們的測試累進式下載應用程序中找到任何緩存的文件 - 無濟於事(這對我們的目的來說可能是很好的)。

回答

5

在Android中,MediaPlayer是抽象底層播放器引擎的頂級類。在MediaPlayer,整體的處理分爲三個主要部分組成的

MediaTrack ==> OMXCodec/ACodec ==> Sink 

哪裏MediaTrack是基於出的MediaExtractor這是分析器引擎的軌道具體實施。

MediaExtractor用抽象輸入源的DataSource初始化。對於漸進式下載,DataSource的實現將是主要關注點,因爲這將爲下游組件提供緩衝區。由於Android平臺在模型上工作,DataSource將控制提供數據的速率。

在AOSP中,您可以參考http://androidxref.com/4.2.2_r1/xref/frameworks/base/media/java/android/media/MediaPlayer.java#2132中的示例實現。有關HTTPSource實施的更多信息可參考http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/HTTPBase.cpp#47

+0

非常感謝您的回答。它在一些有益的方向上明確指出了我。我在調試器中瀏覽了MediaPlayer代碼,嘗試深入瞭解DataSource實現。不幸的是,當MediaPlayer最終調用[setDataSource]的本地版本時,我遇到了一個死衚衕(http://androidxref.com/4.2.2_r1/xref/frameworks/base/media/java/android/media/MediaPlayer.java# 962) – 2013-03-08 18:24:53

+1

來自JNI ie'android_media_mediaplayer',這些調用通常在'MediaPlayer.cpp'中出現。從'MediaPlayer.cpp'中,'player-> setDataSource'的調用通常由可以是'StagefrightPlayer'或'NuPlayer'的播放器引擎來實現。在流媒體播放的情況下,調用將由'NuPlayer'處理。 – Ganesh 2013-03-08 22:25:32

+0

再次感謝。不幸的是,我一直無法在NuPlayer或StagefrightPlayer上找到任何文檔。如果我有時間建立一個Linux dev設備並梳理ASOP代碼,我會的。但是,不幸的是,我沒有。 我在簡潔的手機上放了一個簡單的媒體應用程序,通過漸進式下載流式播放mp3,然後通過DDMS對文件系統進行了非常詳盡的搜索。我發現沒有可識別或可檢索的音頻副本。這使我得出這樣的結論:玩家要麼緩存在內存中,要麼以某種嚴重混淆的方式緩存到文件系統。這可能已經足夠了。 – 2013-03-11 20:23:42