关于拓扑
拓扑是一个对象,表示数据在管道中的流动方式。 应用程序创建一个拓扑来描述每个流从媒体源到媒体接收器的路径。 应用程序将拓扑传递到媒体会话,媒体会话使用该拓扑来控制数据流。
管道中的数据处理组件 (媒体源、转换和媒体接收器) 在拓扑中表示为 节点。 从一个组件到另一个组件的数据流由节点之间的连接表示。 定义了以下节点类型:
- 源节点:表示媒体源上的媒体流。
- 转换节点:表示媒体基础转换 (MFT) 。
- 输出节点:表示媒体接收器上的流接收器。
- Tee 节点:表示流中的分支。 Te 节点是节点表示管道对象的规则的例外。 与其他节点类型不同,tee 节点只是指导数据流。
正常运行的拓扑必须包含至少一个连接到输出节点的源节点,可能通过一个或多个转换节点。 例如,下图显示了一个包含一个流的简单拓扑。
对于文件播放,转换节点可能表示解码器,输出节点表示音频或视频呈现器。 对于文件编码,转换节点表示编码器,输出节点表示存档接收器,例如 ASF 文件接收器。
如果两个节点已连接,则生成数据的节点称为上游节点,接收数据的节点称为下游节点。 例如,在上图中,源节点从转换节点上游。
在一对连接的节点中,上游节点上的连接点称为输出。 下游节点上的连接点称为 输入。 下图显示了一对节点及其连接点,以及它们之间的数据流。 连接点在拓扑中不表示为单独的对象。 它们由节点对象上的索引值指定。
源节点不能有任何输入。 因此,无法从源节点上游任何节点。 同样,输出节点不能具有输出,并且输出节点下游不能有任何节点。 从源节点到输出节点的节点链称为拓扑的 分支 。 本主题中的第一张图显示了具有单个分支的拓扑。 通常每个流有一个分支。 例如,若要播放包含一个音频流和一个视频流的文件,需要具有两个分支的拓扑。
部分拓扑
完整或 完整 拓扑包含所需的每个管道对象的节点。 但是,应用程序并不总是需要创建完整的拓扑。 相反,它会 创建省略 一个或多个转换节点的部分拓扑。
媒体会话使用名为拓扑 加载程序的对象完成拓扑。 拓扑加载程序通过插入所需的转换将部分拓扑转换为完整拓扑。 转换过程称为 解析 拓扑。
例如,若要播放编码的音频流,拓扑必须在源节点和输出节点之间具有解码器。 应用程序创建一个部分拓扑,该拓扑将源节点直接连接到输出节点,而无需解码器。 拓扑加载程序检查流格式,查找正确的解码器,并将转换节点插入拓扑。
下图显示了应用程序创建的部分拓扑。
下图显示了拓扑加载程序解析后的完整拓扑。 在此示例中,拓扑加载程序为解码器插入了转换节点。
在当前版本的 Media Foundation 中,拓扑加载程序支持用于播放的拓扑。 对于文件编码和其他方案,应用程序必须构造完整的拓扑。
应用程序还可以创建拓扑加载程序并直接使用它。 例如,可以使用拓扑加载程序解析部分拓扑,然后修改完整拓扑,然后再将其分配给媒体会话。 若要创建拓扑加载程序,请调用 MFCreateTopoLoader。
相关主题