Пользовательские миксеры
[Компонент, описанный на этой странице, расширенный отрисовщик видео, является устаревшей функцией. Он был заменен простой отрисовщик видео (SVR), предоставляемый через компоненты MediaPlayer и IMFMediaEngine компонентов. Чтобы воспроизвести видеоконтент, необходимо отправить данные в один из этих компонентов и разрешить им создать экземпляр нового отрисовщика видео. Эти компоненты оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer или более низкий уровень API МВФMediaEngine для воспроизведения видеотрансляции в Windows вместо EVR по возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В этом разделе описывается, как написать пользовательский миксер для расширенного отрисовщика видео (EVR). Вы можете использовать пользовательский миксер с приемником мультимедиа Media Foundation EVR или фильтром DirectShow EVR. Дополнительные сведения о миксерах и выступающих см. в расширенныхотрисовщика видео.
Миксер — это преобразование Media Foundation (MFT) с одним или несколькими входными данными (ссылочным потоком и вложенными потоками) и одним выходным данным. Входной поток получает примеры из вышестоящего потока. Выходной поток передает примеры выступающим. EVR отвечает за вызов МВФTransform::P rocessInput на миксере, и выступающий отвечает за вызов МВФTransform::P rocessOutput.
Как минимум, миксер EVR должен реализовать следующие интерфейсы:
Интерфейс | Описание |
---|---|
МВФTransform | Предоставляет базовые функции MFT. |
IMFTopologyServiceLookupClient | Позволяет миксеру получать интерфейсы из EVR. |
МВФVideoDeviceID | Позволяет миксеру получать интерфейсы из EVR. |
МВФAttributes | Используется для предоставления атрибута MF_SA_D3D_AWARE evR. |
При необходимости MFT может реализовать любой из следующих интерфейсов:
Интерфейс | Описание |
---|---|
IEVRTrustedVideoPlugin | Требуется для воспроизведения защищенного содержимого. |
МВФGetService | Предоставляет интерфейсы, такие как IMFVideoMixerBitmap и IMFVideoProcessor приложению. |
МВФQualityAdvise | Позволяет диспетчеру качества настроить качество видео. |
МВФVideoMixerBitmap | Позволяет приложению смешивать статический растровый рисунок с видео. |
МВФVideoPositionMapper | Сопоставляет координаты выходного видеокадры с координатами входного видеокадры. |
МВФVideoProcessor | Предоставляет некоторые функции обработки видео DXVA для приложения. |
Согласование формата с миксером работает следующим образом:
EVR задает тип носителя в эталонном потоке.
EVR вызывает МВФVideoPresenter::P rocessMessage на докладчика с сообщением MFVP_MESSAGE_INVALIDATEMEDIATYPE.
Выступающий задает тип носителя в выходном потоке миксера.
EVR задает тип носителя в подпотоках.
Если тип носителя в эталонном потоке изменяется, другие типы носителей миксера больше не допустимы. Метод IMFTransform::P rocessOutput миксера завершится ошибкой и возвратом MF_E_TRANSFORM_STREAM_CHANGE. Выступающий не должен ничего делать на этом этапе. EVR снова инициирует процесс согласования формата.
Когда любой входной поток достигает конца потока, EVR вызывает IMFTransform::P rocessMessage на миксере с MFT_MESSAGE_NOTIFY_END_OF_STREAM.
Миксер отправляет следующие события в EVR с помощью интерфейса IMediaEventSink EVR. Этот интерфейс описан в документации по пакету SDK DirectShow.
Событие | Описание |
---|---|
EC_SAMPLE_NEEDED | Для миксера требуется новый входной пример. |
EVR может вызывать ProcessOutput на миксере перед началом потоковой передачи. Миксер не должен завершать эти вызовы. Вместо этого он должен заполнить выходную поверхность черными пикселями. Миксер должен продолжать использовать выходные образцы заливки цвета, пока он не получит сообщение MFT_MESSAGE_NOTIFY_BEGIN_STREAMING или вызывается метод ProcessInput. Если миксер получает сообщение MFT_MESSAGE_NOTIFY_END_STREAMING, он должен вернуться в режим заливки цвета.
Реализация МВФVideoDeviceID
ИнтерфейсIMFVideoDeviceID содержит один метод, GetDeviceID, который возвращает GUID устройства. GUID устройства гарантирует, что выступающий и миксер используют совместимые технологии. Если идентификаторы guid устройства не соответствуют, EVR не может инициализировать.
Стандартный миксер и выступающий используют Direct3D 9 с GUID устройства, равным IID_IDirect3DDevice9. Если вы планируете использовать пользовательский выступающий со стандартным миксером, идентификатор GUID устройства докладчика должен быть IID_IDirect3DDevice9. При замене обоих компонентов можно определить новый GUID устройства.
Реализация IMFTopologyServiceLookupClient
Миксер должен реализовать интерфейс IMFTopologyServiceLookupClient. Перед началом потоковой передачи EVR вызывает IMFTopologyServiceLookupClient::InitServicePointers и передает указатель на МВФTopologyServiceLookup интерфейса EVR. Этот указатель используется для получения указателей интерфейса из EVR.
По крайней мере миксер должен запрашивать следующий интерфейс:
Когда EVR вызывает IMFTopologyServiceLookupClient::ReleaseServicePointers, миксер должен освободить все указатели, полученные от вызова InitServicePointers.
Атрибуты миксера
Миксер должен поддерживать следующие атрибуты.
Атрибут | Описание |
---|---|
MF_SA_D3D_AWARE | Указывает, поддерживает ли средство смешивание видео DirectX (DXVA). |
MF_SA_REQUIRED_SAMPLE_COUNT | Количество примеров видео, которые EVR должен выделять для каждого потока микшера. Этот атрибут применяется к отдельным потокам; используйте хранилище атрибутов, возвращаемое IMFTransform::GetInputStreamAttributes. |
Настройка миксера в EVR
Чтобы задать настраиваемый миксер в EVR, вызовите МВФVideoRenderer::InitializeRenderer. Фильтр DirectShow EVR и приемник мультимедиа EVR реализуют этот метод.
объект активации EVR. Если вы используете объект активации EVR, можно предоставить пользовательский миксер, задав один из следующих атрибутов для объекта активации EVR:
Атрибут | Описание |
---|---|
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE | Указатель на объект активации для миксера. Объект активации должен реализовать интерфейс IMFActivate. |
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID | CLSID миксера. |
Связанные разделы