Encoder-API

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Die Encoder-API bietet eine einheitliche Schnittstelle zum Konfigurieren von Software- und Hardwareencodern. 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 in erster Linie für Encoder entwickelt wurde, ist sie 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 nativer DirectShow-Filter, ein Hardwareencoder oder ein DirectX Media Object (DMO) sein.

  • Softwarefilter: Ein Encoder, der als nativer DirectShow-Filter implementiert ist, sollte die ICodecAPI direkt verfügbar machen.
  • Hardwareencoder: Das Codierungsgerät wird über einen oder mehrere AVStream-Minitreiber verfügbar gemacht, die von KSProxy im Benutzermodus dargestellt werden. KSProxy übersetzt ICodecAPI-Methodenaufrufe in KS-Eigenschaftssä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-Wrapperfilter abfragen, der die Schnittstelle durch Aggregieren des DMO verfügbar macht. Anwendungen, die nicht auf DirectShow basieren, können die DMO direkt abfragen.

Encoder-Kapazität

Ein Encoder kann eine Liste allgemeiner 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 aufzulisten:

  1. Erstellen Sie den Moniker, der den Encoderfilter darstellt. (Siehe Verwenden des Systemgeräte-Enumerators.)
  2. Fragen Sie den Filtermoniker für die IGetCapabilitiesKey-Schnittstelle ab.
  3. Rufen Sie IGetCapabilitiesKey::GetCapabilitiesKey auf. Die -Methode gibt ein Handle an den Registrierungsschlüssel zurück, das die Funktionsliste des Filters enthält.
  4. Rufen Sie die RegEnumValue-Funktion auf, um die Werte für den zurückgegebenen Schlüssel aufzulisten.

Wenn Sie einen Encoder entwickeln, erstellen Sie die Registrierungseinträge für die Funktionen, wenn der Filter registriert wird. Erstellen Sie für Softwarefilter einen Schlüssel namens Capabilities , der sich neben den Schlüsseln FilterData und FriendlyName befindet. In der Regel fügen Sie diese Informationen hinzu, nachdem Sie AMovieDllRegisterServer2 aufgerufen haben, 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. Bei Plug-and-Play-Geräten sollten die Setupdateien des Treibers einen Capabilities-Schlüssel neben dem FriendlyName-Schlüssel des Filters erstellen oder einen CapabilitiesLocation-Schlüssel verwenden, wie für Softwarefilter beschrieben.

Nachdem Sie den Schlüssel Funktionen erstellt haben, erstellen Sie einen Wert für jede Funktions-GUID. Der Name des Werts sollte die Zeichenfolgenform der GUID im Format {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}sein. Jeder Werttyp sollte einer der folgenden Sein:

  • Einzelner numerischer Wert. Verwenden Sie einen DWORD-Wert .
  • GUID. Verwenden Sie die Zeichenfolgenform der GUID.
  • Numerische Paare. Verwenden Sie eine Zeichenfolge mit der Form "a", "b", um Wertepaare wie Breite und Höhe oder Zähler und Nenner für Brüche darzustellen.
  • 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 von Konfigurationseinstellungen, die zur Laufzeit auf einen Encoder angewendet werden können. Profile sind unabhängig vom Encoder; Eine Anwendung kann einen Encoder auswählen, 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 auch einen Zeichenfolgenwert namens "FriendlyName", dessen Daten das Profil identifizieren (z. B. "LowBandwidthVideo").

Encoder- und Decoderentwicklung