WF MediaElement 视频播放器
来源:互联网 发布:淘宝评价怎么截图 编辑:程序博客网 时间:2024/06/04 22:16
<!-- .xmal文件 --><Controls:MetroWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="spph.VideoPlayingWindow" Title="视频截图" Height="600" Width="1000" MinHeight="600" MinWidth="1000" ShowInTaskbar="False" WindowStartupLocation="CenterOwner" GlowBrush="{DynamicResource AccentColorBrush}"> <TabControl x:Name="THREETabControl" Margin="5,5,5,5" > <TabItem Name="videoTabItem" Header="视频播放" IsSelected="True" Width="198"> <DockPanel Name="dockpanel_Video" LastChildFill="true"> <StackPanel Name="leftPanel_VideoList" DockPanel.Dock="Left" Width="180"> <StackPanel x:Name="InfoPanel"> <TextBlock Text="视频列表" FontSize="20" FontWeight="Bold" FontFamily="Microsoft YaHei" Foreground="#FF434D55" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" DockPanel.Dock="Top" Margin="10" Width="180" TextAlignment="Center" > <TextBlock.Background> <SolidColorBrush Color="#FFFFFFFF"/> </TextBlock.Background> </TextBlock> </StackPanel> <StackPanel> <ListView Name="listView_Video" SelectionMode="Single" SelectionChanged="listView_Video_SelectionChanged"></ListView> </StackPanel> </StackPanel> <Grid Background="Azure" Margin="2,2,2,2"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> <RowDefinition Height="10*" /> </Grid.RowDefinitions> <MediaElement Name="mediaElement_Video" ScrubbingEnabled="True" LoadedBehavior="Manual" Volume="{Binding ElementName=volumeSlider, Path=Value}" Grid.RowSpan="9" Margin="0,5,0,0" MediaOpened="mediaOpened_Video" MediaEnded="mediaEnded_Video" Grid.ColumnSpan="9" /> <Slider x:Name="volumeSlider" Minimum="0" Maximum="1" Value="0.5" Width="180" Margin="0,15,12,0" Grid.Row="10" Grid.Column="7" Grid.ColumnSpan="2" /> <Slider x:Name="playSlider" Width="740" Margin="5,-1,5,0" Value ="0" Grid.Row="9" Grid.ColumnSpan="9" ValueChanged="playSlider_ValueChanged" PreviewMouseUp="playSlider_PreviewMouseUp" /> <TextBlock Grid.Row="10" Margin="7,10,0,-2" Name="textBlock_Volumn" Text="音 量" Foreground="#FF9AE500" FontSize="20" Grid.Column="6" /> <TextBlock Grid.Row="9" Grid.Column="7" Margin="44,10,0,0" FontSize="10" Foreground="Gray" Name="textBlock_CurrentTime" /> <TextBlock Grid.Row="9" Grid.Column="8" Margin="0,10,0,0" FontSize="10" Foreground="Gray" Name="textBlock_AllTime" /> <TextBlock Grid.Row="9" Grid.Column="0" Name="textbBock_SpeedInfo"></TextBlock> <Button Background="{x:Null}" Content="停 止" Cursor="Hand" FontSize="20" Foreground="#FF9AE500" Margin="1,1,1,1" Name="buttonStop" Grid.Row="10" Click="buttonStop_Click" Grid.Column="2" /> <Button Background="{x:Null}" Content="快 退" Cursor="Hand" FontSize="20" Foreground="#FF9AE500" Margin="1,1,1,1" Name="buttonFR" Grid.Row="10" Click="buttonFR_Click" Grid.Column="3" /> <Button Background="{x:Null}" Content="播 放" Cursor="Hand" FontSize="20" Foreground="#FF9AE500" Margin="1,1,1,1" Name="buttonPlay" Grid.Row="10" Click="buttonPlay_Click" Grid.Column="4" /> <Button Background="{x:Null}" Content="快 进" Cursor="Hand" FontSize="20" Foreground="#FF9AE500" Margin="1,1,1,1" Name="buttonFF" Grid.Row="10" Click="buttonFF_Click" Grid.Column="5" /> </Grid> </DockPanel> </TabItem> <TabItem Name="imageTabItem" Header="图片展示" Width="198"> </TabItem> </TabControl></Controls:MetroWindow>
.cs文件:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.Windows.Threading;using System.IO;using System.Threading;using spph.Model;using MahApps.Metro.Controls;namespace spph{ /// <summary> /// Interaction logic for VideoPlaying.xaml /// </summary> public partial class VideoPlayingWindow : MetroWindow { //全局变量 -- 加载视频列表 private List<string> videoList = new List<string>(); //计时器,定时更新进度条和播放时间 private DispatcherTimer tmrProgress = new DispatcherTimer(); //在鼠标拖动Thumb的过程中记录其值。 private TimeSpan ts = new TimeSpan(); public VideoPlayingWindow() { InitializeComponent(); InitVideoList(); listView_Video.ItemsSource = videoList; // this.mediaElement_Video.Play(); tmrProgress = new DispatcherTimer(); //设置计时器的时间间隔为1秒 tmrProgress.Interval = new TimeSpan(0, 0, 1); //计时器触发事件处理 tmrProgress.Tick += SetDisplayMessage; SetImageForMediaElement(); } public void InitVideoList() { videoList = new List<string>(); this.mediaElement_Video.LoadedBehavior = MediaState.Manual; string[] filenames = Directory.GetFiles(LocalData.VideoPath); foreach (string filename in filenames) { if (filename.EndsWith(".mp4")) { videoList.Add(filename.Substring(filename.LastIndexOf("\\") + 1)); } } this.mediaElement_Video.Source = new Uri(filenames[0]); this.mediaElement_Video.Play(); } //将录像的第一帧作为播放前MediaElement显示的录像截图 public void SetImageForMediaElement() { mediaElement_Video.Play(); mediaElement_Video.Pause(); mediaElement_Video.Position = TimeSpan.Zero; } //计时器触发事件处理 private void SetDisplayMessage(Object sender, System.EventArgs e) { if (mediaElement_Video.NaturalDuration.HasTimeSpan) { TimeSpan currentPositionTimeSpan = mediaElement_Video.Position; string currentPosition = string.Format("{0:00}:{1:00}:{2:00}", (int)currentPositionTimeSpan.TotalHours, currentPositionTimeSpan.Minutes, currentPositionTimeSpan.Seconds); TimeSpan totaotp = mediaElement_Video.NaturalDuration.TimeSpan; string totalPostion = string.Format("{0:00}:{1:00}:{2:00}", (int)totaotp.TotalHours, totaotp.Minutes, totaotp.Seconds); textBlock_CurrentTime.Text = currentPosition; playSlider.Value = mediaElement_Video.Position.TotalSeconds; } } //点击停止按钮相应 private void buttonStop_Click(object sender, EventArgs e) { this.mediaElement_Video.Stop(); } //点击播放按钮 private void buttonPlay_Click(object sender, EventArgs e) { //启动计时器 -- 下面这句话尤为重要,缺少滚动条停止,当前时间为00:00:00 //需要修改,当引入播放新的视频时,重新启动计时器 tmrProgress.Start(); if (this.buttonPlay.Content.ToString() == "播 放") { this.mediaElement_Video.Play(); this.buttonPlay.Content = "暂 停".ToString(); } else { this.mediaElement_Video.Pause(); this.buttonPlay.Content = "播 放".ToString(); } } //点击快进按钮 private void buttonFF_Click(object sender, EventArgs e) { this.mediaElement_Video.Position = this.mediaElement_Video.Position + TimeSpan.FromSeconds(10); textbBock_SpeedInfo.Text = "快进十秒"; textbBock_SpeedInfo.Visibility = Visibility.Visible; //Thread.Sleep(3000); textbBock_SpeedInfo.Visibility = Visibility.Hidden; } //点击快退按钮 private void buttonFR_Click(object sender, EventArgs e) { this.mediaElement_Video.Position = this.mediaElement_Video.Position - TimeSpan.FromSeconds(10); textbBock_SpeedInfo.Text = "后退十秒"; textbBock_SpeedInfo.Visibility = Visibility.Visible; //延迟有问题 //Thread.Sleep(3000); textbBock_SpeedInfo.Visibility = Visibility.Hidden; } //TODO现在还不知道MediaElement的MediaOpened和MediaEnded事件的作用 //媒体时关闭,发生 private void mediaEnded_Video(object sender, EventArgs e) { mediaElement_Video.Position = TimeSpan.Zero; mediaElement_Video.Stop(); } //在加载媒体完成,发生 private void mediaOpened_Video(object sender, EventArgs e) { playSlider.Minimum = 0; playSlider.Maximum = mediaElement_Video.NaturalDuration.TimeSpan.TotalSeconds; TimeSpan totaotp = mediaElement_Video.NaturalDuration.TimeSpan; textBlock_AllTime.Text = "/" + string.Format("{0:00}:{1:00}:{2:00}", (int)totaotp.TotalHours, totaotp.Minutes, totaotp.Seconds); textBlock_CurrentTime.Text = "00:00:00"; } //拖拉播放进度 -- 设置 private void playSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { ts = TimeSpan.FromSeconds(e.NewValue); string currentPosition = string.Format("{0:00}:{1:00}:{2:00}", (int)ts.TotalHours, ts.Minutes, ts.Seconds); textBlock_CurrentTime.Text = currentPosition; } //当拖动Thumb的鼠标放开时,从指定时间开始播放 private void playSlider_PreviewMouseUp(object sender, MouseButtonEventArgs e) { mediaElement_Video.Position = ts; } //点击右侧视频,加以播放 private void listView_Video_SelectionChanged(object sender, SelectionChangedEventArgs e) { string fileName = this.listView_Video.SelectedValue.ToString(); this.mediaElement_Video.Source = new Uri( LocalData.VideoPath + "//" + fileName); this.mediaElement_Video.Play(); } }}
0 0
- WF MediaElement 视频播放器
- MediaElement的视频循环播放
- 用WPF控件MediaElement创建简易播放器(视频区域、播放控制区域、播放列表、循环播放)
- 用WPF控件MediaElement创建简易播放器(视频区域、播放控制区域、播放列表、循环播放)
- silverlight MediaElement帧精确视频播放手记
- 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器
- 使用MediaElement.js构建个性的HTML5音频和视频播放器
- HTML5播放器MediaElement.js用法
- silverlight中使用MediaElement播放视频的解决方案
- 利用WPF MediaElement去播放视频或者音乐
- WPF媒体播放器(MediaElement)打开指定的视频、播放、暂停、快进、快退、截图
- WPF MediaElement 声音循环播放
- Wpf中MediaElement循环播放
- Mediaelement控件显示视频问题
- silverlight MediaElement创建之后不能播放解决办法
- WPF 使用MediaElement元素循环播放问题
- 视频预览,视频播放器
- 视频播放器
- POJ1182 数据结构 (并查集)
- 社説 20150116 宇宙基本計画 安全保障の能力強化を進めよ
- ZOJ 3757 Alice and Bob and Cue Sports [模拟]
- WebView基本使用
- 1042.Shuffling Machine
- WF MediaElement 视频播放器
- 游戏任务成就体系的实现(三):数据统计模块(KeyUtil)的初始化和基本方法简述
- JS - 百度地图 判断一个标注点是否在多边形区域里
- 在Ubuntu上安装配置Git,并实现代码的提交和版本控制
- mysql 的解决字符串比较的时候区分大小写
- Android学习(10)-广播机制
- cocos2d 制作动态光晕效果基础 —— blendFunc
- HTA 学习
- DependencyInjection&IOC&ServiceLocator理解