Welcome

首页 / 软件开发 / .NET编程技术 / WPF中使用MediaElement控件来进行音视频播放

WPF中使用MediaElement控件来进行音视频播放2015-01-01WPF中可以使用MediaElement控件来进行音视频播放,然后需要做个进度条啥的,但是MediaElement.Position(进度)和MediaElement.NaturalDuration居然都不是依赖属性,简直不能忍!

好吧,首先说说比较传统的做法(winform?)

slider用来显示进度以及调整进度,tb1显示当前进度的时间值,tb2显示视频的时长。

player_Loaded 事件中使用DispatcherTimer来定时获取当前视频的播放进度,

player_MediaOpened 事件中获取当前视频的时长(只有在视频加载完成后才可以获取到)

slider_ValueChanged 事件中执行对视频进度的调整

xaml:<MediaElement Name="player" Source="e:MVVMLight (1).wmv" Loaded="player_Loaded"MediaOpened="player_MediaOpened" /><Slider Grid.Row="1"Margin="10" Name="slider" ValueChanged="slider_ValueChanged" /><WrapPanel Grid.Row="1"Margin="0,40,0,0"><TextBlock Name="tb1" Width="120" /><TextBlock Name="tb2" Width="120" /></WrapPanel>后台代码:private void player_Loaded(object sender, RoutedEventArgs e){DispatcherTimer timer = new DispatcherTimer();timer.Interval = TimeSpan.FromMilliseconds(1000);timer.Tick += (ss, ee) =>{//显示当前视频进度var ts = player.Position;tb1.Text = string.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);slider.Value = ts.TotalMilliseconds;};timer.Start();}private void player_MediaOpened(object sender, RoutedEventArgs e){//显示视频的时长var ts = player.NaturalDuration.TimeSpan;tb2.Text = string.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);slider.Maximum = ts.TotalMilliseconds;}private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e){//调整视频进度var ts = TimeSpan.FromMilliseconds(e.NewValue);player.Position = ts;}