Windows Store App 音频和视频
在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 音频和视频的更多相关文章
- 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)
这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...
- Windows Store App 过渡动画
Windows Store App 过渡动画 在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...
- Windows store app[Part 4]:深入WinRT的异步机制
接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...
- Windows store app[Part 3]:认识WinRT的异步机制
WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...
- Windows Store App Image开发示例
通过上面的介绍,读者已经了解了Image对象及ImageBrush对象的使用方法和常用属性,在实际的开发工作中,比较常用的是Image对象,下面以一个幼儿园识物识字卡应用为例,来帮助读者更好的理解Im ...
- 05、Windows Store app 的图片裁切(更新)
在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...
- 01、Windows Store APP 设置页面横竖屏的方法
在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...
- Windows store app[Part 1]:读取U盘数据
Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...
- Windows Store App JavaScript 开发:获取文件和文件夹列表
在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...
随机推荐
- bzoj 1079 着色方案
题目: 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其 中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得 ...
- [mysql]throw exception
CREATE PROCEDURE pro_throwException (errorCode char(5), errorMessage text) BEGIN SIGNAL SQLSTATE err ...
- libevent源码分析:time-test例子
time-test例子是libevent自带的一个例子,通过libevent提供的定时事件来实现,间隔固定时间打印的功能. /* * gcc -g -o time-test time-test.c - ...
- Linux signal 常见的信号含义表
http://blog.csdn.net/xgjianstart/article/details/4544418 通过命令 kill -l 可查看全部信号 SIGHUP 终止进程 终端线路挂断 本信 ...
- 修改C:\WINDOWS\system32\drivers\etc\hosts 文件有什么作用
host是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会 ...
- UIButton的文本与图片的布局
UIButton内部文本和图片的布局是我们日常代码中,不可缺少的部分,按钮默认左边图片右边文本,那要实现左边文本,右边图片,我们该怎么解决呢,上面图片,下面文本又该怎么办呢 其实很简单,今天总结下,目 ...
- 【所见即所得】textarea 精确限制字数、行数,中、英、全半角混检 。源码带注释
主要解决难点: 1 中文 全角2字符深深的恶意 2 多行输入textarea 手动,自动换行问题 3 获得每行内容 原创,转载请注明出处! <!DOCTYPE html PUBLIC " ...
- Signatures of Mutational Processes in Human Cancer
http://cancer.sanger.ac.uk/cosmic/signatures#
- LMAX Disruptor—多生产者多消费者中,消息复制分发的高性能实现
解决的问题 当我们有多个消息的生产者线程,一个消费者线程时,他们之间如何进行高并发.线程安全的协调? 很简单,用一个队列. 当我们有多个消息的生产者线程,多个消费者线程,并且每一条消息需要被所有的消费 ...
- 个人博客作业Week1
个人博客作业Week1 一.问题 通读<构建之法>我有一下几个问题 PM没有参与代码编如何进行管理. 软件工程师的职业资格考试对我们来说很有必要吗. 当我们为用户开发软件时我们需要了解用户 ...