在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属性。