エンコーダー API

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

Encoder API には、ソフトウェア エンコーダーとハードウェア エンコーダーを構成するための統一されたインターフェイスが用意されています。 アプリケーションでは、Encoder API を使用してエンコーダーを構成し、構成設定を格納できます。 エンコーダー ベンダーは、Encoder API を使用してエンコーダーの機能を公開できます。 Encoder API は主にエンコーダー用に設計されていますが、デコーダーでもサポートできる一般的な機能です。

Encoder API は、エンコーダー フィルターによって公開される ICodecAPI インターフェイスを介してアプリケーションに公開されます。 エンコーダー フィルターには、ネイティブの DirectShow フィルター、ハードウェア エンコーダー、または DirectX メディア オブジェクト (DMO) を指定できます。

  • ソフトウェア フィルター: ネイティブ DirectShow フィルターとして実装されるエンコーダーは、 ICodecAPI を直接公開する必要があります。
  • ハードウェア エンコーダー: エンコード デバイスは、KSProxy によってユーザー モードで表される 1 つ以上の AVStream ミニドライバーを介して公開されます。 KSProxy は 、ICodecAPI メソッドの呼び出しを KS プロパティ セットに変換します。 詳細については、DDK のドキュメントを参照してください。
  • DMO: DMO は ICodecAPI インターフェイスを公開する必要があります。 DirectShow アプリケーションでは、DMO ラッパー フィルターに対してクエリを実行できます。これにより、DMO を集計することでインターフェイスが公開されます。 DirectShow に基づかないアプリケーションでは、DMO に直接クエリを実行できます。

エンコーダーのキャパビルティ

エンコーダーは、高度な機能の一覧をシステム レジストリに格納することで登録できます。 各機能は GUID によって識別されます。 特定のエンコーダーの機能を列挙するには、次の操作を行います。

  1. エンコーダー フィルターを表すモニカーを作成します。 (「 システム デバイス列挙子の使用」を参照してください)。
  2. IGetCapabilitiesKey インターフェイスのフィルター モニカーに対してクエリを実行します。
  3. IGetCapabilitiesKey::GetCapabilitiesKey を呼び出します。 メソッドは、フィルターの機能リストを含むレジストリ キーへのハンドルを返します。
  4. RegEnumValue 関数を呼び出して、返されるキーの値を列挙します。

エンコーダーを開発する場合は、フィルターの登録時に機能のレジストリ エントリを作成します。 ソフトウェア フィルターの場合は、FilterData キーと FriendlyName キーに隣接する Capabilities という名前のキーを作成します。 通常、この情報は、 AMovieDllRegisterServer2 を呼び出して標準フィルター データを登録した後に追加します。 詳細については、「 DirectShow フィルターを登録する方法」を参照してください。 または、レジストリ内 の Capabilities キーの場所を示す文字列を含む CapabilitiesLocation キーを作成することもできます。 この文字列は、レジストリ サブツリーを示すために、"HKLM\"、"HKCR\"、または "HKCU\" で始まる必要があります。 プラグ アンド プレイ デバイスの場合、ドライバーのセットアップ ファイルは、フィルターの FriendlyName キーに隣接する機能キーを作成する必要があります。または、ソフトウェア フィルターの説明に従って CapabilitiesLocation キーを使用できます。

Capabilities キーを作成したら、各機能 GUID の値を作成します。 値の名前は、 という形式の GUID の文字列形式 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}にする必要があります。 各値の種類は、次のいずれかである必要があります。

  • 1 つの数値。 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 の文字列形式です。 各設定の値を作成します。 また、プロファイルを識別するデータ ("LowBandwidthVideo" など) を持つ "FriendlyName" という名前の文字列値を作成します。

エンコーダーとデコーダーの開発