Udostępnij przez


Interfejs API kodera

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Interfejs API kodera udostępnia jednolity interfejs do konfigurowania koderów oprogramowania i sprzętu. Aplikacje mogą używać interfejsu API kodera do konfigurowania kodera i przechowywania ustawień konfiguracji. Dostawcy kodera mogą korzystać z interfejsu API kodera, aby uwidocznić możliwości kodera. Mimo że interfejs API kodera jest przeznaczony głównie dla koderów, jest na tyle ogólny, że dekodatory mogą go również obsługiwać.

Interfejs API kodera jest udostępniany aplikacjom za pośrednictwem interfejsu ICodecAPI, który jest udostępniany przez filtr kodera. Filtr kodera może być natywnym filtrem DirectShow, koderem sprzętowym lub obiektem DMO (DirectX Media Object).

  • Filtry oprogramowania: koder zaimplementowany jako natywny filtr DirectShow powinien bezpośrednio uwidocznić interfejsu ICodecAPI.
  • Kodery sprzętowe: urządzenie kodujące jest uwidocznione za pośrednictwem co najmniej jednego minidrivers AVStream, które są reprezentowane w trybie użytkownika przez KSProxy. KsProxy tłumaczy wywołania metody ICodecAPI na zestawy właściwości KS. Aby uzyskać więcej informacji, zobacz dokumentację zestawu DDK.
  • Obiekty DMO: dmo powinno uwidocznić interfejsinterfejsu ICodecAPI. Aplikacje DirectShow mogą wykonywać zapytania dotyczące filtru otoki DMO, który uwidacznia interfejs przez agregowanie dmo. Aplikacje, które nie są oparte na directshow, mogą bezpośrednio wykonywać zapytania względem dmo.

Koder capabilties

Koder może zarejestrować listę funkcji wysokiego poziomu, przechowując je w rejestrze systemowym. Każda możliwość jest identyfikowana przez identyfikator GUID. Aby wyliczyć możliwości określonego kodera, wykonaj następujące czynności:

  1. Utwórz moniker reprezentujący filtr kodera. (Zobacz Using the System Device Enumerator.)
  2. Wykonaj zapytanie dotyczące monikera filtru dla interfejsu IGetCapabilitiesKey.
  3. Wywołaj IGetCapabilitiesKey::GetCapabilitiesKey. Metoda zwraca uchwyt do klucza rejestru, który zawiera listę możliwości filtru.
  4. Wywołaj funkcję RegEnumValue, aby wyliczyć wartości zwróconego klucza.

Jeśli programujesz koder, utwórz wpisy rejestru dla funkcji po zarejestrowaniu filtru. W przypadku filtrów oprogramowania utwórz klucz o nazwie Capabilities przylegający do FilterData i kluczy FriendlyName. Zazwyczaj te informacje należy dodać po wywołaniu metody AServer2 AServer2, aby zarejestrować standardowe dane filtru. Aby uzyskać więcej informacji, zobacz Jak zarejestrować filtry DirectShow. Alternatywnie można utworzyć klucz CapabilitiesLocation zawierający ciąg określający lokalizację klucza Capabilities w rejestrze. Ciąg powinien zaczynać się od ciągu "HKLM\", "HKCR\" lub "HKCU\", aby wskazać poddrzewo rejestru. W przypadku urządzeń Plug and Play pliki instalacyjne sterownika powinny utworzyć Możliwości klucz przylegający do klucza FriendlyName filtru lub może użyć klucza CapabilitiesLocation zgodnie z opisem filtrów oprogramowania.

Po utworzeniu klucza Capabilities utwórz wartość dla każdego identyfikatora GUID funkcji. Nazwa wartości powinna być formą ciągu identyfikatora GUID w postaci {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Każdy typ wartości powinien być jednym z następujących elementów:

  • Pojedyncza wartość liczbowa. Użyj wartości DWORD.
  • GUID. Użyj formularza ciągu identyfikatora GUID.
  • Pary liczbowe. Użyj ciągu z formularzem "a,b", aby reprezentować pary wartości, takie jak szerokość i wysokość, lub licznik i mianownik dla ułamków.
  • Tablice wartości. Użyj wielu ciągów (REG_SZ_MULTI), aby reprezentować więcej niż jedną wartość.

W poniższym przykładzie pokazano układ rejestru filtru oprogramowania:

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

Profile kodera

Profil kodera to stała lista ustawień konfiguracji, które można zastosować do kodera w czasie wykonywania. Profile są niezależne od kodera; aplikacja może wybrać koder, a następnie wybrać profil i zastosować ustawienia profilu do kodera. Profile są identyfikowane przez identyfikator GUID i powinny być przechowywane w następującej lokalizacji w rejestrze:

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

gdzie identyfikator GUID profilu

to postać ciągu identyfikatora GUID identyfikującego profil. Utwórz wartości dla każdego ustawienia. Utwórz również wartość ciągu o nazwie "FriendlyName", której dane identyfikują profil (np. "LowBandwidthVideo").

Encoder and Decoder Development