다음을 통해 공유


인코더 API

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

인코더 API는 소프트웨어 및 하드웨어 인코더를 구성하기 위한 균일한 인터페이스를 제공합니다. 애플리케이션은 인코더 API를 사용하여 인코더를 구성하고 구성 설정을 저장할 수 있습니다. 인코더 공급업체는 인코더 API를 사용하여 인코더의 기능을 노출할 수 있습니다. 인코더 API는 주로 인코더용으로 설계되었지만 디코더도 지원할 수 있을 만큼 일반적입니다.

인코더 API는 인코더 필터에 의해 노출되는 ICodecAPI 인터페이스를 통해 애플리케이션에 노출됩니다. 인코더 필터는 네이티브 DirectShow 필터, 하드웨어 인코더 또는 DMO(DirectX Media Object)일 수 있습니다.

  • 소프트웨어 필터: 네이티브 DirectShow 필터로 구현되는 인코더는 ICodecAPI 를 직접 노출해야 합니다.
  • 하드웨어 인코더: 인코딩 디바이스는 KSProxy에서 사용자 모드로 표시되는 하나 이상의 AVStream 미니드라이버를 통해 노출됩니다. KSProxy는 ICodecAPI 메서드 호출을 KS 속성 집합으로 변환합니다. 자세한 내용은 DDK 설명서를 참조하세요.
  • DMO: DMO는 ICodecAPI 인터페이스를 노출해야 합니다. DirectShow 애플리케이션은 DMO를 집계하여 인터페이스를 노출하는 DMO 래퍼 필터를 쿼리할 수 있습니다. DirectShow를 기반으로 하지 않는 애플리케이션은 DMO를 직접 쿼리할 수 있습니다.

인코더 Capabilties

인코더는 시스템 레지스트리에 저장하여 상위 수준 기능 목록을 등록할 수 있습니다. 각 기능은 GUID로 식별됩니다. 특정 인코더의 기능을 열거하려면 다음을 수행합니다.

  1. 인코더 필터를 나타내는 모니커를 만듭니다. ( 시스템 디바이스 열거자 사용을 참조하세요.)
  2. IGetCapabilitiesKey 인터페이스에 대한 필터 모니커를 쿼리합니다.
  3. IGetCapabilitiesKey::GetCapabilitiesKey를 호출합니다. 메서드는 필터의 기능 목록을 포함하는 레지스트리 키에 대한 핸들을 반환합니다.
  4. RegEnumValue 함수를 호출하여 반환된 키의 값을 열거합니다.

인코더를 사용하는 경우 필터가 등록될 때 기능에 대한 레지스트리 항목을 만듭니다. 소프트웨어 필터의 경우 FilterDataFriendlyName 키에 인접한 Capabilities라는 키를 만듭니다. 일반적으로 AMovieDllRegisterServer2 를 호출하여 표준 필터 데이터를 등록한 후 이 정보를 추가합니다. 자세한 내용은 DirectShow 필터를 등록하는 방법을 참조하세요. 또는 레지스트리에서 Capabilities 키의 위치를 제공하는 문자열을 포함하는 CapabilitiesLocation 키를 만들 수 있습니다. 문자열은 레지스트리 하위 트리를 나타내려면 "HKLM\", "HKCR\" 또는 "HKCU\"로 시작해야 합니다. 플러그 앤 플레이 디바이스의 경우 드라이버의 설치 파일은 필터의 FriendlyName 키에 인접한 Capabilities 키를 만들거나 소프트웨어 필터에 설명된 대로 CapabilitiesLocation 키를 사용할 수 있습니다.

Capabilities 키를 만든 후에는 각 기능 GUID에 대한 값을 만듭니다. 값의 이름은 GUID의 문자열 형식(형식 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})이어야 합니다. 각 값 형식은 다음 중 하나여야 합니다.

  • 단일 숫자 값입니다. DWORD 값을 사용합니다.
  • GUID입니다. GUID의 문자열 형식을 사용합니다.
  • 숫자 쌍. "a,b" 형식의 문자열을 사용하여 너비 및 높이와 같은 값 쌍을 나타내거나 분수에 대한 숫자 및 분모를 나타냅니다.
  • 값의 배열입니다. 여러 문자열(REG_SZ_MULTI)을 사용하여 둘 이상의 값을 나타냅니다.

다음 예제에서는 소프트웨어 필터의 레지스트리 레이아웃을 보여줍니다.

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

인코더 프로필

인코더 프로필은 런타임에 인코더에 적용할 수 있는 고정된 구성 설정 목록입니다. 프로필은 인코더와 독립적입니다. 애플리케이션은 인코더를 선택한 다음 프로필을 선택하고 인코더에 프로필 설정을 적용할 수 있습니다. 프로필은 GUID로 식별되며 레지스트리의 다음 위치에 저장되어야 합니다.

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

여기서 프로필 GUID

는 프로필을 식별하는 GUID의 문자열 형식입니다. 각 설정에 대한 값을 만듭니다. 또한 데이터가 프로필을 식별하는 "FriendlyName"이라는 문자열 값을 만듭니다(예: "LowBandwidthVideo").

인코더 및 디코더 개발