Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Wenn der Filter Graph Manager die IPin::Connect-Methode aufruft, gibt es mehrere Optionen zum Angeben eines Medientyps:
- Vollständiger Typ: Wenn der Medientyp vollständig angegeben ist, versuchen die Pins, eine Verbindung mit diesem Typ herzustellen. Wenn dies nicht möglich ist, schlägt der Verbindungsversuch fehl.
- Partieller Medientyp: Ein Medientyp ist partielle, wenn der Haupttyp, Untertyp oder Formattyp GUID_NULL ist. Der Wert GUID_NULL fungiert als "Wildcard", der angibt, dass ein beliebiger Wert akzeptabel ist. Die Pins verhandeln einen Typ, der mit dem Teiltyp konsistent ist.
- Kein Medientyp: Wenn der Filter graph-Manager einen NULL- Zeiger übergibt, können die Pins jedem Medientyp zustimmen, der für beide Pins akzeptabel ist.
Wenn die Pins eine Verbindung herstellen, verfügt die Verbindung immer über einen vollständigen Medientyp. Der Zweck des vom Filter Graph-Manager angegebenen Medientyps besteht darin, die möglichen Verbindungstypen einzuschränken.
Während des Aushandlungsprozesses schlägt der Ausgabepin einen Medientyp vor, indem die IPin::ReceiveConnection--Methode des Eingabenadels aufgerufen wird. Die Eingabenadel kann den vorgeschlagenen Typ annehmen oder ablehnen. Dieser Vorgang wird wiederholt, bis die Eingabenadel einen Typ akzeptiert, oder die Ausgabe-Pin läuft aus Typen, und die Verbindung schlägt fehl.
Wie eine Ausgabenadel Medientypen auswählt, die vorgeschlagen werden sollen, hängt von der Implementierung ab. In den DirectShow-Basisklassen ruft die Ausgabenadel IPin::EnumMediaTypes für den Eingabenadel auf. Diese Methode gibt einen Enumerator zurück, der die bevorzugten Medientypen der Eingabenadel aufzählt. Andernfalls listet der Ausgabenadel seine eigenen bevorzugten Typen auf.
Arbeiten mit Medientypen
Überprüfen Sie in jeder Funktion, die einen AM_MEDIA_TYPE Parameter empfängt, immer die Werte cbFormat- und Formattyp, bevor sie das PbFormat-Element member ableiten. Der folgende Code ist falsch:
if (pmt->formattype == FORMAT_VideoInfo)
{
VIDEOINFOHEADER *pVIH = (VIDEOINFOHEADER*)pmt->pbFormat;
// Wrong!
}
Der folgende Code ist richtig:
if ((pmt->formattype == FORMAT_VideoInfo) &&
(pmt->cbFormat > sizeof(VIDEOINFOHEADER) &&
(pbFormat != NULL))
{
VIDEOINFOHEADER *pVIH = (VIDEOINFOHEADER*)pmt->pbFormat;
// Now you can dereference pVIH.
}