Сведения о топологиях
Топология — это объект, представляющий потоки данных в конвейере. Приложение создает топологию, чтобы описать путь, который каждый поток принимает из источника мультимедиа в приемник мультимедиа. Приложение передает топологию в сеанс мультимедиа, а сеанс мультимедиа использует топологию для управления потоком данных.
Компоненты обработки данных в конвейере (источники мультимедиа, преобразования и приемники мультимедиа) представлены в топологии как узлы. Поток данных из одного компонента в другой представлен соединением между узлами. Определены следующие типы узлов:
- Исходный узел: представляет поток мультимедиа в источнике мультимедиа.
- Узел преобразований: это компонент Media Foundation, выполняющий преобразования (MFT).
- Выходной узел: представляет собой потоковый приемник в составе медиаприемника.
- Узел Tee: представляет разветвление в потоке. Узлы ветвления (tee) являются исключением из правила о том, что узел представляет объект конвейера. В отличие от других типов узлов, tee node просто направляет поток данных.
Функционирующая топология должна содержать по крайней мере один узел-источник, подключённый к выходному узлу, возможно, через один или несколько узлов преобразования. Например, на следующей схеме показана простая топология с одним потоком.
Для воспроизведения файлов узел преобразования может представлять декодатор, а выходной узел будет представлять отрисовщик звука или видео. Для кодирования файлов узел преобразования будет представлять кодировщик, а выходной узел будет представлять архивное хранилище, например, приемник ASF-файлов.
Если два узла подключены, узел, который создает данные, называется входящий узел, а узел, получающий данные, называется исходящий узел. Например, на предыдущей схеме исходный узел находится выше по потоку от узла трансформации.
В паре подключенных узлов точка подключения на вышестоящем узле называется выходом. Точка подключения, расположенная ниже по потоку, называется вход. На следующей схеме показана пара узлов с точками подключения и потоком данных между ними. Точки подключения не представлены в виде отдельных объектов в топологии. Они задаются по значению индекса в объекте узла.
Исходный узел не может иметь входных данных. Таким образом, не может быть никаких узлов перед исходным узлом. Аналогичным образом выходной узел не может иметь выходные данные и не может быть ни одного узла внизу из выходного узла. Цепочка узлов из исходного узла в выходной узел называется ветвью топологии. Первая схема в этом разделе показывает топологию с одной ветвью. Как правило, на поток приходится одна ветвь. Для воспроизведения файла с одним аудиопотоком и одним видеопотоком требуется топология с двумя ветвями.
Частичные топологии
Полная или завершённая топология содержит узел для каждого необходимого объекта потока данных. Однако приложению не всегда требуется создать полную топологию. Вместо этого он создает частичную топологию, которая исключает один или несколько узлов преобразования.
Сеанс мультимедиа завершает топологию с помощью объекта, называемого загрузчиком топологии . Загрузчик топологии преобразует частичные топологии в полные топологии путем вставки необходимых преобразований. Процесс преобразования называется разрешением топологии.
Например, для воспроизведения закодированного звукового потока топология должна иметь декодатор между исходными и выходными узлами. Приложение создает частичную топологию, которая подключает исходный узел непосредственно к выходному узлу без декодатора. Загрузчик топологии проверяет форматы потоков, находит правильный декодатор и вставляет узел преобразования в топологию.
На следующей схеме показана частичная топология, созданная приложением.
На следующей схеме показана полная топология после завершения обработки загрузчиком топологии. В этом примере загрузчик топологии вставил узел преобразования для декодера.
В текущей версии Media Foundation загрузчик топологии поддерживает топологии для воспроизведения. Для кодирования файлов и других сценариев приложение должно создать полную топологию.
Приложения также могут создавать загрузчик топологии и использовать его напрямую. Например, можно использовать загрузчик топологии для разрешения частичной топологии, а затем изменить полную топологию, прежде чем предоставлять его сеансу мультимедиа. Чтобы создать загрузчик топологии, вызовите MFCreateTopoLoader.
Связанные разделы