在WPF媒体元素中连续重播视频

时间:2013-11-15 12:11:36

标签: c# wpf event-handling mediaelement replay

我在媒体元素中播放视频文件。我需要保持播放,因此我尝试了:

me.play();
me.MediaEnded += new RoutedEventHandler(me_MediaEnded);

使用此事件方法:

//loop to keep video playing continuously
void me_MediaEnded(object sender, EventArgs e)
{
    //play video again
    me.Play();
}

但是上面没有重播视频文件。为什么?我做错了什么?

4 个答案:

答案 0 :(得分:10)

根据post on MSDN

  

Play()从当前位置开始,因此您必须首先前往起始位置然后再次播放。

所以你必须在重播之前重置位置:

me.Position = TimeSpan.FromSeconds(0);
me.Play();

答案 1 :(得分:1)

您还可以使用Storyboard来控制和循环视频,而无需挂钩事件或执行任何代码隐藏工作。这是MSDN上推荐的解决方案,是MVVM设计的更优雅和适当的解决方案。

在MSDN上阅读更多内容,包括示例:

http://msdn.microsoft.com/en-us/library/ms741866%28v=vs.100%29.aspx

答案 2 :(得分:1)

我得到了它的工作:

class MyMediaPlayer : MediaPlayer
{
    private bool looping;

    public MyMediaPlayer() : base()
    {
        looping = false;  
        base.MediaEnded += new EventHandler(mediaEnded);
    }

    public MyMediaPlayer(string _file) : base()
    {
        looping = false;
        base.Open(new Uri(_file, UriKind.Relative));
        base.MediaEnded += new EventHandler(mediaEnded);
    }   

    public bool Looping
    {
        get { return looping;}
        set { looping = value; }
    }

    public void playLooping()
    {
        looping = true;
        base.Play();
    }

    public void playLooping(string _file)
    {
        looping = true;
        base.Open(new Uri(_file, UriKind.Relative));
        base.Play();
    }

    public void play()
    {
        looping = false;
        base.Play();
    }

    public void play(string _file)
    {
        looping = false;
        base.Open(new Uri(_file, UriKind.Relative));
        base.Play();
    }

    public void stop()
    {
        looping = false;
        base.Stop();
    }

    private void mediaEnded(object sender, EventArgs e)
    {
        if(looping)
        {
            base.Position = new TimeSpan(0, 0, 0);
            base.Play();
        }
    }

}

希望这能回答你的问题。

答案 3 :(得分:0)

我不知道出于哪个原因,但对我而言从未奏效:

me.Position = TimeSpan.FromSeconds(0);
me.Play();

我的gif在第一次迭代后停止播放。

我尝试做了不同的事情,看起来我找到了简单的解决方案:

        <MediaElement 
                        x:Name="me"
                        MediaEnded="MediaElement_MediaEnded"
                        LoadedBehavior="Play" />

代码:

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
    me.Position = TimeSpan.FromMilliseconds(1);
}

看起来如果你将位置设置为零,可能会发生错误。 &#39;播放&#39;方法可能会停止工作。