Mixer personalizzati

[Il componente descritto in questa pagina, Il renderer video avanzato è una funzionalità legacy. È stato sostituito dal Simple Video Renderer (SVR) esposto attraverso i componenti MediaPlayer e IMFMediaEngine . Per riprodurre contenuti video, è necessario inviare dati a uno di questi componenti e consentire loro di creare un'istanza del nuovo renderer video. Questi componenti sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer o le API IMFMediaEngine di livello inferiore per riprodurre contenuti multimediali video in Windows anziché EVR, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Questo argomento descrive come scrivere un mixer personalizzato per il renderer video avanzato (EVR). È possibile usare un mixer personalizzato con il sink multimediale EVR di Media Foundation o il filtro EVR DirectShow. Per altre informazioni su mixer e relatori, vedere Enhanced Video Renderer.

Il mixer è una trasformazione Media Foundation (MFT) con uno o più input (il flusso di riferimento più i sottostream) e un output. Il flusso di input riceve campioni da upstream. Il flusso di output fornisce esempi al relatore. L'EVR è responsabile della chiamata a IMFTransform::P rocessInput sul mixer e il relatore è responsabile della chiamata a IMFTransform::P rocessOutput.

Come minimo, un mixer EVR deve implementare le interfacce seguenti:

Interfaccia Descrizione
IMFTransform Fornisce la funzionalità MFT di base.
IMFTopologyServiceLookupClient Consente al mixer di ottenere le interfacce dall'EVR.
IMFVideoDeviceID Consente al mixer di ottenere le interfacce dall'EVR.
IMFAttributes Usato per esporre l'attributo MF_SA_D3D_AWARE all'EVR.

 

Facoltativamente, un MFT può implementare una delle interfacce seguenti:

Interfaccia Descrizione
IEVRTrustedVideoPlugin Obbligatorio per riprodurre contenuto protetto.
IMFGetService Espone interfacce come IMFVideoMixerBitmap e IMFVideoProcessor all'applicazione.
IMFQualityAdvise Consente al gestore qualità di regolare la qualità del video.
IMFVideoMixerBitmap Consente all'applicazione di combinare una bitmap statica nel video.
IMFVideoPositionMapper Mappe coordinate sul fotogramma video di output per le coordinate sul fotogramma video di input.
IMFVideoProcessor Espone alcune funzionalità di elaborazione video DXVA all'applicazione.

 

La negoziazione del formato con il mixer funziona come segue:

  1. EVR imposta il tipo di supporto nel flusso di riferimento.

  2. L'EVR chiama IMFVideoPresenter::P rocessMessage sul relatore con il messaggio MFVP_MESSAGE_INVALIDATEMEDIATYPE.

  3. Il relatore imposta il tipo di supporto nel flusso di output del mixer.

  4. L'EVR imposta il tipo di supporto nei sottostream.

Se il tipo di supporto nel flusso di riferimento cambia, gli altri tipi di supporti del mixer non sono più validi. Il metodo IMFTransform::P rocessOutput del mixer avrà esito negativo e restituirà MF_E_TRANSFORM_STREAM_CHANGE. Il relatore non deve eseguire alcuna operazione a questo punto. L'EVR avvierà di nuovo il processo di negoziazione del formato.

Quando un flusso di input raggiunge la fine del flusso, L'EVR chiama IMFTransform::P rocessMessage sul mixer con MFT_MESSAGE_NOTIFY_END_OF_STREAM.

Il mixer invia gli eventi seguenti all'EVR, usando l'interfaccia IMediaEventSink di EVR. Questa interfaccia è documentata nella documentazione di DirectShow SDK.

Evento Descrizione
EC_SAMPLE_Nedizione Enterprise DED Il mixer richiede un nuovo esempio di input.

 

L'EVR potrebbe chiamare ProcessOutput sul mixer prima dell'avvio dello streaming. Il mixer non dovrebbe avere esito negativo per queste chiamate. Al contrario, dovrebbe riempire la superficie di output con pixel neri. Il mixer deve continuare a riempire i campioni di output a colori fino a quando non riceve un messaggio MFT_MESSAGE_NOTIFY_BEGIN_STREAMING o viene chiamato il metodo ProcessInput. Se il mixer riceve un messaggio di MFT_MESSAGE_NOTIFY_END_STREAMING , dovrebbe tornare alla modalità di riempimento del colore.

Implementazione di IMFVideoDeviceID

L'interfaccia IMFVideoDeviceID contiene un metodo, GetDeviceID, che restituisce un GUID del dispositivo. Il GUID del dispositivo garantisce che il relatore e il mixer usino tecnologie compatibili. Se i GUID del dispositivo non corrispondono, l'EVR non riesce a inizializzare.

Il mixer standard e il relatore usano entrambi Direct3D 9, con il GUID del dispositivo uguale a IID_IDirect3DDevice9. Se si intende usare il relatore personalizzato con il mixer standard, il GUID del dispositivo del relatore deve essere IID_IDirect3DDevice9. Se si sostituiscono entrambi i componenti, è possibile definire un nuovo GUID del dispositivo.

Implementazione di IMFTopologyServiceLookupClient

Il mixer deve implementare l'interfaccia IMFTopologyServiceLookupClient . Prima dell'inizio del flusso, EVR chiama IMFTopologyServiceLookupClient::InitServicePointers e passa un puntatore all'interfaccia IMFTopologyServiceLookup di EVR. Il mixer usa questo puntatore per ottenere puntatori di interfaccia da EVR.

Come minimo, il mixer deve eseguire una query per l'interfaccia seguente:

Quando EVR chiama IMFTopologyServiceLookupClient::ReleaseServicePointers, il mixer deve rilasciare qualsiasi puntatore ottenuto dalla chiamata a InitServicePointers.

Attributi mixer

Un mixer deve supportare gli attributi seguenti.

Attributo Descrizione
MF_SA_D3D_AWARE Specifica se il mixer supporta l'accelerazione video DirectX (DXVA).
MF_SA_REQUIRED_SAMPLE_COUNT Il numero di campioni video che EVR deve allocare per ogni flusso mixer. Questo attributo si applica ai singoli flussi; usare l'archivio attributi restituito da IMFTransform::GetInputStreamAttributes.

 

Impostazione del mixer su EVR

Per impostare un mixer personalizzato su EVR, chiama IMFVideoRenderer::InitializeRenderer. Sia il filtro EVR DirectShow che il sink multimediale EVR implementano questo metodo.

Oggetto attivazione EVR. Se si usa l'oggetto attivazione EVR, è possibile fornire un mixer personalizzato impostando uno degli attributi seguenti nell'oggetto di attivazione EVR:

Attributo Descrizione
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE Puntatore a un oggetto di attivazione per il mixer. L'oggetto attivazione deve implementare l'interfaccia IMFActivate .
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID CLSID del mixer.

 

Renderer video avanzato