几分钟后循环 MediaElement 冻结或暂停一秒钟
Looping MediaElement freezes after some minutes or halts for a second
我有一个 .net framwork (4.7.2) wpf 应用程序,其中的视频(持续时间:10 到 50 秒)应该整天循环播放。
首先我实现了mirosoft建议的方式(使用故事板):
How to: Repeat Media Playback (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 分钟后停止播放。
我找到了 this 篇文章,其中描述了同样的问题。
解决方案:使用第 3 方库或自己管理重复。
我想避免使用建议的库,因为它看起来不再维护了。所以我实施了(非常简单的)解决方案。
<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
被触发时,视频停止了大约一秒钟。短暂的停顿之后,视频从头开始。
您对如何解决此短暂停止有任何建议吗?
private void Video_OnLoaded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Play();
}
private void Video_OnMediaEnded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Position = TimeSpan.FromSeconds(0);
VideoMediaElement.Play();
}
我有一个 .net framwork (4.7.2) wpf 应用程序,其中的视频(持续时间:10 到 50 秒)应该整天循环播放。
首先我实现了mirosoft建议的方式(使用故事板): How to: Repeat Media Playback (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 分钟后停止播放。
我找到了 this 篇文章,其中描述了同样的问题。
解决方案:使用第 3 方库或自己管理重复。
我想避免使用建议的库,因为它看起来不再维护了。所以我实施了(非常简单的)解决方案。
<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
被触发时,视频停止了大约一秒钟。短暂的停顿之后,视频从头开始。
您对如何解决此短暂停止有任何建议吗?
private void Video_OnLoaded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Play();
}
private void Video_OnMediaEnded(object sender, RoutedEventArgs e)
{
VideoMediaElement.Position = TimeSpan.FromSeconds(0);
VideoMediaElement.Play();
}