Encoder-API
[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.]
Die Encoder-API stellt eine einheitliche Schnittstelle zum Konfigurieren von Software- und Hardware-Encodern bereit. Anwendungen können die Encoder-API verwenden, um einen Encoder zu konfigurieren und die Konfigurationseinstellungen zu speichern. Encoderanbieter können die Encoder-API verwenden, um die Funktionen eines Encoders verfügbar zu machen. Obwohl die Encoder-API hauptsächlich für Encoder entwickelt wurde, ist es allgemein genug, dass Decoder sie auch unterstützen können.
Die Encoder-API wird anwendungen über die ICodecAPI Schnittstelle verfügbar gemacht, die vom Encoderfilter verfügbar gemacht wird. Der Encoderfilter kann ein systemeigener DirectShow-Filter, ein Hardware-Encoder oder ein DirectX-Medienobjekt (DirectX Media Object, DMO) sein.
- Softwarefilter: Ein Encoder, der als systemeigener DirectShow-Filter implementiert wird, sollte die ICodecAPI- direkt verfügbar machen.
- Hardware-Encoder: Das Codierungsgerät wird über einen oder mehrere AVStream-Minidriver verfügbar gemacht, die im Benutzermodus durch KSProxy dargestellt werden. KSProxy übersetzt ICodecAPI- Methodenaufrufe in KS-Eigenschaftensätze. Weitere Informationen finden Sie in der DDK-Dokumentation.
- DMOs: Die DMO sollte die ICodecAPI--Schnittstelle verfügbar machen. DirectShow-Anwendungen können den DMO Wrapper-Filter abfragen, der die Schnittstelle durch Aggregieren der DMO verfügbar macht. Anwendungen, die nicht auf DirectShow basieren, können die DMO direkt abfragen.
Encoder Capabilties
Ein Encoder kann eine Liste mit allgemeinen Funktionen registrieren, indem er sie in der Systemregistrierung speichert. Jede Funktion wird durch eine GUID identifiziert. Gehen Sie wie folgt vor, um die Funktionen eines bestimmten Encoders auflisten zu können:
- Erstellen Sie den Moniker, der den Encoderfilter darstellt. (Siehe Verwenden des Systemgeräte-Enumerators.)
- Abfragen des Filtermonikers für die IGetCapabilitiesKey--Schnittstelle.
- Rufen Sie IGetCapabilitiesKey::GetCapabilitiesKeyauf. Die Methode gibt ein Handle an den Registrierungsschlüssel zurück, der die Funktionsliste des Filters enthält.
- Rufen Sie die RegEnumValue--Funktion auf, um die Werte für den zurückgegebenen Schlüssel aufzählen zu können.
Wenn Sie einen Encoder entwickeln, erstellen Sie die Registrierungseinträge für die Funktionen, wenn der Filter registriert ist. Erstellen Sie für Softwarefilter einen Schlüssel namens Capabilities, der neben den schlüsseln FilterData und FriendlyName schlüsseln. In der Regel fügen Sie diese Informationen nach dem Aufrufen AMovieDllRegisterServer2 hinzu, um die Standardfilterdaten zu registrieren. Weitere Informationen finden Sie unter Registrieren von DirectShow-Filtern. Alternativ können Sie einen CapabilitiesLocation Schlüssel erstellen, der eine Zeichenfolge enthält, die den Speicherort des Capabilities Schlüssels in der Registrierung angibt. Die Zeichenfolge sollte mit "HKLM\", "HKCR\" oder "HKCU\" beginnen, um die Registrierungsunterstruktur anzugeben. Für Plug- und Play-Geräte sollten die Setupdateien des Treibers einen Funktionen Schlüssel neben dem FriendlyName Schlüssel des Filters erstellen oder einen CapabilitiesLocation- Schlüssel verwenden, wie für Softwarefilter beschrieben.
Nachdem Sie den Capabilities Key erstellt haben, erstellen Sie einen Wert für jede Funktions-GUID. Der Name des Werts sollte die Zeichenfolgenform der GUID im Formular {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
sein. Jeder Werttyp sollte eine der folgenden Werte sein:
- Einzelner numerischer Wert. Verwenden Sie einen DWORD- Wert.
- GUID. Verwenden Sie die Zeichenfolgenform der GUID.
- Numerische Paare. Verwenden Sie eine Zeichenfolge mit dem Formular "a,b", um Wertepaare darzustellen, z. B. Breite und Höhe, oder Zähler und Nenner für Brüche.
- Arrays von Werten. Verwenden Sie mehrere Zeichenfolgen (REG_SZ_MULTI), um mehr als einen Wert darzustellen.
Das folgende Beispiel zeigt das Registrierungslayout für einen Softwarefilter:
\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
Values:
guid1: 1234 (REG_DWORD)
guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
guid3: "2","4","6" (REG_SZ_MULTI)
guid4: "720,480" (REG_SZ)
Encoderprofile
Ein Encoderprofil ist eine feste Liste der Konfigurationseinstellungen, die zur Laufzeit auf einen Encoder angewendet werden können. Profile sind unabhängig vom Encoder; eine Anwendung kann einen Encoder auswählen und dann ein Profil auswählen und die Profileinstellungen auf den Encoder anwenden. Profile werden durch GUID identifiziert und sollten am folgenden Speicherort in der Registrierung gespeichert werden:
\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\
wobei Profil-GUID
ist die Zeichenfolgenform der GUID, die das Profil identifiziert. Erstellen Sie Werte für jede Einstellung. Erstellen Sie außerdem einen Zeichenfolgenwert namens "FriendlyName", dessen Daten das Profil (z. B. "LowBandwidthVideo") identifizieren.
Verwandte Themen