2011-12-02 30 views
0

我在Honeycomb上使用MediaPlayer,並且無法獲取函數onPrepared()中的任何HLS(http實況流)視頻的持續時間。Android MediaPlayer:getDuration()在prepare()後返回0

如果getDuration()prepare()後調用,則返回0:

public void onPrepared(MediaPlayer mp) { 
    // getduration returns 0 
    mediaPlayer.start(); 
    Log.d(TAG, "duration: " + mediaPlayer.getDuration()); 
} 

然而,視頻開始播放。

如果getDuration()被稱爲onVideoSizeChanged()它返回正確的值,

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
    // returns the correct value 
    Log.d(TAG, "duration: " + mediaPlayer.getDuration()); 
} 

爲什麼在onVideoSizeChanged()但不是在onPrepared()getDuration()工作?

編輯:起初我以爲getDuration()完​​全不起作用,但發現它在onVideoSizeChanged()中返回正確的值。修改問題以反映這一點。

回答

1

對此,您無能爲力。直到流被讀取時,流詳細信息纔會知道。根據格式的不同,流前端可能會有正確的信息,提示或沒有提示。

由於總是調用視頻大小更改偵聽器,因此必須重構代碼以獲取持續時間(如果可用)。

(即使這是一個錯誤,即使它是固定的,這樣的修復也不會如此你被卡住當前的行爲部署到數以百萬計的現有設備。)

+0

感謝您的幫助的解釋! – jules

+0

如果在一個線程中調用mp.getDuration()會發生什麼,該線程每100ms調用一次?我認爲這個函數返回的時間不是零,而是不正確。爲什麼? – phongvan