У меня есть приложение .net framwork (4.7.2) wpf, в котором видео (длительность: от 10 до 50 секунд) должно быть зациклено весь день.
Сначала я реализовал предложенный способот mirosoft (с использованием раскадровки): Как выполнить повторное воспроизведение мультимедиа (docs.microsoft.com)
<MediaElement Name="VideoMediaElement" Width="1920" Height="1080" Visibility="{Binding Path=IsVideoUriAvailable, Converter={StaticResource BooleanToVisibilityConverter}}">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="MediaElement.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<MediaTimeline Source="{Binding Path=VideoUri, FallbackValue=null}" Storyboard.TargetName="VideoMediaElement"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
Но в моем тесте я заметил, что видео останавливается после 3 до5 минут.
Я нашел эту статью, в которой описана та же проблема.
Решение: Использование сторонней библиотеки или управление повторением самостоятельно.
Я хочу избежатьиспользуя предложенную библиотеку, потому что похоже, что она больше не поддерживается. Итак, я реализовал (очень простое) решение.
<MediaElement Name="VideoMediaElement"
Width="1920" Height="1080"
Visibility="{Binding Path=IsVideoUriAvailable, Converter={StaticResource BooleanToVisibilityConverter}}"
Source="{Binding Path=VideoUri, FallbackValue=null}"
LoadedBehavior="Manual"
Loaded="Video_OnLoaded"
MediaEnded="Video_OnMediaEnded"/>
private void Video_OnLoaded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Play();
}
private void Video_OnMediaEnded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Position = TimeSpan.FromSeconds(0);
}
Кажется, эта реализация более надежна, но у меня есть еще одна проблема: видео останавливается на одну секунду, когда запускается OnMediaEnded
,После этой короткой остановки видео начинается с самого начала.
У вас есть предложения, как исправить эту короткую остановку?