深入探索Silverlight中的音视频播放与处理
立即解锁
发布时间: 2025-08-26 01:42:26 阅读量: 13 订阅数: 46 AIGC 

### 深入探索Silverlight中的音视频播放与处理
#### 1. 媒体控制命令
Silverlight 为媒体播放提供了一系列丰富的控制命令,这些命令涵盖了播放、录制、快进、音量调节等多个方面,为用户提供了全面的媒体操作体验。以下是详细的命令列表:
| 命令 | 描述 |
| --- | --- |
| Stop | 停止播放并返回开头或上一状态 |
| Record | 开始录制,通常为切换模式,再次点击停止录制 |
| FastForward | 以加速模式向前移动媒体 |
| Rewind | 以加速模式向后移动媒体 |
| NextTrack | 跳转到下一个轨道或媒体文件 |
| PreviousTrack | 跳转到上一个轨道或媒体文件 |
| IncreaseVolume | 音量增加一级 |
| DecreaseVolume | 音量降低一级 |
| MuteVolume | 暂时静音 |
| ChannelUp | 切换到下一个音频通道 |
| ChannelDown | 切换到上一个音频通道 |
此外,在 Xbox 上的 Silverlight 还有一些特定的媒体命令,包括 Menu、Title、Info、Display、Guide 和 TV。
#### 2. 客户端播放列表
Silverlight 支持 Windows Media 元文件,这些文件本质上是指向一个或多个其他媒体文件的播放列表。常见的文件扩展名有 .wax、.wvx、.wmx、.wpl 或 .asx。不过,这些文件的某些功能(如脚本命令)不被支持,使用可能会导致错误。以下是一个简单的播放列表示例,指向两个视频文件:
```xml
<asx version="3.0">
<title>Two Video Playlist</title>
<entry>
<title>Video 1</title>
<ref href="Video1.wmv" />
</entry>
<entry>
<title>Video 2</title>
<ref href="Video2.wmv" />
</entry>
</asx>
```
如果将 MediaElement 的 Source 属性指向这个文件,它将先播放 Video1.wmv(假设文件存在),然后立即播放 Video2.wmv。通常,.asx 文件会与 .asf 流式文件一起使用,此时 .asx 文件会包含指向 .asf 流式文件的链接。
#### 3. 服务器端播放列表
使用 Windows Media Services 进行视频流传输时,可以创建服务器端播放列表。服务器端播放列表在服务器上处理,允许将多个视频组合成一个流,而不向用户透露每个视频的来源。这为在视频流中集成广告提供了一种有效方式,例如在请求的视频前插入广告。服务器端播放列表通常使用 .wsx 文件扩展名,包含 XML 标记,示例如下:
```xml
<?wsx version="1.0"?>
<smil>
<seq id="sq1">
<media id="video2" src="Video1.wmv" />
<media id="video1" src="Advertisement.wmv" />
<media id="video2" src="Video2.wmv" />
</seq>
</smil>
```
根元素为 `<smil>`,其中 `<seq>` 元素表示视频文件的有序序列,每个视频由 `<media>` 元素表示。更复杂的服务器端播放列表可以实现视频重复播放、剪辑长视频以及指定错误时播放的视频等功能。
#### 4. 渐进式下载与流式传输
通常情况下,如果不采取特殊措施,Silverlight 使用渐进式下载播放媒体文件。这意味着客户端使用标准 HTTP 协议逐块下载媒体文件,当积累了足够的缓冲区以支持几秒的播放时,开始播放媒体文件,并在后台继续下载剩余部分。渐进式下载的优点在于客户端几乎可以立即开始播放媒体文件,文件总长度对初始播放延迟没有影响,唯一的影响因素是比特率。此外,它不需要特殊的服务器软件,适用于任何 Web 服务器。
流式传输则使用专门的有状态协议从 Web 服务器向客户端发送数据,它具备渐进式下载的即时播放能力,且效率更高。从渐进式下载切换到流式传输可以使 Web 服务器的可扩展性提高两到三倍,即可以同时为三倍数量的用户提供相同的视频内容。然而,流式传输需要专用的服务器端软件(如 Windows Media Services),配置和维护媒体流服务器比托管使用渐进式下载的应用程序要复杂得多。
需要注意的是,如果使用以 http:// 或 https:// 开头的 URL 的 MediaElement,Silverlight 会开始渐进式下载;如果使用以 mms:// 开头的 URL,Silverlight 会尝试流式传输,若失败则回退到渐进式下载。另外,“流式传输”这个词并不总是在上述技术意义上使用,例如 Microsoft 的 Silverlight Streaming 服务,尽管名称中包含“流式传输”,但实际上它只是提供视频文件,允许客户端进行渐进式下载。
#### 5. 优化渐进式下载
如果不想承担配置和维护 Windows Media Services 服务器的复杂性,或者使用的 Web 主机不提供此服务,应用程序将使用渐进式下载。以下是一些优化渐进式下载的最佳实践:
- **提供同一媒体文件的多个版本**:对于大型媒体文件,为了支持不同连接速度的用户,可以在应用程序中提供让用户指定带宽的选项。如果用户选择低速带宽,可以无缝加载较小的媒体文件到 MediaElement 中。但普通用户可能并不清楚自己的带宽,而且计算机处理视频数据的能力还会受到其他因素(如当前 CPU 负载或无线连接质量)的影响。
- **调整 MediaElement 的 BufferingTime 属性**:通过设置 MediaElement 的 BufferingTime 属性,可以控制 Silverlight 在渐进式下载中缓冲的内容量。默认值为 5 秒的播放量,但对于需要在低带宽连接上播放的高质量视频,可能需要不同的缓冲时间。较长的 BufferingTime 值不能使慢速连接播放高比特率的视频文件(除非几乎缓冲整个文件),但可以平滑不稳定的连接,提供更多的缓冲空间。
- **让用户了解下载进度**:向客户端显示特定媒体文件的下载进度通常很有用。可以使用 DownloadProgressChanged 事件,该事件在 Silverlight 每次达到 5% 的下载阈值时触发(如下载到 5%、10%、15% 等),文件完全下载时也会触发。触发时,可以读取 DownloadProgress 属性来确定当前文件的可用比例(值范围为 0 到 1),并使用此信息设置矩形的宽度,从而创建下载进度条。
- **告知用户缓冲区状态**:可以使用 BufferingProgressChanged 事件响应缓冲区的填充情况,并读取 BufferingProgress 属性来了解缓冲区中的内容量(值范围为 0 到 1)。例如,当 BufferingTime 值为 5 秒时,BufferingProgress 值为 1 表示客户端已拥有完整的 5 秒媒体,值为 0.5 表示缓冲区半满,只有 2.5 秒的可用内容。这可能提供了过多的信息,但也可以向用户解释为什么媒体文件在当前连接下无法成功缓冲。
- **使用比特率限制和 IIS 平滑流式传输**:比特率限制可以提高 Web 服务器的可扩展性,IIS 平滑流式传输可以显著提高视频性能。这两个功能将在“自适应流式传输”部分详细介绍。
#### 6. 自适应流式传输
近年来,趋势已从传统流式传输转向自适应流式传输,它在幕后使用渐进式下载和普通 HTTP 协议
0
0
复制全文
相关推荐









