互斥
[与此页面关联的功能(Windows Media Format 11 SDK)是一项旧功能。 它已被 源读取器 和 接收器编写器取代。 源读取器 和 接收器编写器 已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 源读取器 和 接收器编写器,而不是 Windows 媒体格式 11 SDK。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
每个 ASF 文件都包含一个或多个流,每个流都包含数字媒体数据。 在正常情况下,每个流都与单个输出相关联。 在播放时,读取器对象会为每个输出提供示例。 因此,作为默认值,ASF 文件中的每一个流都会在播放时由读取器传送。
在某些情况下,你不希望将每个流传送到客户端。 例如,如果创建一个包含五个音频流的视频文件,其中一个用于五种语言,则一次只希望传送其中一种语言。 相互排除是 Windows 媒体格式 SDK 的一项功能,可用于指定许多相互排斥的流,这些流都等同于同一输出。
在用于创建文件的配置文件中定义相互排除。 使用相互排除对象在配置文件中配置相互排除。 一次向相互排除对象添加一个流,设置类型,并在配置文件中包含该对象。
Windows 媒体格式 SDK 可识别四种类型的相互排斥:
- 比特率
- 语言
- 介绍
- 未知
按比特率相互排除
比特率相互排除是一种特殊的相互排斥类型,通常称为多比特率(MBR)相互排除。 MBR 互斥包含许多流,这些流都源自同一输入,但以不同的比特率进行编码。 使用 MBR 播放文件时,读取器会根据可用带宽确定要使用的最佳流。
Windows 媒体格式 SDK 支持用于音频和视频流的 MBR。 SDK 还支持称为多个视频大小的 MBR 的特殊类型的 MBR 视频。 这类似于普通 MBR 视频,不同的是单个流可以具有不同的帧大小。 例如,可能有一些流的默认 320 x 240 视频大小,有些流具有较高的比特率和 640 x 480 视频大小。
按语言相互排除
基于语言的相互排斥旨在与以多种语言录制的内容(通常为音频)一起使用。 基于语言的相互排斥包括多个源自唯一输入的流。 每个输入都是相同的内容,但采用不同的语言。
若要按语言相互排除,阅读应用程序必须包含逻辑以选择适当的语言。 如果编写应用程序来播放 ASF 文件,并且想要支持基于语言的相互排除的文件,则应在开始播放之前选择相应的流。
按演示文稿相互排除
提供了基于演示文稿的相互排斥,以支持包含使用不同纵横比编码的相同内容的视频流。 通常,在信箱版本(纵横比为 16:9)中提供视频,以及为电视屏幕设置格式(纵横比 4:3)时,使用此方法。
用于播放的演示文稿的选择通常由用户确定。 如果编写应用程序来播放 ASF 文件,并且想要支持具有基于演示文稿的相互排除的文件,则应向用户显示选择用于查看的演示文稿类型的选项。
未知互斥
可以根据喜欢的任何条件创建相互排除。 应使用未知类型创建所有自定义互斥类型。
高级互斥功能
还可以使用相互排除将流分配给彼此互斥的组。 例如,你可能想要使用多种语言的音频流,并为每个流分配不同的视频流。 使用相互排斥将每个音频流与其对应的视频流分组,并使所有组互斥。
读取器会自动选择所有互斥项的流。 对于除 MBR 和基于语言的相互排除以外的所有类型的互斥,读取器始终选择默认流,这是添加到配置文件中相互排除对象的第一个流。 对于 MBR,读取器选择最适合播放时可用带宽的流。 如果不想使用默认流,可以在开始读取文件之前将流选择设置为手动。
手动流选择适用于整个文件。 在同一文件中存在不同类型的相互排除时,可能会出现困难。 例如,文件可以包含基于比特率的相互排斥和自定义互斥。 若要选择自定义互斥中的默认值以外的流,必须使用手动流选择。 但是,如果使用手动流选择,则读取器不会自动选择多个比特率流。 如果计划在单个文件中支持多种类型的相互排斥,则必须在应用程序中规划此最终性。 这通常意味着为通常自动类型的相互排斥创建自己的流选择例程。
相关主题