Silverlight学习笔记(十二)-----多媒体 MediaElement
Silverlight 的视频和音频都是通过 MediaElement 对象实现回放的。MediaElement 对象具有 AutoPlay 属性,默认值 = true; Source 是指定播放器的源文件(可以是网络地址)。
对于 MediaElement 对象显示的大小尺寸,大概有三种方式:
一、对于 MediaElement 的 Width 和 Height 属性,有三种情况:
- 没有声明,那么 MediaElement 会按照视频的原始尺寸显示;
- 一旦设置了宽高属性,MediaElement 则会根据尺寸的大小播放;
- 只声明单一的Width或Height 属性,MediaElement 会根据比例来拉伸视频。
二、同样的,MediaElement 也支持类似图片的的 Stretch 属性,分别是 Fill (填充拉伸)、None (不拉伸)、Uniform (等比)、UniformToFill (等比填充)。
三、取消 UserControls 和 Grid 的 Width 和 Height 的属性即可将视频的大小和浏览器的尺寸始终保持一致。
MediaElement 状态管理
MediaElement 在播放多媒体文件的过程中会返回播放的状态 CurrentState 和一个状态时间 CurrentStateChanged 事件,通过他们可以监听 MediaElement 对象的实时状态。
CurrentState 状态有:
- Buffering:缓冲区未满,此时正在加载要播放的媒体。在此状态中,Position (播放的位置)不能够向前。
- Closed:不包含媒体,媒体已关闭。
- Opening:正在尝试打开 Source 属性指定的 URI,将开始进行缓冲或下载。
- Paused:暂停播放。
- Playing:正在播放。
- Stopped:包含媒体地址,可能是未开始播放或已经停止播放。
缓冲进度(BufferingProgress)和下载进度(DownloadProgress)
- DownloadProgress 代表多媒体内容下载的进度,通常是在使用 HTTP 或 HTTPS 的 URI 来显示内容的,一般当渐进式的下载不可用或者不支持时会要求下载完整个多媒体资源后再能播放。
- BufferingProgress 代表多媒体缓冲值,介于0到1之间,显然可以将它的值乘以100来表示缓冲的百分比值。杜宇一般的多媒体资源,当缓冲到5%或完成缓冲后就会引发 BufferingProgressChanged 事件,在事件中,我们就可以获取当前的缓冲值(因为MediaElement 只有当缓冲满时才会播放多媒体文件)。另外我们还可以手动设置缓冲的时间,即设置 BufferingTime属性(标准时间格式),当网络条件不好时,适当调整缓冲时间可以减少视频音频的暂停时间。
在播放多媒体资源时,MediaElement 除了可以返回播放状态、下载和缓冲意外,还可以通过 NaturalDuration 和 Position 来获得播放资源的位置。其中 Position 支持 get 和 set 访问.