现状
在网上搜了一下相关教程,发现全部都是在视频播放完毕之后手动把进度设置为0来实现循环播放
但是这样做的后果是进度条跳跃时会出现轻度白屏和卡顿,如果视频本就是首尾相连的话,则会更明显
我的做法
在查看了微软官方文档之后,发现微软已经为我们提供了解决方案
首先创建一个 MediaElement 播放器,设置视频画面自动拉伸,加载行为改成手动
1 2 3
| <Grid> <MediaElement x:Name="MediaPlayer" Stretch="Fill" LoadedBehavior="Manual"/> </Grid>
|
引入命名空间
1 2
| using System.Windows.Media; using System.Windows.Media.Animation;
|
为播放器创建时钟
1 2 3 4 5 6 7 8 9 10 11 12
| MediaTimeline mTimeLine = new MediaTimeline(new Uri(path, UriKind.Absolute));
mTimeLine.RepeatBehavior = RepeatBehavior.Forever;
MediaClock mClock = mTimeLine.CreateClock();
this.MediaPlayer.Clock = mClock;
|
此时视频会自动开始播放,并且无法使用MediaElement的方法来控制视频行为,必须使用上面创建的时钟来控制
1 2 3 4 5 6 7 8
| mClock.Controller.Pause();
mClock.Controller.Resume();
mClock.Controller.Stop();
|
附:Controller完整函数说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
public double SpeedRatio { get; set; }
public void Begin();
public void Pause();
public void Remove();
public void Resume();
public void Seek(TimeSpan offset, TimeSeekOrigin origin);
public void SeekAlignedToLastTick(TimeSpan offset, TimeSeekOrigin origin);
public void SkipToFill();
public void Stop();
|