欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-15 18:20:46
 在wpf里用mediaelement控件,实现一个循环播放单一视频的程序,同时可以控制视频的播放、暂停、停止。   一种方式,使用mediaelement.mediae...

 在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控件实现视频循环播放,希望对大家有所帮助

上一篇:

下一篇: