Condividi tramite


API del codificatore

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

L'API codificatore fornisce un'interfaccia uniforme per la configurazione di codificatori software e hardware. Le applicazioni possono usare l'API codificatore per configurare un codificatore e archiviare le impostazioni di configurazione. I fornitori di codificatori possono usare l'API codificatore per esporre le funzionalità di un codificatore. Anche se l'API del codificatore è progettata principalmente per i codificatori, è sufficiente che i decodificatori possano supportarlo.

L'API del codificatore viene esposta alle applicazioni tramite l'interfacciaICodecAPI, esposta dal filtro del codificatore. Il filtro del codificatore può essere un filtro DirectShow nativo, un codificatore hardware o un oggetto DMO (DirectX Media Object).

  • Filtri software: un codificatore implementato come filtro DirectShow nativo deve esporre direttamente ilICodecAPI.
  • Codificatori hardware: il dispositivo di codifica viene esposto tramite uno o più minidriver AVStream, rappresentati in modalità utente da KSProxy. KSProxy converte chiamate al metodo ICodecAPI in set di proprietà KS. Per altre informazioni, vedere la documentazione di DDK.
  • DMOs: L'operatore DMO deve esporre l'interfacciaICodecAPI. Le applicazioni DirectShow possono eseguire query sul filtro Wrapper DMO, che espone l'interfaccia aggregando l'ordinamento DMO. Le applicazioni non basate su DirectShow possono eseguire query direttamente su DMO.

Capabilties codificatore

Un codificatore può registrare un elenco di funzionalità di alto livello archiviandole nel Registro di sistema. Ogni funzionalità è identificata da un GUID. Per enumerare le funzionalità di un particolare codificatore, eseguire le operazioni seguenti:

  1. Creare il moniker che rappresenta il filtro del codificatore. Vedere uso dell'enumeratore di dispositivi di sistema.
  2. Eseguire una query sul moniker del filtro per l'interfacciaIGetCapabilitiesKey.
  3. Chiamare IGetCapabilitiesKey::GetCapabilitiesKey. Il metodo restituisce un handle alla chiave del Registro di sistema che contiene l'elenco delle funzionalità del filtro.
  4. Chiamare la funzione RegEnumValue per enumerare i valori per la chiave restituita.

Se si sta devloping un codificatore, creare le voci del Registro di sistema per le funzionalità quando il filtro viene registrato. Per i filtri software, creare una chiave denominata Capabilities adiacente alle chiavi FilterData e FriendlyName . In genere, è necessario aggiungere queste informazioni dopo aver chiamato AMovieDllRegisterServer2 per registrare i dati del filtro standard. Per altre informazioni, vedere Come registrare i filtri DirectShow. In alternativa, è possibile creare una chiave CapabilitiesLocation contenente una stringa che fornisce la posizione della chiave funzionalità nel Registro di sistema. La stringa deve iniziare con "HKLM\", "HKCR\" o "HKCU\" per indicare il sottoalbero del Registro di sistema. Per i dispositivi Plug and Play, i file di installazione del driver devono creare una chiave Capabilities accanto alla chiave FriendlyName del filtro oppure può usare una chiave CapabilitiesLocation come descritto per i filtri software.

Dopo aver creato la chiave funzionalità di, creare un valore per ogni GUID di funzionalità. Il nome del valore deve essere il formato stringa del GUID, nel formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Ogni tipo di valore deve essere uno dei seguenti:

  • Valore numerico singolo. Usare un valore DWORD.
  • GUID. Usare il formato stringa del GUID.
  • Coppie numeriche. Usare una stringa con il formato "a,b" per rappresentare coppie di valori, ad esempio larghezza e altezza, o numeratore e denominatore per le frazioni.
  • Matrici di valori. Usare più stringhe (REG_SZ_MULTI) per rappresentare più valori.

L'esempio seguente mostra il layout del Registro di sistema per un filtro software:

\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) 

Profili codificatori

Un profilo di codificatore è un elenco fisso di impostazioni di configurazione che possono essere applicate a un codificatore in fase di esecuzione. I profili sono indipendenti dal codificatore; un'applicazione può selezionare un codificatore, quindi selezionare un profilo e applicare le impostazioni del profilo al codificatore. I profili sono identificati dal GUID e devono essere archiviati nel percorso seguente nel Registro di sistema:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

dove GUID del profilo

è il formato stringa del GUID che identifica il profilo. Creare valori per ogni impostazione. Creare anche un valore stringa denominato "FriendlyName" i cui dati identificano il profilo ( ad esempio "LowBandwidthVideo").

di sviluppo del codificatore e del decodificatore