3

我正在尝试在 Silverlight 中创建自定义媒体播放器。我正在处理进度条。我希望进度条显示当前的下载进度以及MediaElement播放时的当前位置。

为此,我有一个进度条来显示下载进度,并有一个叠加的滑块来显示当前位置。

我将两者的值设置为 100 的百分比。

例如:

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

问题是 Slider.Value 变得大于 ProgressBar.Value。这怎么可能?如何在比已下载位置更远的位置播放视频?

关于如何让这些正确同步的任何建议?

谢谢。

4

1 回答 1

4

这是可能的,因为视频流压缩算法不会导致字节数与时间成正比。以运行 60 分钟的 300MB 视频文件为例,它不会自动跟随 30 分钟进入文件将是 150MB 点。

如果视频的第一部分相对“安静”,它可能会很好地压缩,而后面更繁忙的部分可能不会压缩得那么好。因此,可能只下载了文件大小的一小部分,但播放了其整体播放时间的较大比例。

编辑

那么如何让它们同步呢?

您可以通过将滑块限制为下载进度或时间的最小值来捏造它。

Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds / mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress);
于 2010-07-08T21:30:12.267 回答