Сведения о топологиях

Топология — это объект, который представляет поток данных в конвейере. Приложение создает топологию для описания пути, который каждый поток принимает из источника мультимедиа в приемник мультимедиа. Приложение передает топологию в сеанс мультимедиа, а сеанс мультимедиа использует топологию для управления потоком данных.

Компоненты обработки данных в конвейере (источники мультимедиа, преобразования и приемники мультимедиа) представлены в топологии в виде узлов. Поток данных из одного компонента в другой представлен соединением между узлами. Определены следующие типы узлов:

  • Узел источника: представляет поток мультимедиа в источнике мультимедиа.
  • Узел преобразования: представляет преобразование Media Foundation (MFT).
  • Выходной узел. Представляет приемник потока в приемнике мультимедиа.
  • Tee node: представляет вилку в потоке. Тройники являются исключением из правила, согласно которому узел представляет объект конвейера. В отличие от других типов узлов, тройник просто направляет поток данных.

Работающая топология должна содержать по крайней мере один исходный узел, подключенный к узлу вывода, возможно, через один или несколько узлов преобразования. Например, на следующей схеме показана простая топология с одним потоком.

Схема, показывающая топологию с одним потоком.

Для воспроизведения файлов узел преобразования может представлять декодер, а выходной узел — аудио- или видео отрисовщик. Для кодирования файлов узел преобразования будет представлять кодировщик, а выходной узел — приемник архива, например приемник файлов ASF.

Если два узла соединены, узел, который создает данные, называется узлом вышестоящий, а узел, получающий данные, называется подчиненным узлом. Например, на предыдущей схеме исходный узел вышестоящий из узла преобразования.

В паре подключенных узлов точка подключения на узле вышестоящий называется выходными данными. Точка подключения на подчиненном узле называется входной точкой. На следующей схеме показана пара узлов с точками подключения и поток данных между ними. Точки подключения в топологии не представлены в виде отдельных объектов. Они задаются значением индекса объекта node.

Схема, показывающая два соединенных узла.

Исходный узел не может иметь входные данные. Поэтому не может быть узлов, вышестоящий из исходного узла. Аналогичным образом, выходной узел не может иметь выходные данные, а также не может быть ни одного нижестоящего узла от выходного узла. Цепочка узлов от исходного узла до выходного узла называется ветвью топологии. На первой схеме в этом разделе показана топология с одной ветвью. Как правило, на поток приходится одна ветвь. Например, для воспроизведения файла с одним аудиопотоком и одним видеопотоком требуется топология с двумя ветвями.

Частичные топологии

Полная или полная топология содержит узел для каждого необходимого объекта конвейера. Однако приложению не всегда требуется создавать полную топологию. Вместо этого создается частичная топология, которая пропускает один или несколько узлов преобразования.

Сеанс мультимедиа завершает топологию с помощью объекта, называемого загрузчиком топологии. Загрузчик топологий преобразует частичные топологии в полные путем вставки необходимых преобразований. Процесс преобразования называется разрешением топологии.

Например, для воспроизведения закодированного аудиопотока топология должна иметь декодер между исходным и выходным узлами. Приложение создает частичную топологию, которая подключает исходный узел непосредственно к выходному узлу без декодера. Загрузчик топологии проверяет форматы потоков, находит нужный декодер и вставляет в топологию узел преобразования.

На следующей схеме показана частичная топология, созданная приложением.

Схема, показывающая часть с исходным и выходным узлом.

На следующей схеме показана полная топология после ее разрешения загрузчиком топологии. В этом примере загрузчик топологии вставляет узел преобразования для декодера.

Схема, на которую показана полная топология.

В текущей версии Media Foundation загрузчик топологий поддерживает топологии для воспроизведения. Для кодирования файлов и других сценариев приложение должно создать полную топологию.

Приложения также могут создавать загрузчик топологии и использовать его напрямую. Например, вы можете использовать загрузчик топологии для разрешения частичной топологии, а затем изменить полную топологию перед ее предоставлением сеансу мультимедиа. Чтобы создать загрузчик топологии, вызовите MFCreateTopoLoader.

Топологии