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