【问题标题】:What is simplest way to repeat a video in a MediaElement在 MediaElement 中重复视频的最简单方法是什么
【发布时间】:2018-01-24 23:47:31
【问题描述】:

我有一个 MediaElement,其中源绑定到一些数据

<MediaElement Source='{Binding Something}' />

让视频重复播放的最简单方法是什么?理想情况下,MediaElement 将具有重复行为属性。

<MediaElement RepeatBehavior='Forever' ... />

但是我找不到这样的属性。

【问题讨论】:

    标签: wpf video


    【解决方案1】:

    您需要将情节提要添加到 MediaElement。请看下面的例子:

    <MediaElement Name="myMediaElement" >
          <MediaElement.Triggers>
            <EventTrigger RoutedEvent="MediaElement.Loaded">
              <EventTrigger.Actions>
                <BeginStoryboard>
                  <Storyboard>
    
                    <!-- The MediaTimeline has a RepeatBehavior="Forever" which makes the media play
                         over and over indefinitely.-->
                    <MediaTimeline Source="media\tada.wav" Storyboard.TargetName="myMediaElement"  
                     RepeatBehavior="Forever" />
    
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger.Actions>
            </EventTrigger>
          </MediaElement.Triggers>
        </MediaElement>
    

    【讨论】:

    • FWIW 这种方法会在重复视频 1-3 分钟后开始停滞。我认为这每次都会打开视频文件。我使用了另一个答案中的方法,它永远循环而不会减速/冻结:stackoverflow.com/a/5975876/31307
    【解决方案2】:

    我通过将UnloadedBehavior 设置为MediaState.Manual 和以下代码使其工作:

    private void mediaElement_OnMediaEnded(object sender, RoutedEventArgs e)
    {
        mediaElement.Position = new TimeSpan(0,0,1);
        mediaElement.Play();
    }
    

    将位置设置为零不起作用...

    【讨论】:

    • 我来这个问题是为了回答同样的答案,所以我必须提到将位置设置为TimeSpan.Zero 效果很好。
    • 我测试了自己,发现 TimeSpan.Zero 可以正常工作。尼斯肯
    • +MasterMastic TimeSpan.Zero 不适用于所有情况。
    • 这和 TimeSpan.Zero 最适合我。触发器过早地倒带循环中的视频,并且不会将视频播放到最后。
    • 如果您将LoadedBehaviour 设置为Play,请删除mediaElement.Play();
    【解决方案3】:

    我知道这有点晚了,但我无法使用 MSDN 中的示例。所以经过研究我发现了这个项目:WPF Media Kit,只需点击屏幕右侧最新版本中的浏览链接。您将输入示例应用程序的代码。我喜欢这个库,因为循环很简单:

    MediaUriElement MyPlayer.Loop = True;
    

    &lt;DirectShowControls:MediaUriElement x:Name="MyPlayer" Loop="True" /&gt;

    希望这对其他人有所帮助。

    问候!

    【讨论】:

      【解决方案4】:

      mediaElement.Position = new TimeSpan(0,0,1) 添加到媒体播放器方法(在播放媒体之前)没有任何效果,正如 MasterMastic 和 Guido Zanon 所建议的那样。我使用给定的内容为 MediaEnded 创建了 MediaElement 事件并且它有效。

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 2020-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        相关资源
        最近更新 更多