デバイスにインストールされているコーデックのクエリ

CodecQuery クラスを使用すると、現在のデバイスにインストールされているコーデックを照会できます。 さまざまなデバイス ファミリのWindowsに含まれるコーデックの一覧は、サポートされているコーデックに関する記事に記載されていますが、ユーザーとアプリはデバイスに追加のコーデックをインストールできるため、実行時にコーデックのサポートを照会して、現在のデバイスで使用できるコーデックを特定できます。

コンストラクターを呼び出して 、CodecQuery クラスの新しいインスタンスを初期化します。

var codecQuery = new CodecQuery();

FindAllAsync メソッドは、指定されたパラメーターに一致するすべてのインストール済みコーデックを返します。 これらのパラメーターには、オーディオまたはビデオ コーデックのクエリを実行するかどうかを指定する CodecKind 値、エンコーダーまたはデコーダーのクエリを実行するかどうかを指定する CodecCategory 値、および H.264 ビデオや MP3 オーディオなど、クエリ対象のメディア エンコード サブタイプを表す文字列が含まれます。

サブタイプ値に空の文字列を指定して、すべてのサブタイプのコーデックを返します。 次の例では、デバイスにインストールされているすべてのビデオ エンコーダーを一覧表示します。

IReadOnlyList<CodecInfo> result =
    await codecQuery.FindAllAsync(CodecKind.Video, CodecCategory.Encoder, "");

foreach (var codecInfo in result)
{
    codecResultsTextBox.Text += "============================================================\n";
    codecResultsTextBox.Text += string.Format("Codec: {0}\n", codecInfo.DisplayName);
    codecResultsTextBox.Text += string.Format("Kind: {0}\n", codecInfo.Kind.ToString());
    codecResultsTextBox.Text += string.Format("Category: {0}\n", codecInfo.Category.ToString());
    codecResultsTextBox.Text += string.Format("Trusted: {0}\n", codecInfo.IsTrusted.ToString());

    foreach (string subType in codecInfo.Subtypes)
    {
        codecResultsTextBox.Text += string.Format("   Subtype: {0}\n", subType);
    }
}

FindAllAsync に渡すサブタイプ文字列には、システムによって定義されているサブタイプ GUID の文字列表現またはサブタイプの FOURCC コードを指定できます。 サポートされているメディア サブタイプ GUID のセットは 、オーディオ サブタイプ GUID と ビデオ サブタイプ GUID の記事に記載されていますが、 CodecSubtypes クラスは、サポートされている各サブタイプの GUID 値を返すプロパティを提供します。 FOURCC コードの詳細については、「 FOURCC コード」を参照してください。

次の例では、FOURCC コード "H264" を指定して、デバイスに H.264 ビデオ デコーダーがインストールされているかどうかを判断します。 H.264 ビデオ コンテンツの再生を試みる前に、このクエリを実行できます。 また、再生時にサポートされていないコーデックを処理することもできます。 詳細については、「 メディア項目を開くときにサポートされていないコーデックと不明なエラーを処理する」を参照してください。

IReadOnlyList<CodecInfo> h264Result =
    await codecQuery.FindAllAsync(CodecKind.Video, CodecCategory.Decoder, "H264");

if (h264Result.Count > 0)
{
    codecResultsTextBox.Text = "H264 decoder is present.";
}

次の例では、現在のデバイスにFLAC オーディオ エンコーダーがインストールされているかどうかを確認し、インストールされている場合は、ファイルへのオーディオのキャプチャや別の形式からFLAC オーディオ ファイルへのオーディオのトランスコードに使用できるサブタイプに対して、MediaEncodingProfile が作成されます。

IReadOnlyList<CodecInfo> flacResult =
    await codecQuery.FindAllAsync(CodecKind.Audio, CodecCategory.Encoder, CodecSubtypes.AudioFormatFlac);

if (flacResult.Count > 0)
{
    AudioEncodingProperties audioProps = new AudioEncodingProperties();
    audioProps.Subtype = CodecSubtypes.AudioFormatFlac;
    audioProps.SampleRate = 44100;
    audioProps.ChannelCount = 2;
    audioProps.Bitrate = 128000;
    audioProps.BitsPerSample = 32;

    MediaEncodingProfile encodingProfile = new MediaEncodingProfile();
    encodingProfile.Audio = audioProps;
    encodingProfile.Video = null;
}