输入、流和输出

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

本文档中的“输入”是应用程序使用适当 API 从源传送到编写器对象的任何数字媒体数据流 (,例如音频或视频) 。 输入必须以支持的格式传递。 支持多种标准 RGB 和 YUV 格式作为输入,音频编解码器支持 PCM。 如果编解码器本身不支持指定的输入格式,则编写器对象将实例化能够将各种格式转换为编解码器可以接受的格式的音频或视频帮助程序对象。 对于音频输入,帮助程序对象将根据需要调整位深度、采样率和通道数。 对于视频输入,视频帮助程序对象将执行颜色空间转换和矩形大小调整。 在某些情况下,压缩的音频和视频数据可以在输入流中传递。 除音频和视频以外,输入可能属于其他一些媒体类型,例如文本、脚本命令、静止图像或任意文件数据。

本文档中的“输出”是指读取器对象传递给应用程序进行呈现的数据。 输出相当于播放时的单个流。 如果使用互斥,则所有互斥流共享单个输出。 通常,输出数据采用未压缩的音频或视频数据的形式,尽管它可以包含任何类型的数据。 本文档的其他位置列出了受支持的视频输出格式。

本文档中的术语“stream”是指 ASF 文件中的数据,而不是 (1) 编写器对象处理输入源数据之前的数据,并在读取器对象解压缩输出数据后 (2) 输出数据。 ASF 流包含来自编写器对象上的单个输入的数据,但可以从同一输入创建多个流。 流从头到尾具有相同的格式和压缩设置。 一个简单的 ASF 文件有两个流,一个用于音频,一个用于视频。 更复杂的文件可能具有两个音频流和多个视频流。 音频流可能具有相同的压缩设置,但包含不同的内容,例如不同语言的旁白。 视频流可能包含相同的内容,但具有不同的压缩设置。 编写器对象将应用于每个流的媒体格式和压缩设置在配置文件中指定。

输入、流和输出之间的关系可以是三种基本类型。 以下三个关系图说明了这些关系。

在最基本的关系(即没有任何相互排斥的配置文件)中,每个输入都由编写器处理,并作为单个流插入到 ASF 文件中。 播放时,读取器读取流并将未压缩的示例作为单个输出提供,如下图所示。

显示输入、流和输出之间的正常关系的示意图。

使用多个比特率互斥时,会发生更复杂的关系。 在这种情况下,单个输入由编写器处理,并采用多个比特率进行编码。 数据的每个编码都作为单独的流插入到 ASF 文件中。 播放时,读取器根据可用带宽确定要解压缩的流。 然后,读取器读取所选流,并将未压缩的示例作为单个输出提供,如下图所示。

此图显示了使用多个比特率互斥时输入、流和输出之间的关系。

使用基于语言的或自定义的互斥时,可能会出现第三种类型的关系。 在此关系中,读取器处理多个输入,每个输入作为单个流插入 ASF 文件。 在播放时,应用程序会根据提供的逻辑手动选择要解压缩的流。 然后,读取器读取所选流,并将未压缩的示例作为单个输出提供。 此过程可用于包括多种语言的配乐。 下图演示了此过程。

显示使用自定义互斥时输入、流和输出之间的关系的关系图。

上述关系存在一些差异。 例如,一个文件可以包含所有三个关系,也可以包含其中一个或两个关系。 还可以压缩某些输入,在这种情况下,编写器不会执行其他压缩。 读取器还可以提供压缩的示例。 但是,当它这样做时,必须按流编号(而不是输出编号)访问它们。

注意

输入、蒸汽和输出都是由 Windows 媒体格式 SDK 的对象分配的数字。 流具有在配置文件中定义的流编号(从 1 开始)。 还会为每个流分配一个流索引,用于枚举配置文件中的流。 这些数字都不能保证彼此一致。 也就是说,输入数字 1 可能与流 1 不对应,流编号 1 可能与流索引 1 不对应,依此。

 

概念

互斥