我正在尝试在Silverlight中创建自定义媒体播放器。我正在进步吧。我希望进度条显示当前的下载进度以及MediaElement
正在播放时的当前位置。
要做到这一点,我有一个进度条显示下载进度,并有一个滑块覆盖显示当前位置。
我将两者的值设置为100的百分比。
例如:
ProgressBar.Value = MediaElement.DownloadProgress;
Slider.Value = (MediaElement.Position.TotalMilliseconds) / (MediaElement.NaturalDuration.TimeSpan.TotalMilliseconds);
问题是Slider.Value变得比ProgressBar.Value大。这怎么可能?如何在比下载的位置更远的位置播放视频?
有关如何正确同步的任何建议吗?
感谢。
答案 0 :(得分:4)
这是可能的,因为视频流压缩算法不会导致与时间成比例的字节计数。例如,一个运行60分钟的300MB视频文件不会自动跟踪文件中的30分钟将是150MB点。
如果视频的第一部分相对“安静”,它可能会很好地压缩,而较忙的部分可能不会压缩得那么好。因此,它可以只下载文件大小的一小部分,但在整个播放时间中占了更大比例。
修改强>:
那么如何让它们同步?
通过将滑块限制为下载进度或时间的最小值来捏造它。
Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds / mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress);