本章讲述:使用media player MediaTimeline 和Storyboard 来控制视频播放
当使用中的 MediaTimeline Storyboard 来控制的时间时 MediaElement ,该功能与其他对象(如动画)的功能相同 Timeline 。它还使用 Duration 属性来指定 MediaElement 活动 (持续时间) 媒体播放的时间。
下面一个小示例:如何创建使用的简单 media player MediaTimeline 来控制播放。 Media player 包括播放、暂停、恢复和停止按钮,有一个 Slider 充当进度栏的控件。
界面设计
<StackPanel Background="Black">
<MediaElement x:Name="myMediaElement" Height="450" Width="450" Stretch="Fill" MediaOpened="myMediaElement_MediaOpened">
<MediaElement.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="180"/>
</TransformGroup>
</MediaElement.LayoutTransform>
</MediaElement>
<Slider x:Name="timelineSlider" Margin="5" HorizontalAlignment="Stretch"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Width="80" Height="25" x:Name="PlayBtn" Margin="10" Content="播放"/>
<Button Width="80" Height="25" x:Name="PauseBtn" Margin="10" Content="暂停"/>
<Button Width="80" Height="25" x:Name="ResumeBtn" Margin="10" Content="恢复"/>
<Button Width="80" Height="25" x:Name="StopBtn" Margin="10" Content="停止"/>
</StackPanel>
<StackPanel.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="PlayBtn">
<EventTrigger.Actions>
<BeginStoryboard x:Name="myBegin">
<Storyboard SlipBehavior="Slip">
<MediaTimeline Source="E:\Video\视频202101.mp4" Storyboard.TargetName="myMediaElement" CurrentTimeInvalidated="MediaTimeline_CurrentTimeInvalidated"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.Click" SourceName="PauseBtn">
<EventTrigger.Actions>
<PauseStoryboard BeginStoryboardName="myBegin"/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.Click" SourceName="ResumeBtn">
<EventTrigger.Actions>
<ResumeStoryboard BeginStoryboardName="myBegin"/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.Click" SourceName="StopBtn">
<EventTrigger.Actions>
<StopStoryboard BeginStoryboardName="myBegin"/>
</EventTrigger.Actions>
</EventTrigger>
</StackPanel.Triggers>
</StackPanel>
使用 Duration 属性来指定 MediaElement 活动 (持续时间) 媒体播放的时间,这里视频从0秒开始,播放23秒
<MediaTimeline Source="........." Storyboard.TargetName="myMediaElement" BeginTime="0:0:0" Duration="0:0:23" CurrentTimeInvalidated="MediaTimeChanged" />
进度条进度值更新和最值设置
private void myMediaElement_MediaOpened(object sender, RoutedEventArgs e)
{
timelineSlider.Maximum = myMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds;
}
private void MediaTimeline_CurrentTimeInvalidated(object sender, EventArgs e)
{
timelineSlider.Value = myMediaElement.Position.TotalMilliseconds;
}
运行效果图
**************************************************************************************************************