在Windows应用商店应用中提供了MediaElement控件,该控件能为应用提供音频和视频播放功能。就像之前提到的,虽然在多媒体应用开发中,开发人员可以自行开发一套音频、视频编解码规范和开发媒体播放控件,但是这需要花费一定的工作量去完成,而使用MediaElement控件及其方法、属性及事件可以满足大部分一般应用开发的需求。

9.3.1     MeidaElement控件介绍

MediaElement控件本身并没有提供媒体操作界面,但是它提供了一组用于媒体操作相关的属性、事件及方法供开发人员使用,例如要在应用程序中通过MediaElement控件来启动媒体播放,可以创建一个Button按钮,在此按钮的事件处理程序中调用Play方法来启动媒体播放,下面将通过一个示例介绍MediaElement控件的使用方法。

首先新建一个Windows应用商店的空白应用程序项目,并命名为MediaElementSample,在项目中新建一个名为Video的文件夹,并向文件夹中添加要播放的视频文件SampleVideo.avi。然后打开项目中的MainPage.xaml文件,在Grid元素中添加一个MediaElement控件,代码如下所示:

<MediaElement x:Name="myMedia" HorizontalAlignment="Left" Height="647" Margin="129.842,71,0,0" VerticalAlignment="Top" Width="1098.483" Source="Video/SampleVideo.avi"/>

在上面的代码中,使用Source属性指定了要播放的视频文件路径。虽然代码非常简单,但是仅这些代码就使应用程序具备了播放多媒体的功能,启动调试可以看到视频播放效果,如图9-6所示。

图9-6 使用MediaElement控件播放视频

接下来介绍一下MediaElement控件支持播放的媒体格式以及常见的事件、属性和方法,以便为后面的学习夯实基础。

(1)MediaElement控件支持的媒体文件格式

作为一个强大的媒体播放控件,MediaElement能够支持众多格式的媒体文件,具体来说,MediaElement支持的音频文件格式主要有:WMA7、AAC、MP3、AC3。支持的视频文件格式主要有:WMV-Simple Profile(VC-1)(800×600)、WMV-Main Profile(VC-1)(800×600)、WMV-Advanced Profile(VC-1)(800×600)、MPEG-4 Part2-Simple Profile(800×600)支持720P高清视频、MPEG-4 Part10(MPEG-4 AVC,H.264)Level 3.0-Baseline Profile(720×480)、MPEG-4 Part10(MPEG-4 AVC,H.264)Level 3.0-Main Profile(720×480/720×576)、MPEG-4 Part10(MPEG-4 AVC,H.264)Level 3.0-High Profile(720×480/720×576)、H.263(800×480)、AVI、MP4、ASF、WAV、MOV。

(2)MediaElement控件中的事件

MediaElement控件包含许多触发事件,它们会在相应的条件下触发,将这些触发事件配合以事件处理方法就可以实现一些特定的媒体播放操作。比如CurrentStateChanged事件会在媒体播放状态更改时触发,配合事件处理方法就可以在界面中显示出播放状态更改的信息;再比如BufferingProgressChanged事件会在媒体缓冲进度更改时触发,结合事件处理方法就可以实时显示出媒体的缓冲进度。下面是一些MediaElement控件的常见触发事件:

q  MediaOpened事件,媒体打开时触发。

q  MediaEnded事件,媒体播放完毕后触发。

q  BufferingProgressChanged事件,当BufferingProgress属性值更改时触发,BufferingProgress属性表示缓冲进度。

q  CurrentStateChanged事件,当CurrentState属性值更改时触发,CurrentState属性表示当前的播放状态。

q  DownloadProgressChanged,在DownloadProgress属性值更改时触发,DownloadProgress属性表示下载进度。

(3)MediaElement控件的属性

MediaElement控件提供了很多属性,用于设置或获取MediaElement控件的各种状态和行为等,比较常用的属性如下:

q  AutoPlay属性,该属性指定MediaElement控件是否自动播放媒体,默认值为True。

q  Source属性,该属性指定MediaElement控件播放的媒体文件来源。

q  IsMuted属性,该属性用于指定MediaElement控件是否设置为静音,设定为True值表示静音,默认值为False。

q  Stretch属性,用于指定视频媒体如何拉伸显示以填充MediaElement控件区域,属性值可以设定为None、Uniform、UniformToFill及Fill,默认为Fill。各种属性值的显示效果与在9.2.1节中介绍的Image对象的Stretch属性值完全相同,此处不再展示。

q  Volume属性,用于设定MediaElement控件的音频音量,可以设置为从0至1的任何数字,设置为1表示最大音量,默认值为0.5。

q  Balance属性,用于获取或设置立体声的音量大小,即声道设置。

q  Position属性,用于获取或设置媒体当前的播放进度,即播放的时间量,该属性为TimeSpan类型,默认值为0:0:0。

q  NaturalDuration属性,用于获取当前播放媒体的总时间长度。

q  CurrentState属性,用于获取MediaElement控件当前的播放状态,如表9-1所示,分别有7种状态。

表9-1 MediaElement控件的各种播放状态

状态

说明

Buffering

MedaiElement控件正在加载要播放的媒体文件。在此状态下MedaiElement的Position属性不前进。如果MediaElement已经在播放视频,则将继续显示所显示的上一帧

Closed

MediaElement控件中不包含媒体文件,画面上显示为一片空白

Individualizing

此状态适用于播放受DRM保护的媒体文件,检查相关的证书是否存在

Opening

MediaElement控件正在打开指定的媒体文件。在此状态下,Play、Pause或Stop方法处于等待接受命令中

Playing

MediaElement播放进行中,其Position属性向前推进

Paused

MediaElement播放暂停中,其Position属性暂时停止前进

Stopped

MediaElement播放停止中,其Position属性值为0:0:0。如果加载的媒体为视频,则MediaElement显示视频画面的第1帧

值得注意的是,当MediaElement控件处于不同状态时,调用相同的执行方法将会有不同的结果,比如当MediaElement处于Paused状态时,调用Play方法将开始媒体播放,而当MediaElement处于Playing状态时,再调用Play方法将不会有任何效果。在实际应用开发中,可以根据MediaElement控件的CurrentState属性为一个按钮添加多种控件模板和事件。

(4)MediaElement控件中的常见方法

MediaElement控件提供了一系列方法,利用这些方法可以实现对媒体播放的控制。可以这理解,属性为MediaElement控件提供了设置或获取参数的功能,而方法则让MediaElement控件执行具体的行为。下面是MediaElement控件中常用的、比较重要的方法:

q  Play(),从当前位置开始播放媒体。

q  Pause(),在当前位置暂停播放媒体。

q  Stop(),停止播放媒体,使播放位置回到媒体的第1帧。

q  SetSource(),使用提供的媒体文件流设置Source属性。

Windows Store App 音频和视频的更多相关文章

  1. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  2. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  3. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  4. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

  5. Windows Store App Image开发示例

    通过上面的介绍,读者已经了解了Image对象及ImageBrush对象的使用方法和常用属性,在实际的开发工作中,比较常用的是Image对象,下面以一个幼儿园识物识字卡应用为例,来帮助读者更好的理解Im ...

  6. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  7. 01、Windows Store APP 设置页面横竖屏的方法

    在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...

  8. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

  9. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

随机推荐

  1. mysql 批量导出建表语句 (视图,函数同理)

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream;import ja ...

  2. 【前端】CommonJS的模块加载机制

    CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counte ...

  3. win7垃圾路径

    @echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._m ...

  4. 解决file_get_contents遇到中文文件名无法打开问题

    利用file_get_contents打开文件或采集远程服务器文件如果文名或url中碰到汉字中文那么会出现failed to open stream:Lnvalid argument in错误.   ...

  5. js小知识归纳(待续)

    1.javascript 中 if (window != top) top.location.href = location.href;的意思 如果当前窗口不是最上层窗口(比如是在Iframe中),那 ...

  6. &和&&

    int j = 5,k = 3; if(!(j==k) && (j == 1 + k++ )) { } System.out.println(j); System.out.printl ...

  7. Mac 安装 MySQL

    在 Mac 下用 Homebrew 安装 MySQL, 网上的教程倒是很多,不过大多数都很默契地雷同.如果稍有点定制要求,就无从下手了. 我先也不免俗,从基本的开始: 一.首先安装 Homebrew ...

  8. 关于composer安装插件时候提示找不到fxp插件时候的解决办法

    如果你在某个目录使用composer.phar,而且在别的目录页使用了composer,并没有全局安装composer的时候,不同目录之间的可能会互相干扰从而报错 root@tyr:/var/www/ ...

  9. MultipeerConnectivity框架,近场通信的基本使用

    Multipeer connectivity是一个使附近设备通过Wi-Fi网络.P2P Wi-Fi以及蓝牙个人局域网进行通信的框架.互相链接的节点可以安全地传递信息.流或是其他文件资源,而不用通过网络 ...

  10. mybatis动态切换数据源

    (#)背景:由于业务的需求,导致需要随时切换15个数据源,此时不能low逼的去写十几个mapper,所以想到了实现一个数据源的动态切换 首先要想重写多数据源,那么你应该理解数据源的一个概念是什么,Da ...