当前位置: 移动技术网 > IT编程>开发语言>c# > C# 使用WPF 用MediaElement控件实现视频循环播放

C# 使用WPF 用MediaElement控件实现视频循环播放

2019年07月18日  | 移动技术网IT编程  | 我要评论

 在wpf里用mediaelement控件,实现一个循环播放单一视频的程序,同时可以控制视频的播放、暂停、停止。

  一种方式,使用mediaelement.mediaended事件,在视频播放结束后,自动重新播放;

  另一种方式,使用wpf定时器,在定时器事件里写入视频播放代码。

  后者优点是可以控制循环时长,不必等到视频播放结束就可以开始下一次播放,比如:同时启动多个播放程序,使多个时长不同的视频同时播放,无限循环,如果采用第一种方式,累计多次自动播放后,视频内容就无法同步。

第一种方式:

xaml:
    <mediaelement x:name="mediaelement" horizontalalignment="left" height="261" verticalalignment="top" width="507"/>
    <button x:name="btnplay" content="play" horizontalalignment="left" margin="68,279,0,0" verticalalignment="top" width="75" click="btnplay_click"/>
    <button x:name="btnpause" content="pause" horizontalalignment="left" margin="170,279,0,0" verticalalignment="top" width="75" click="btnpause_click"/>
    <button x:name="btnstop" content="stop" horizontalalignment="left" margin="295,279,0,0" verticalalignment="top" width="75" click="btnstop_click"/>
c#:
    // 窗口加载事件
    private void window_loaded(object sender, routedeventargs e)
    {
      // 绑定视频文件
      mediaelement.source = new uri("d:/bird.mp4");
      // 交互式控制
      mediaelement.loadedbehavior = mediastate.manual;
      // 添加元素加载完成事件 -- 自动开始播放
      mediaelement.loaded += new routedeventhandler(media_loaded); 
      // 添加媒体播放结束事件 -- 重新播放
      mediaelement.mediaended += new routedeventhandler(media_mediaended);
      // 添加元素卸载完成事件 -- 停止播放
      mediaelement.unloaded += new routedeventhandler(media_unloaded);
    }
    /*
      元素事件 
    */
    private void media_loaded(object sender, routedeventargs e)
    {
      (sender as mediaelement).play();
    }
    private void media_mediaended(object sender, routedeventargs e)
    {
      // mediaelement需要先停止播放才能再开始播放,
      // 否则会停在最后一帧不动
      (sender as mediaelement).stop();
      (sender as mediaelement).play();
    }
    private void media_unloaded(object sender, routedeventargs e)
    {
      (sender as mediaelement).stop();
    }
    /*
      播放控制按钮的点击事件 
    */
    private void btnplay_click(object sender, routedeventargs e)
    {
      mediaelement.play();
    }
    private void btnpause_click(object sender, routedeventargs e)
    {
      mediaelement.pause();
    }
    private void btnstop_click(object sender, routedeventargs e)
    {
      mediaelement.stop();
    }

第二种方式:

  注:使用dispatchertimer,需要添加system.windows.threading命名空间。

xaml:
    <mediaelement x:name="mediaelement" horizontalalignment="left" height="243" margin="19,10,0,0" verticalalignment="top" width="394" loadedbehavior ="manual"/>
    <button x:name="btnplay" content="play" horizontalalignment="left" margin="52,270,0,0" verticalalignment="top" width="75" click="btnplay_click"/>
    <button x:name="btnpause" content="pause" horizontalalignment="left" margin="163,270,0,0" verticalalignment="top" width="75" click="btnpause_click"/>
    <button x:name="btnstop" content="stop" horizontalalignment="left" margin="266,270,0,0" verticalalignment="top" width="75" click="btnstop_click"/>
c#:
    dispatchertimer timer = new dispatchertimer(); // 定时器timer
    int durtime = 5; // 视频播放时长,也就是循环周期
    // 窗口加载事件
    private void window_loaded(object sender, routedeventargs e) 
    {
      mediaelement.source = new uri("d:/bird.mp4"); // 绑定视频文件
      mediaelement.play(); // 设置启动播放
      timer.interval = new timespan(0, 0, 0, durtime); // 设置定时器重复周期
      timer.tick += new eventhandler(timerevent); // 设置定时器事件
      timer.start(); // 启动定时器
    }
    // 定时器事件 
    public void timerevent(object sender, eventargs e)
    {
      // mediaelement需要先停止播放才能再开始播放,
      // 否则会停在最后一帧不动
      mediaelement.stop(); 
      mediaelement.play(); 
    }
    /*
      播放控制按钮的点击事件 
    */
    private void btnplay_click(object sender, routedeventargs e)
    {
      mediaelement.play(); // 开始播放
      timer.start(); // 重新启动定时器
    }
    private void btnpause_click(object sender, routedeventargs e)
    {
      mediaelement.pause(); // 暂停当前播放
      timer.stop(); // 停止定时器
    }
    private void btnstop_click(object sender, routedeventargs e)
    {
      mediaelement.stop(); // 停止当前播放
      timer.stop(); // 停止定时器
    }

总结

以上所述是小编给大家介绍的c# 使用wpf 用mediaelement控件实现视频循环播放,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网