在WPF 中可以使用MediaElement 为应用程序添加媒体播放控件,以完成播放音频、视频功能。由于MediaElement 属于UIElement,所以它同时也支持鼠标及键盘的操作。本篇将使用MediaElement 类和Windows API Code Pack创建一个简单的视频播放器实现一些基本功能。测试说明avi、wmv、MP4、MP3媒体文件都可以播放。

一、后台逻辑代码说明

1.选择视频文件

在视频文件浏览部分引入,并添加WMV、AVI 等文件过滤器。

点击详细参考

//选择视频文件
private void openBtn_Click(object sender, RoutedEventArgs e)
{
CommonOpenFileDialog open = new CommonOpenFileDialog();
open.EnsureReadOnly = true;
open.Filters.Add(new CommonFileDialogFilter("Mp4文件", "*.mp4"));
open.Filters.Add(new CommonFileDialogFilter("Wmv文件", "*.wmv"));
open.Filters.Add(new CommonFileDialogFilter("Avi文件", "*.avi"));
open.Filters.Add(new CommonFileDialogFilter("Mp3文件", "*.mp3"));
if (open.ShowDialog() == CommonFileDialogResult.Ok)
{
//指定媒体文件地址
mediaElement.Source = new Uri(open.FileName, UriKind.Relative);
playBtn.IsEnabled = true;
}
}

2.可以使用play()/Pause()方法,控制视频播放或暂停

//开始播放
private void playBtn_Click(object sender, RoutedEventArgs e)
{
mediaElement.Play();
mediaElement.ToolTip = "开始播放";
}
//停止播放
private void stopBtn_Click(object sender, RoutedEventArgs e)
{
mediaElement.Pause();
mediaElement.ToolTip = "停止播放";
}

3.通过修改MediaElement 的Position 值实现视频进度调整操作。时间间隔通过TimeSpan 进行设置(下面代码以10秒为间隔)。

//后退
private void backBtn_Click(object sender, RoutedEventArgs e)
{
mediaElement.Position = mediaElement.Position - TimeSpan.FromSeconds();
}
//前进
private void forwardBtn_Click(object sender, RoutedEventArgs e)
{
mediaElement.Position = mediaElement.Position +TimeSpan.FromSeconds();
}

4. 音量调节部分只需将Slider Value 变化值与MediaElement Volume 值做一个简单Binding 即可。

<MediaElement Height="300" Width="450" Name="mediaElement"
Volume="{Binding ElementName=volumeSlider,Path=Value}" LoadedBehavior="Manual"
/>

二、前台Xaml代码定义

<StackPanel HorizontalAlignment="Center" Margin="20">
<Border BorderThickness="3" Background="Black">
<Border.BorderBrush>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Offset="0" Color="White"/>
<GradientStop Offset="0.5" Color="Gold"/>
</LinearGradientBrush>
</Border.BorderBrush>
<MediaElement Height="300" Width="450" Name="mediaElement"
Volume="{Binding ElementName=volumeSlider,Path=Value}" LoadedBehavior="Manual"
/>
</Border>
<StackPanel Orientation="Horizontal" Height="40" HorizontalAlignment="Center">
<Button x:Name="openBtn" Content="Open File"
Style="{StaticResource btnStyle}" Click="openBtn_Click" Margin="0" Width="64"/>
<Button x:Name="playBtn" Content="Play"
Style="{StaticResource btnStyle}" Click="playBtn_Click"/>
<Button x:Name="stopBtn" Content="Stop"
Style="{StaticResource btnStyle}" Click="stopBtn_Click"/>
<Button x:Name="backBtn" Content="Back"
Style="{StaticResource btnStyle}" Click="backBtn_Click"/>
<Button x:Name="forwardBtn" Content="Forward"
Style="{StaticResource btnStyle}" Click="forwardBtn_Click" Height="30" Margin="5,5,5,0" VerticalAlignment="Top"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
<TextBlock Text="Volume" Foreground="Gold"/>
<Slider x:Name="volumeSlider" Minimum="0" Maximum="1" Value="0.5" Width="200"/>
</StackPanel>
</StackPanel>

样式资源定义

<Window.Resources>
<Style x:Key="btnStyle" TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Offset="0" Color="White"/>
<GradientStop Offset="0.5" Color="#FF554D4A"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="FontStyle" Value="Italic"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="Width" Value="60"/>
<Setter Property="Foreground" Value="Gold"/>
<Style.Triggers>
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>

运行结果:

参考文章来自:http://www.cnblogs.com/gnielee/archive/2010/05/06/wpf4-media-player-mediaelement.html

WPF 媒体播放器(MediaElement)使用实例(转)的更多相关文章

  1. WPF 媒体播放器(MediaElement)实例,实现进度和音量控制

    WPF 视频音频播放控件MediaElement实现进度控制,音量控制实例 说明: 1.Volume控制音量的大小,double类型,并且实现了属性依赖,可以用来双向绑定:在 0 和 1. 之间的线性 ...

  2. 【C语言入门教程】4.10 综合实例 - 媒体播放器

    4.10.1 建立播放列表 数据字典 名称 数据类型 说明 MAX_LENGTH 符号常量 用于定义数组长度,表示列表最大长度 MAX_FILE_LENGTH 符号常量 用于定义数组长度,表示文件名最 ...

  3. 快速构建Windows 8风格应用21-构建简单媒体播放器

    原文:快速构建Windows 8风格应用21-构建简单媒体播放器 本篇博文主要介绍如何构建一个简单的媒体播放器. <快速构建Windows 8风格应用20-MediaElement>博文中 ...

  4. HTML5播放器 MediaElement.js 使用方法

    目前已经有很多html5播放器可以使用,使用html5播放器可以轻松的在页面中插入媒体视频,从而使我们的web页面变得更加丰富多彩,所以今 天向大家推荐一款非常优秀的html5播放器MediaElem ...

  5. VLC 媒体播放器

    VLC 媒体播放器 VLC 媒体播放器是一个便携式. 免费.开源. 跨平台的媒体播放器. VideoLAN 项目的流式媒体服务器.分为Windows Phone版本和Android版本. 下载地址: ...

  6. JavaScript自定义媒体播放器

    使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...

  7. (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得

    jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...

  8. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

  9. C#编写媒体播放器--Microsoft的Directx提供的DirectShow组件,该组件的程序集QuartzTypeLib.dll.

    使用C#编写媒体播放器时,需要用到Microsoft的Directx提供的DirectShow组件.用该组件前需要先注册程序集QuartzTypeLib.dll. 1.用QuartzTypeLib.d ...

随机推荐

  1. 关于@synchronized(self)的用法

    @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作 ...

  2. Count The Pairs

    hdu4750:http://acm.hdu.edu.cn/showproblem.php?pid=4750 题意:给你一个带权无向图,然后让你求这样的点对s,t,使得s--t的所有路径上的最大的边的 ...

  3. Bluetooth LE(低功耗蓝牙) - 第三部分

    回顾 在本系列的前两篇文章中,我们已经了解了一些关于Bluetooth LE的背景并建立一个简单的Activity / Service框架.   在这篇文章中,我们将探讨Bluetooth LE的细节 ...

  4. WordPress Design Approval System插件‘step’参数跨站脚本漏洞

    漏洞名称: WordPress Design Approval System插件‘step’参数跨站脚本漏洞 CNNVD编号: CNNVD-201309-084 发布时间: 2013-09-11 更新 ...

  5. delphi编写winsocket的流程

    delphi编写winsocket的流程 1.在窗体创建的时候启用动态连接库(引用winsock)    var  aWSAData:TWSAData;    if WSAStartup($0101, ...

  6. maya 操作自我整理(二)

    随身携带自己的maya习惯我们在一台电脑上设置好自己的使用习惯,包括自己定义的快捷键.标记菜单.界面颜色.工具架等信息,当换到另一个工作环境时再进行设置十分不便利,将自己的习惯随身带走有利于我们更快捷 ...

  7. oracle中多表查询优化笔记

    ORACLE有个高速缓冲的概念,这个高速缓冲呢就是存放执行过的SQL语句,对应已经执行过的sql语句,第二次执行的时候速度会比第一次块,用的就是高速缓冲.ORACLE的高速缓冲是全字符匹配的,如果sq ...

  8. [每日一题] OCP1z0-047 :2013-08-02 权限―――分配系统权限

    这题是考权限的知识点,权限分为两大类,系统权限和对象权限,这题主要讲系统权限,我们先来了解什么是系统权,什么是对象权限吧. 1.系统权限:允许用户在数据库中执行特定的操作 A.SYSDBA/SYSOP ...

  9. android的生命周期

    1.运行状态:当一个活动处于栈的顶部时,这时活动就处于活动状态,系统是不愿意回收处于活动状态的,会影响用户体验. 2.暂停状态:当一个活动不再处于栈的顶部时,但仍然可见时,这时就是暂停状态了.处于暂停 ...

  10. ecshop获取客户端操作系统

    <?php /** * 获得客户端的操作系统 * * @access private * @return void */ function get_os() { if (empty($_SERV ...