互相排斥

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

每个 ASF 文件包含一个或多个流,每个流都包含数字媒体数据。 在正常情况下,每个流都与单个输出相关联。 播放时,读取器对象会为每个输出提供示例。 因此,默认情况下,ASF 文件中的每个流都由阅读器在播放时传送。

在某些情况下,你不希望将每个流都传送到客户端。 例如,如果创建一个包含五个音频流的视频文件,其中每五种语言各有一个,则你希望一次只传送其中一种语言。 相互排除是 Windows 媒体格式 SDK 的一项功能,可用于指定多个互斥流,这些流都等同于相同的输出。

互斥是在用于创建文件的配置文件中定义的。 使用互斥对象在配置文件中配置相互排除。 一次向互斥对象添加一个流,设置类型,并在配置文件中包含 对象。

Windows Media Format SDK 可识别四种类型的相互排斥:

  • 比特率
  • 语言
  • 呈现
  • 未知

互斥(按比特率)

比特率互斥是一种特殊类型的互斥,通常称为多比特率 (MBR) 互斥。 MBR 互斥包含许多流,这些流都源自同一输入,但以不同的比特率编码。 使用 MBR 播放文件时,读取器会根据可用带宽确定要使用的最佳流。

Windows Media Format SDK 支持对音频和视频流使用 MBR。 SDK 还支持一种特殊类型的 MBR 视频,称为多视频大小 MBR。 这与普通 MBR 视频类似,只不过各个流可以具有不同的帧大小。 例如,你可能有一些视频流的默认大小为 320 x 240,而另一些流具有更高的比特率和 640 x 480 视频大小。

相互排斥(按语言)

基于语言的互斥设计用于内容 (通常是以多种语言录制的音频) 。 基于语言的互斥包括多个源自唯一输入的流。 每个输入都是相同的内容,但采用不同的语言。

若要按语言相互排除才能正常工作,阅读应用程序必须包含选择相应语言的逻辑。 如果编写应用程序来播放 ASF 文件,并且想要支持基于语言的相互排除的文件,则应在开始播放之前选择适当的流。

相互排斥(按表示)

提供基于演示文稿的互斥,以支持包含以不同纵横比编码的相同内容的视频流。 通常,在 (纵横比为 16:9) 的信箱版本中提供视频,以及为电视屏幕设置格式 (纵横比 4:3) 时,会使用此方法。

选择用于播放的演示文稿通常由用户决定。 如果编写应用程序来播放 ASF 文件,并希望支持具有基于演示文稿的互斥的文件,则应向用户提供选择演示文稿类型以供查看的选项。

未知的相互排斥

可以根据喜欢的任何条件创建互斥。 应使用未知类型创建所有自定义互斥类型。

高级互斥功能

还可以使用互斥将流分配给彼此互斥的组。 例如,你可能希望使用多种语言的音频流,并为每个语言分配不同的视频流。 使用互斥将每个音频流与其相应的视频流分组,并使所有组互斥。

读取器会自动为所有互斥选择流。 对于除 MBR 和基于语言的互斥以外的所有类型的互斥,读取器始终选择默认流,这是添加到配置文件中相互排除对象的第一个流。 对于 MBR,读取器会在播放时选择最适合可用带宽的流。 如果不想使用默认流,可以在开始读取文件之前将流选择设置为手动。

手动流选择适用于整个文件。 如果同一文件中存在不同类型的相互排斥,则可能会出现困难。 例如,文件可以同时包含基于比特率的互斥和自定义互斥。 若要选择自定义互斥中默认流以外的流,必须使用手动流选择。 但是,如果使用手动流选择,读取器不会自动选择多比特率流。 如果计划在单个文件中支持多种类型的相互排斥,则必须在应用程序中规划此可能性。 通常,这意味着为通常自动的互斥类型创建自己的流选择例程。

ASF 文件功能

使用互斥