2010-07-08 61 views
3

我想在Silverlight中創建一個自定義媒體播放器。我正在研究進度欄。我想要進度條顯示當前下載進度以及正在播放時的當前位置MediaElementSilverlight MediaElement進度

要做到這一點,我有一個進度條來顯示下載進度和一個重疊滑塊來顯示當前位置。

我設置爲兩個值,以百分比總分100

例如:

ProgressBar.Value = MediaElement.DownloadProgress; 
Slider.Value = (MediaElement.Position.TotalMilliseconds)/(MediaElement.NaturalDuration.TimeSpan.TotalMilliseconds); 

問題是Slider.Value變得比ProgressBar.Value大。這怎麼可能?我如何在比下載的位置更遠的位置播放視頻?

有關如何使它們正確同步的任何建議?

謝謝。

回答

4

這是可能的,因爲視頻流壓縮算法不會導致字節計數與時間成比例。以一個300MB的視頻文件爲例,運行時間爲60分鐘,但不會自動跟蹤,該文件的30分鐘就是150MB點。

如果視頻的第一部分相對「安靜」,則很可能壓縮得好,而較繁忙的部分可能壓縮得不好。因此,可能只下載了一小部分文件大小,但在整個播放時間中所佔的比例更大。

編輯

那麼,如何讓他們同步跟進?

通過將滑塊限制爲最小的下載進度或時間,可以實現它。

Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds/mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress); 
+0

哇。當你這樣想時,這很有道理。視頻的開頭幾乎全是黑色的,因此下載大量時間將不會花費任何時間。那麼如何讓他們同步呢? – Hunter 2010-07-09 17:55:24

+0

@Hunter:看我的編輯 – AnthonyWJones 2010-07-09 21:01:31