输入、流和输出

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

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

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

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

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

在最基本的关系中,这是一个没有相互排斥的配置文件,每个输入由编写器处理,并作为单个流插入 ASF 文件中。 在播放时,读取器读取流并将未压缩的示例作为单个输出传送,如下图所示。

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

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

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

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

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

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

注意

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

 

概念

相互排斥