2013-04-29 45 views
2

我正在開發媒體播放器,它應該能夠播放來自Internet的音頻。正如我注意到的,在播放遠程內容時,標準MediaPlayer是相當不穩定的:它經常掉落或停止播放,沒有任何理由。另一方面,我想實現媒體緩存。但我還沒有找到任何方法從MediaPlayer獲取緩衝內容以將其保存在設備的某個位置。播放媒體文件並在同一時間追加

所以,我想爲自己實施緩衝並使MediaPlayer只播放本地媒體。我看到的第一種方式是將足夠多的媒體下載到文件中,通過MediaPlayer開始播放此文件,並繼續下載其餘媒體(當沒有足夠的媒體下載並處理其他事件時暫停)。

問題是:可以播放文件並在同一時間追加它?現在我只叫MediaPlayersetDataSource

UPD

IllegalStateException被無效邏輯時引起有IllegalStateExceptions。 MediaPlayer正在播放。

但是另一個問題出現了。

因此,首先下載5%的音軌,MediaPlayer開始播放,播放這5%然後停止播放。這是一種繼續玩的方式嗎?

開始播放很簡單:

private void startPlayback(final File file) { 
    try { 
     FileInputStream fs = new FileInputStream(file); 
     mPlayer.setDataSource(fs.getFD()); 
     mPlayer.prepare(); 
     mPlayer.start(); 

    } catch (IOException e) { 
     Log.e(e); 
    } 
} 

可能存在這種情況下有用的其它流類型?

+0

是你在setDataSource方法之前發佈mediaplayer ....因爲文件處於下載模式,所以它可能已經被改變了......這就是爲什麼你得到IllegalstateException – 2013-04-29 08:35:09

+0

謝謝!這是應用程序邏輯問題。沒有發佈,但類似。現在還有另一個問題 – darja 2013-04-29 09:53:49

回答

0

在某些設備上同時附加和播放文件,不適用於其他設備。所以,這不是一個解決方案。我嘗試了很多方法來實現自己的緩衝和回放(請參閱Best practices for audio streaming),並決定使用JellyBean Media API(正如我爲JB設備開發的那樣)。對於JB之前的設備,這個問題仍然是開放的

+0

你能解釋一下如何在JB設備中實現這個功能,如果你已經實現了它? – Bedant 2017-01-20 11:55:33