2012-02-25 1 views
1

Я хочу составить последовательность видео во время выполнения, в результате получится один, плавный видео.Как плавно воспроизводить последовательность видео с MediaElement WPF?

Этот фрагмент кода показывает мой нынешний подход:

void mediaElement_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    if (_currentVideoIndex == this.videos.Length) 
     this._currentVideoIndex = 0; 
    PlayNext(); 
} 

void PlayNext() 
{ 
    mediaElement.Source = new Uri(videos[_currentVideoIndex++]); 
    mediaElement.Play(); 
} 

Видео играет хорошо, но игрок идет пустым около половины второго между каждым видео.

Я не привязан к конкретной платформе на данный момент, WPF/MediaElement - это именно то, где я начинаю.

+1

Вы можете попробовать буферизировать следующее видео. Таким образом, вы всегда должны загружать два видео - таким образом, когда вы закончите, вы можете мгновенно переключиться на следующий уже загруженный MediaElement. Это та же концепция, что и проблема GDI + мерцания, когда вы постоянно рисуете и обновляете. – Jason

+0

+1 Хороший ответ, вы должны написать это как ответ, а не только комментарий .. –

ответ

3

Вы можете попробовать буферизировать следующее видео. Таким образом, вы всегда должны загружать два видео - таким образом, когда вы закончите, вы можете мгновенно переключиться на следующий уже загруженный MediaElement.

Это та же концепция, что и проблема с GDI + мерцанием, когда вы постоянно рисуете и обновляете - решение для этого является двойной буферизацией формы. Без двойной буферизации GDI + очищает форму (это видят мгновенные мерцающие пользователи) и рисует. С двойной буферизацией GDI + обращается к временному экрану, а затем мгновенно обновляет его на форме, тем самым устраняя мерцание.

Ваш сценарий требует аналогичного решения. В видео в списке всегда сохраняйте два загруженных (вы можете асинхронно загружать второй после загрузки первого, чтобы уменьшить время задержки). Таким образом, после того, как первое видео будет воспроизведено, вы можете сразу отобразить второй MediaElement, который уже лаял.

+1

Фрагмент кода сделает это еще лучшим ответом. –