Az eszközön telepített kodekek lekérdezése

A CodecQuery osztály lehetővé teszi az aktuális eszközön telepített kodekek lekérdezését. A különböző eszközcsaládok Windows részét képező kodekek listáját a Támogatott kodekek című cikkben találja, de mivel a felhasználók és alkalmazások további kodekeket telepíthetnek egy eszközön, érdemes lehet futásidőben lekérdezni a kodektámogatást annak megállapításához, hogy mely kodekek érhetők el az aktuális eszközön.

Inicializálja a CodecQuery osztály új példányát a konstruktor meghívásával.

var codecQuery = new CodecQuery();

A FindAllAsync metódus a megadott paramétereknek megfelelő összes telepített kodeket visszaadja. Ezek a paraméterek közé tartozik egy CodecKind érték, amely meghatározza, hogy hang- vagy videokodeklekérdezést vagy mindkettőt kérdez le, egy CodecCategory érték, amely meghatározza, hogy kódolókra vagy dekódolókra kérdez-e le, valamint egy sztring, amely a lekérdezendő médiakódolási altípust jelöli, például H.264 videó vagy MP3 hang.

Adjon meg egy üres sztringet az altípus értékéhez, amely az összes altípus kodekeit adja vissza. Az alábbi példa az eszközön telepített összes videokódolót felsorolja.

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

A FindAllAsync metódusnak átadott altípussztring lehet az altípus rendszer által meghatározott GUID-jának szöveges ábrázolása, vagy az altípus FOURCC-kódja. A támogatott média-altípusok GUID-jai a Hangaltípus-GUID-k és a Videoaltípus-GUID-k című cikkekben szerepelnek, de a CodecSubtypes osztály olyan tulajdonságokkal rendelkezik, amelyek az egyes támogatott altípusok GUID-értékeit adják vissza. A FOURCC-kódokról további információt a FOURCC-kódok című témakörben talál.

Az alábbi példa a "H264" FOURCC-kódot adja meg annak megállapításához, hogy telepítve van-e az eszközön egy H.264 videódedonáló. Ezt a lekérdezést a H.264 videótartalom lejátszása előtt is végrehajthatja. A nem támogatott kodekek lejátszáskor is kezelhetők. További információ: Nem támogatott kodekek és ismeretlen hibák kezelése médiaelemek megnyitásakor.

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

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

Az alábbi példa lekérdezi, hogy egy FLAC hangkódoló van-e telepítve az aktuális eszközön, és ha igen, akkor egy MediaEncodingProfile jön létre az altípushoz, amely felhasználható hang fájlba történő rögzítésére vagy hang más formátumból FLAC-hangfájlba való átvitelére.

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