Media Foundation ( MF ) — это основанный на COM конвейер и инфраструктурная платформа мультимедийной инфраструктуры для цифровых медиа в Windows Vista , Windows 7 , Windows 8 , Windows 8.1 , Windows 10 и Windows 11. Это предполагаемая замена для Microsoft DirectShow , Windows Media SDK , DirectX Media Objects (DMO) и всех других так называемых «устаревших» мультимедийных API, таких как Audio Compression Manager (ACM) и Video for Windows (VfW) . Предполагается, что существующая технология DirectShow будет заменена на Media Foundation шаг за шагом, начиная с нескольких функций. Некоторое время Media Foundation и DirectShow будут сосуществовать. Media Foundation не будет доступен для предыдущих версий Windows, включая Windows XP .
Первый выпуск, представленный в Windows Vista , фокусируется на качестве воспроизведения аудио и видео, контенте высокой четкости (т. е. HDTV ), защите контента и более унифицированном подходе к управлению доступом к цифровым данным для управления цифровыми правами (DRM) и его совместимости. Он интегрирует DXVA 2.0 для разгрузки большей части конвейера обработки видео на оборудование для лучшей производительности. Видео обрабатываются в цветовом пространстве, в котором они были закодированы, и передаются оборудованию, которое составляет изображение в его собственном цветовом пространстве. Это предотвращает промежуточные преобразования цветового пространства для повышения производительности. MF включает новый видеорендерер, называемый Enhanced Video Renderer (EVR), который является следующей итерацией VMR 7 и 9. EVR имеет лучшую поддержку времени воспроизведения и синхронизации. Он использует службу Multimedia Class Scheduler Service (MMCSS), новую службу , которая отдает приоритет обработке мультимедиа в реальном времени, чтобы резервировать ресурсы, необходимые для воспроизведения, без каких-либо разрывов или сбоев.
Во втором выпуске, включенном в Windows 7, реализована расширенная поддержка форматов мультимедиа и DXVA HD для ускорения HD-контента при использовании драйверов WDDM 1.1. [1]
Архитектура MF разделена на уровень управления , уровень ядра и уровень платформы . Уровень ядра инкапсулирует большую часть функциональности Media Foundation. Он состоит из конвейера media foundation, который имеет три компонента: Media Source , Media Sink и Media Foundation Transforms (MFT). Источник медиа — это объект, который действует как источник мультимедийных данных, как сжатых, так и несжатых. Он может инкапсулировать различные источники данных, такие как файл, сетевой сервер или даже видеокамеру, с специфичной для источника функциональностью, абстрагированной общим интерфейсом . Исходный объект может использовать объект распознавателя источника , который создает источник медиа из URI , файла или потока байтов. Поддержка нестандартных протоколов может быть добавлена путем создания для них распознавателя источника. Исходный объект также может использовать объект секвенсора для использования последовательности источников ( плейлиста ) или для объединения нескольких источников в один логический источник. Приемник медиа — это получатель обработанных мультимедийных данных. Медиаприемник может быть либо рендерером-приемником , который рендерит контент на выходном устройстве, либо архивным приемником , который сохраняет контент в постоянной системе хранения, такой как файл. Рендерер-приемник принимает несжатые данные в качестве входных данных, тогда как архивный приемник может принимать как сжатые, так и несжатые данные, в зависимости от типа выходных данных. Данные из источников мультимедиа в приемники обрабатываются MFT; MFT — это определенные функции, которые преобразуют данные в другую форму. MFT могут включать мультиплексоры и демультиплексоры, кодеки или эффекты DSP , такие как реверберация . Основной уровень использует такие службы, как доступ к файлам и сетевая синхронизация, для синхронизации рендеринга мультимедиа. Они являются частью уровня платформы , который предоставляет службы, необходимые для доступа к потокам байтов источника и приемника, часам представления и объектной модели, которая позволяет компонентам основного уровня функционировать асинхронно, и обычно реализуется как службы ОС. Пауза, остановка, быстрая перемотка вперед, назад или сжатие времени могут быть достигнуты путем управления часами представления.
Однако компоненты медиаконвейера не связаны; они просто представлены как отдельные компоненты. Приложение, работающее на уровне управления, должно выбрать, какие типы источников, преобразования и приемники необходимы для конкретной задачи обработки видео, и настроить «соединения» между компонентами (топологию ) для завершения конвейера потока данных. Например, для воспроизведения сжатого аудио/видеофайла конвейер будет состоять из объекта источника файла, демультиплексора для определенного формата контейнера файла для разделения аудио- и видеопотоков, кодеков для распаковки аудио- и видеопотоков, процессоров DSP для аудио- и видеоэффектов и, наконец, рендерера EVR, последовательно. Или для приложения захвата видео камкордер будет выступать в качестве видео- и аудиоисточников, на которых MFT кодека будут работать для сжатия данных и подачи на мультиплексор, который объединяет потоки в контейнер; и, наконец, файловый приемник или сетевой приемник запишет их в файл или поток по сети. Приложение также должно координировать поток данных между компонентами конвейера. Уровень управления должен «вытягивать» (запрашивать) образцы из одного компонента конвейера и передавать их следующему компоненту для достижения потока данных в конвейере. Это контрастирует с моделью «push» DirectShow , где компонент конвейера передает данные следующему компоненту. Media Foundation обеспечивает защиту контента, размещая конвейер в защищенной среде выполнения, называемой Protected Media Path . Компоненты уровня управления должны распространять данные по конвейеру со скоростью, которую рендеринг синхронизирует с часами представления. Скорость (или время) рендеринга встроена как часть потока мультимедиа в виде метаданных. Исходные объекты извлекают метаданные и передают их. Метаданные бывают двух типов: кодированные метаданные , которые представляют собой информацию о скорости передачи данных и времени представления, и описательные метаданные , такие как название и имена авторов. Кодированные метаданные передаются объекту, который управляет сеансом конвейера, а описательные метаданные предоставляются приложению для использования, если оно того пожелает.
Media Foundation предоставляет объект Media Session , который можно использовать для настройки топологий и упрощения потока данных, без явного выполнения этого приложением. Он существует на уровне управления и предоставляет объект загрузчика Topology . Приложение указывает требуемую топологию конвейера загрузчику, который затем создает необходимые соединения между компонентами. Объект Media Session управляет задачей синхронизации с часами представления. Он создает объект часов представления и передает ссылку на него в приемник. Затем он использует события таймера из часов для распространения данных по конвейеру. Он также изменяет состояние часов для обработки запросов на паузу, остановку или возобновление от приложения.
Теоретически существует только одна архитектура Media Foundation, и это модель Media Session, Pipeline, Media Source, Transform и Media Sink. Однако эта архитектура может быть сложной для настройки, и существует значительный простор для легких, относительно простых в настройке компонентов MF, разработанных для обработки медиаданных для простых точечных решений. Таким образом, практические соображения потребовали реализации вариаций на основе фундаментальной конструкции Pipeline, и были разработаны такие компоненты, как Source Reader и Sink Writer, которые работают вне модели Pipeline. Некоторые источники [2] разделяют архитектуру Media Foundation на три общих класса.
Архитектура конвейера отличается использованием отдельного объекта Media Session и Pipeline. Медиаданные передаются из одного или нескольких Media Sources в один или несколько Media Sinks и, опционально, через ноль или несколько Media Transforms. Именно Media Session управляет потоком медиаданных через Pipeline, и этот Pipeline может иметь несколько разветвлений и ветвей. Приложение MF может получить доступ к медиаданным, когда они проходят от Media Source к Media Sink, реализуя пользовательский компонент Media Transform и вставляя его в соответствующее место в Pipeline.
Архитектура Reader-Writer использует компонент, называемый Source Reader, для предоставления медиаданных и компонент Sink Writer для их потребления. Source Reader содержит тип внутреннего конвейера, но он недоступен для приложения. Source Reader не является Media Source, а Sink Writer не является Media Sink, и ни один из них не может быть напрямую включен в Pipeline или управляться Media Session. В общем, медиаданные передаются от Source Reader к Sink Writer действиями приложения. Приложение либо принимает пакеты медиаданных (называемые Media Samples) от Source Reader и передает их напрямую Sink Writer, либо устанавливает функцию обратного вызова на Source Reader, которая выполняет ту же операцию. По сути, управляя транспортировкой данных, само приложение выполняет роль, аналогичную роли Media Session в приложении с архитектурой Pipeline. Поскольку приложение MF управляет передачей Media Samples между Source Reader и Sink Writer, оно всегда будет иметь доступ к необработанным медиаданным. Компоненты Source Reader и Sink Writer имеют ограниченную возможность автоматически загружать Media Transforms для помощи в преобразовании формата медиаданных, однако это делается внутренне, и приложение практически не имеет над этим контроля.
Source Reader и Sink Writer обеспечивают простоту использования, а Pipeline Architecture предлагает чрезвычайно сложный контроль над потоком медиаданных. Однако многие компоненты, доступные для Pipeline (например, Enhanced Video Renderer), просто не могут быть легко использованы в приложении архитектуры Reader-Writer. Поскольку структура Media Sample, созданного Source Reader, идентична структуре вывода Media Source, можно настроить Pipeline Architecture, в которой Media Samples перехватываются по мере прохождения через Pipeline, а копия передается Media Sink. Это известно как гибридная архитектура, и она позволяет иметь приложение, которое использует преимущества сложных возможностей обработки Media Session и Pipeline, используя при этом простоту использования Sink Writer. Sink Writer не является частью Pipeline и не взаимодействует с Media Session. По сути, медиаданные обрабатываются специальным Media Sink, называемым Sample Grabber Sink, который потребляет медиаданные и передает копию Sink Writer по мере их прохождения через Pipeline. Также возможно реализовать гибридную архитектуру с пользовательским Media Transform, который копирует Media Samples и передает их Sink Writer по мере их прохождения через Pipeline. В обоих случаях специальный компонент в Pipeline фактически действует как простое приложение Reader-Writer и питает Sink Writer. В общем, гибридные архитектуры используют Pipeline и Sink Writer. Теоретически возможно реализовать механизм, в котором Source Reader мог бы каким-то образом вводить Media Samples в Pipeline, но, в отличие от Sample Grabber Sink, такого стандартного компонента не существует.
Media Foundation Transforms (MFT) представляют собой общую модель для обработки медиаданных. Они используются в Media Foundation в первую очередь для реализации декодеров, кодеров, микшеров и цифровых сигнальных процессоров (DSP) — между источниками и приемниками медиа . Media Foundation Transforms — это эволюция модели преобразования, впервые представленной в DirectX Media Objects (DMO). Их поведение более четко определено. Также можно создавать гибридные объекты DMO/MFT. Приложения могут использовать MFT внутри конвейера Media Foundation или использовать их напрямую как автономные объекты. MFT могут быть любого из следующих типов:
Microsoft рекомендует разработчикам писать Media Foundation Transform вместо фильтра DirectShow для Windows Vista , Windows 7 и Windows 8. [ 3] Для редактирования видео и захвата видео Microsoft рекомендует использовать DirectShow, поскольку они не являются основной целью Media Foundation в Windows Vista. Начиная с Windows 7, MFT также поддерживают аппаратно-ускоренную обработку видео, кодирование и декодирование для медиаустройств на базе AVStream. [4]
Media Foundation использует Enhanced Video Renderer (EVR) для рендеринга видеоконтента, который также действует как микшер. Он может смешивать до 16 одновременных потоков, причем первый поток является опорным потоком . Все потоки, кроме опорного, могут иметь информацию о прозрачности по пикселям , а также любой указанный z-порядок . Опорный поток не может иметь прозрачных пикселей и имеет фиксированную позицию z-порядка позади всех потоков. Конечное изображение компонуется на одной поверхности путем окрашивания каждого пикселя в соответствии с цветом и прозрачностью соответствующего пикселя во всех потоках.
Внутри EVR используется объект -микшер для смешивания потоков. Он также может деинтерлейсировать вывод и применять цветокоррекцию, если требуется. Составной кадр передается объекту -презентеру , который планирует их для рендеринга на устройстве Direct3D, которое он разделяет с DWM и другими приложениями, использующими устройство. Частота кадров выходного видео синхронизируется с частотой кадров опорного потока. Если какой-либо из других потоков (называемых подпотоками ) имеет другую частоту кадров, EVR отбрасывает дополнительные кадры (если подпоток имеет более высокую частоту кадров) или использует один и тот же кадр более одного раза (если у него более низкая частота кадров).
Windows Media Audio и Windows Media Video являются единственными поддерживаемыми по умолчанию форматами для кодирования через Media Foundation в Windows Vista . Для декодирования в Windows Vista доступен источник файла MP3 для чтения потоков MP3, но приемник файла MP3 для вывода MP3 доступен только в Windows 7. [5] Однако поддержка форматов расширяема; разработчики могут добавлять поддержку других форматов, написав MFT кодера/декодера и/или пользовательские источники/приемники медиа.
Windows 7 расширяет поддержку кодеков, доступную в Windows Vista. Она включает в себя источники файлов AVI , WAV , AAC/ADTS для чтения соответствующих форматов, [5] источник файлов MPEG-4 для чтения форматов контейнеров MP4 , M4A, M4V, MP4V, MOV и 3GP [6] и приемник файлов MPEG-4 для вывода в формат MP4. [7]
Подобно Windows Vista, поддержка транскодирования (кодирования) не предоставляется ни через одно встроенное приложение Windows, но несколько кодеков включены как Media Foundation Transforms (MFT). [5] В дополнение к кодекам и декодерам Windows Media Audio и Windows Media Video , а также приемнику и источнику файлов ASF, представленным в Windows Vista, [5] Windows 7 включает кодер H.264 с базовым профилем уровня 3 и поддержкой основного профиля [8] и кодер профиля AAC Low Complexity ( AAC-LC ) [9]
Для воспроизведения различных медиаформатов Windows 7 также представляет декодер H.264 с поддержкой Baseline, Main и High-profile, вплоть до уровня 5.1, [10] многоканальные AAC-LC и HE-AAC v1 ( SBR ), стереодекодеры HE-AAC v2 ( PS ), [11] декодеры MPEG-4 Part 2 Simple Profile и Advanced Simple Profile [12], которые включают декодирование популярных реализаций кодеков, таких как DivX , Xvid и Nero Digital , а также декодеры MJPEG [5] и DV [13] MFT для AVI. Windows Media Player 12 использует встроенные кодеки Media Foundation для воспроизведения этих форматов по умолчанию.
Воспроизведение MIDI также пока не поддерживается с помощью Media Foundation.
Приложения, поддерживающие Media Foundation, включают:
Любое приложение, использующее Protected Media Path в Windows, также использует Media Foundation.