2010-07-08 4 views
3

Я пытаюсь создать пользовательский медиаплеер в Silverlight. Я работаю над Progress Bar. Я хочу, чтобы индикатор выполнения отображал текущую текущую загрузку, а также текущую позицию MediaElement во время ее воспроизведения.Прогресс Silverlight MediaElement

Для этого у меня есть индикатор выполнения, чтобы отобразить ход загрузки и наложенный ползунок, чтобы отобразить текущую позицию.

я установить значение как в процентах из 100.

Например:

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

Проблема заключается в Slider.Value становится больше, чем ProgressBar.Value. Как это возможно? Как я могу воспроизводить видео на более удаленной позиции, чем то, что было загружено?

Любые советы о том, как их синхронизировать правильно?

Спасибо.

ответ

4

Это возможно, потому что алгоритмы сжатия видеопотока не приводят к тому, что количество байтов пропорционально времени. Возьмем, к примеру, 300-мегабайтный видеофайл, который работает, скажем, за 60 минут, что автоматически не следует, что за 30 минут в файл будет то, что точка 150 МБ.

Если первая часть видео относительно «тихая», вероятно, она будет хорошо сжиматься, тогда как более занятые секции позже могут не так хорошо сжиматься. В результате можно загрузить только небольшой процент от размера файла и, тем не менее, сыграть большую часть своего общего игрового времени.

Edit:

Так как же я могу их синхронизировать?

Вы подталкиваете его, ограничивая ползунок минимумом как прогресса загрузки, так и времени.

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

Wow. Это имеет смысл, когда вы об этом думаете. Начало видео в значительной степени черное, поэтому потребуется некоторое время, чтобы загрузить значительное количество времени. Итак, как мне их синхронизировать? – Hunter

+0

@Hunter: см. Мое редактирование – AnthonyWJones