分享

WPF MediElement实现视频播放

 五行和谐 2014-10-23

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

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

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

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

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

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

  1. xaml:  
  2. <MediaElement Name="player" Source="e:\MVVMLight (1).wmv" Loaded="player_Loaded"   
  3.                       MediaOpened="player_MediaOpened"/> 
  4.         <Slider Grid.Row="1"  Margin="10" Name="slider" ValueChanged="slider_ValueChanged"/> 
  5.         <WrapPanel Grid.Row="1"  Margin="0,40,0,0"> 
  6.             <TextBlock Name="tb1" Width="120"/> 
  7.             <TextBlock Name="tb2" Width="120"/> 
  8.         </WrapPanel> 
  9.  
  10. 后台代码:  
  11. private void player_Loaded(object sender, RoutedEventArgs e)  
  12.         {  
  13.             DispatcherTimer timer = new DispatcherTimer();  
  14.             timer.Interval = TimeSpan.FromMilliseconds(1000);  
  15.             timer.Tick += (ss, ee) => 
  16.             {  
  17.                 //显示当前视频进度  
  18.                 var ts = player.Position;  
  19.                 tb1.Text = string.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);slider.Value = ts.TotalMilliseconds;  
  20.             };  
  21.             timer.Start();  
  22.         }  
  23.  
  24.         private void player_MediaOpened(object sender, RoutedEventArgs e)  
  25.         {  
  26.             //显示视频的时长  
  27.             var ts = player.NaturalDuration.TimeSpan;  
  28.             tb2.Text = string.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);  
  29.             slider.Maximum = ts.TotalMilliseconds;  
  30.         }  
  31.  
  32.         private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)  
  33.         {  
  34.             //调整视频进度  
  35.             var ts = TimeSpan.FromMilliseconds(e.NewValue);  
  36.             player.Position = ts;  
  37.         }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多