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

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;
}