Fråga efter codecs som är installerade på en enhet

Med klassen CodecQuery kan du fråga efter codecs som är installerade på den aktuella enheten. Listan över codecs som ingår i Windows för olika enhetsfamiljer visas i artikeln Supported codecs, men eftersom användare och appar kan installera ytterligare codecs på en enhet kanske du vill fråga efter codec-stöd vid körning för att avgöra vilka codecs som är tillgängliga på den aktuella enheten.

Initiera en ny instans av klassen CodecQuery genom att anropa konstruktorn.

var codecQuery = new CodecQuery();

Metoden FindAllAsync returnerar alla installerade codecs som matchar de angivna parametrarna. De här parametrarna innehåller ett CodecKind-värde som anger om du frågar efter ljud- eller video codecs eller båda, ett CodecCategory-värde som anger om du frågar efter kodare eller avkodare och en sträng som representerar mediekodningsundertypen som du frågar efter, till exempel H.264-video eller MP3-ljud.

Ange en tom sträng för undertypsvärdet för att returnera codecs för alla undertyper. I följande exempel visas alla videokodare som är installerade på enheten.

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

Den undertypssträng som du skickar till FindAllAsync kan antingen vara en strängrepresentation av undertypens GUID som definieras av systemet eller en FOURCC-kod för undertypen. Uppsättningen mediaundertyps-GUID:er som stöds visas i artiklarna GUID för ljudundertyper och GUID för videoundertyper, men klassen CodecSubtypes innehåller egenskaper som returnerar GUID-värdena för varje undertyp som stöds. Mer information om FOURCC-koder finns i FOURCC-koder.

I följande exempel anges FOURCC-koden "H264" för att avgöra om det finns en H.264-videodekodare installerad på enheten. Du kan utföra den här frågan innan du försöker spela upp H.264-videoinnehåll. Du kan också hantera codecs som inte stöds vid uppspelning. Mer information finns i Hantera kodningsfel som inte stöds och okända fel när du öppnar medieobjekt.

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

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

Följande exempel frågar om en FLAC-ljudkodare är installerad på den aktuella enheten och i så fall skapas en MediaEncodingProfile för undertypen som kan användas för att samla in ljud till en fil eller omkoda ljud från ett annat format till en FLAC-ljudfil.

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