Silverlight MediaElement 进度

3
我正在尝试在Silverlight中创建一个自定义媒体播放器。我正在处理进度条。我希望进度条能够显示当前下载进度以及MediaElement的当前播放位置。
为了实现这一点,我有一个进度条来显示下载进度,并有一个叠加的滑块来显示当前位置。
我将两者的值都设置为100的百分比。
例如:
ProgressBar.Value = MediaElement.DownloadProgress;
Slider.Value = (MediaElement.Position.TotalMilliseconds) / (MediaElement.NaturalDuration.TimeSpan.TotalMilliseconds);

问题是Slider.Value的值变得比ProgressBar.Value的值更大。这怎么可能?我怎么可以在已下载的视频位置之外播放视频?

有什么建议可以正确地使它们同步吗?

谢谢。

1个回答

4
由于视频流压缩算法不会导致字节计数与时间成比例,因此这是可能的。例如,一个运行60分钟的300MB视频文件并不意味着在文件的30分钟处就是150MB点。
如果视频的前部分相对“安静”,那么它很可能会压缩得很好,而后面更繁忙的部分可能无法很好地压缩。因此,你可能只下载了文件大小的一小部分,但已经播放了其整体播放时间的较大部分。
编辑:
那么我该如何让它们同步?通过将滑块限制为下载进度或时间的最小值来进行调整。
Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds / mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress);

哇,这样想起来就非常有道理。视频的开头几乎全是黑色,因此下载大量时间不需要太长时间。那么我该如何让它们同步? - Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接