Encoder-API
[De functie die is gekoppeld aan deze pagina, DirectShow, is een verouderde functie. Het is vervangen door MediaPlayer, IMFMediaEngineen Audio/Video Capture in Media Foundation. Deze functies zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken MediaPlayer, IMFMediaEngine en Audio/Video Capture in Media Foundation in plaats van DirectShow, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
De Encoder-API biedt een uniforme interface voor het configureren van software- en hardwarecoderingsprogramma's. Toepassingen kunnen de Encoder-API gebruiken om een encoder te configureren en de configuratie-instellingen op te slaan. Encoderleveranciers kunnen de Encoder-API gebruiken om de mogelijkheden van een encoder beschikbaar te maken. Hoewel de Encoder-API voornamelijk is ontworpen voor encoders, is het algemeen genoeg dat decoders deze ook kunnen ondersteunen.
De Encoder-API wordt beschikbaar gemaakt voor toepassingen via de ICodecAPI-interface, die wordt weergegeven door het encoderfilter. Het encoderfilter kan een systeemeigen DirectShow-filter, een hardwarecoderingsprogramma of een DirectX Media Object (DMO) zijn.
- Softwarefilters: een encoder die is geïmplementeerd als een systeemeigen DirectShow-filter, moet de ICodecAPI- rechtstreeks beschikbaar maken.
- Hardware-encoders: het coderingsapparaat wordt weergegeven via een of meer AVStream minidrivers, die worden weergegeven in de gebruikersmodus door KSProxy. KSProxy vertaalt ICodecAPI methode-aanroepen naar KS-eigenschappensets. Zie de DDK-documentatie voor meer informatie.
- DMO's: de DMO moet de ICodecAPI-interface beschikbaar maken. DirectShow-toepassingen kunnen een query uitvoeren op het DMO Wrapper-filter, waarmee de interface wordt weergegeven door de DMO te aggregeren. Toepassingen die niet zijn gebaseerd op DirectShow, kunnen rechtstreeks een query uitvoeren op de DMO.
Capabilties voor encoders
Een encoder kan een lijst met mogelijkheden op hoog niveau registreren door deze op te slaan in het systeemregister. Elke mogelijkheid wordt geïdentificeerd door een GUID. Ga als volgt te werk om de mogelijkheden van een bepaalde encoder op te sommen:
- Maak de moniker die het encoderfilter vertegenwoordigt. (Zie Het systeemapparaat enumerator gebruiken.)
- Voer een query uit op de filter moniker voor deinterfaceIGetCapabilitiesKey.
- Roep IGetCapabilitiesKey::GetCapabilitiesKeyaan. De methode retourneert een ingang naar de registersleutel die de lijst met mogelijkheden van het filter bevat.
- Roep de functie RegEnumValue aan om de waarden voor de geretourneerde sleutel op te sommen.
Als u een encoder aan het ontwikkelen bent, maakt u de registervermeldingen voor de mogelijkheden wanneer het filter is geregistreerd. Maak voor softwarefilters een sleutel met de naam Capabilities die grenst aan de sleutels FilterData en FriendlyName. Normaal gesproken voegt u deze informatie toe nadat u AMovieDllRegisterServer2 hebt aangeroepen om de standaardfiltergegevens te registreren. Zie DirectShow-filters registrerenvoor meer informatie. U kunt ook een CapabilitiesLocation--sleutel maken die een tekenreeks bevat die de locatie van de Capabilities-sleutel in het register geeft. De tekenreeks moet beginnen met 'HKLM\', 'HKCR\' of 'HKCU\' om de registersubstructuur aan te geven. Voor Plug en Play-apparaten moeten de installatiebestanden van het stuurprogramma een Capabilities-sleutel maken naast de FriendlyName-sleutel van het filter, of een CapabilitiesLocation-sleutel sleutel gebruiken, zoals beschreven voor softwarefilters.
Zodra u de Capabilities sleutel hebt gemaakt, maakt u een waarde voor elke mogelijkheids-GUID. De naam van de waarde moet de tekenreeksvorm van de GUID zijn, in het formulier {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
. Elk waardetype moet een van de volgende zijn:
- Eén numerieke waarde. Gebruik een DWORD--waarde.
- GUID. Gebruik de tekenreeksvorm van de GUID.
- Numerieke paren. Gebruik een tekenreeks met de notatie 'a,b' om paren van waarden weer te geven, zoals breedte en hoogte, of teller en noemer voor breuken.
- Matrices met waarden. Gebruik meerdere tekenreeksen (REG_SZ_MULTI) om meer dan één waarde weer te geven.
In het volgende voorbeeld ziet u de registerindeling voor een 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)
Encoderprofielen
Een encoderprofiel is een vaste lijst met configuratie-instellingen die tijdens runtime op een encoder kunnen worden toegepast. Profielen zijn onafhankelijk van de encoder; een toepassing kan een encoder selecteren en vervolgens een profiel selecteren en de profielinstellingen toepassen op de encoder. Profielen worden geïdentificeerd door GUID en moeten worden opgeslagen op de volgende locatie in het register:
\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\
waarbij profiel-GUID-
is de tekenreeksvorm van de GUID waarmee het profiel wordt geïdentificeerd. Waarden maken voor elke instelling. Maak ook een tekenreekswaarde met de naam 'FriendlyName' waarvan de gegevens het profiel identificeren (zoals 'LowBandwidthVideo').
Verwante onderwerpen