2011-06-17 50 views
0

我打開一個連接,以便在寫入一些字節後將一個流下載到SD卡上的文件我開始MediaPlayer播放文件 我的問題是MediaPlayer讀取的只是Duratio計算的相位 準備MediaPlayer沒有更新文件持續時間

+0

你可以添加一些代碼來告訴我們它是如何工作的嗎?有時MediaPlayer是一個棘手的野獸,看到實際的代碼通常是有幫助的。謝謝! – Matt 2011-06-17 13:37:37

回答

0

這是正確的行爲。當您使用MediaPlayer播放本地文件時,MediaPlayer初始化時將掃描一次文件,並且不會開始進一步的掃描。 MediaPlayer不知道您會將更多數據附加到該文件。一種解決方案是使用MediaPlayer直接通過網絡傳輸文件。

+0

感謝您的回答 我將流下載到文件以便記錄它的某些部分。 有沒有辦法讓MediaPlayer更新文件的新的持續時間? Iphone播放器每秒更新持續時間 – hox 2011-06-17 13:49:48

0

我已經解決了這個問題,暫時在一個新的媒體播放器中打開相同的文件,獲得持續時間並再次發佈。爲了節省系統資源,只能定期進行,例如每隔5秒進行一次,並且只有在文件實際發生了變化時。

public boolean fileSizeHasChanged() { 
    long currentFileSize = new File(mCurrentMediaFile).length(); 
    if (currentFileSize == mLastFileSize) 
     return false; 
    mLastFileSize = currentFileSize; 
    return true; 
} 

public int getDuration() { 
    long currentDurationCheck = System.currentTimeMillis(); 
    if (currentDurationCheck - mLastDurationCheck < 5000) 
     return mDuration; 
    mLastDurationCheck = currentDurationCheck; 

    if (!fileSizeHasChanged()) 
     return mDuration; 

    // mp is the main media player actual playing, mp2 is the auxillary one 
    MediaPlayer mp2 = new MediaPlayer(); 
    try { 
     mp2.setDataSource(mCurrentMediaFile); 
     mp2.prepare(); 
     mDuration = mp2.getDuration(); 
     mp2.release(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return mDuration; 
}