Kueri untuk codec yang diinstal pada perangkat

Kelas CodecQuery memungkinkan Anda untuk mengkueri codec yang diinstal pada perangkat saat ini. Daftar codec yang disertakan dengan Windows 10 untuk keluarga perangkat yang berbeda tercantum dalam artikel Codec yang didukung, tetapi karena pengguna dan aplikasi dapat menginstal codec tambahan pada perangkat, Anda mungkin ingin meminta dukungan codec saat runtime untuk menentukan codec apa yang tersedia di perangkat saat ini.

CodecQuery API adalah anggota namespace Windows.Media.Core , jadi Anda harus menyertakan namespace layanan ini di aplikasi Anda.

using Windows.Media.Core;

Inisialisasi instans baru kelas CodecQuery dengan memanggil konstruktor.

var codecQuery = new CodecQuery();

Metode FindAllAsync mengembalikan semua codec yang diinstal yang cocok dengan parameter yang disediakan. Parameter ini mencakup nilai CodecKind yang menentukan apakah Anda mengkueri codec audio atau video atau keduanya, nilai CodecCategory yang menentukan apakah Anda meminta encoder atau dekode, dan string yang mewakili subjenis pengodean media yang Anda kueri, seperti video H.264 atau audio MP3.

Tentukan string kosong untuk nilai subjenis untuk mengembalikan codec untuk semua subjenis. Contoh berikut mencantumkan semua encoder video yang diinstal pada perangkat.

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

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

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

String subjenis yang Anda berikan ke FindAllAsync dapat menjadi representasi string dari GUID subjenis yang ditentukan oleh sistem atau kode FOURCC untuk subjenis. Kumpulan GUID subjenis media yang didukung tercantum dalam artikel GUID Subjenis Audio dan GUID Subjenis Video, tetapi kelas CodecSubtypes menyediakan properti yang mengembalikan nilai GUID untuk setiap subjenis yang didukung. Untuk informasi selengkapnya tentang kode FOURCC, lihat Kode FOURCC

Contoh berikut menentukan kode FOURCC "H264" untuk menentukan apakah ada dekoder video H.264 yang diinstal pada perangkat. Anda dapat melakukan kueri ini sebelum mencoba memutar kembali konten video H.264. Anda juga dapat menangani codec yang tidak didukung pada waktu pemutaran. Untuk informasi selengkapnya, lihat Menangani codec yang tidak didukung dan kesalahan yang tidak diketahui saat membuka item media.

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

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

Contoh kueri berikut untuk menentukan apakah encoder audio FLAC diinstal pada perangkat saat ini dan, jika demikian, MediaEncodingProfile dibuat untuk subjenis yang dapat digunakan untuk menangkap audio ke file atau transkode audio dari format lain ke file audio FLAC.

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