Bir cihaza yüklenen codec bileşenleri için sorgu

CodecQuery sınıfı, geçerli cihazda yüklü codec bileşenlerini sorgulamanıza olanak tanır. Farklı cihaz aileleri için Windows dahil edilen codec'lerin listesi Supported codecs makalesinde listelenmiştir, ancak kullanıcılar ve uygulamalar bir cihaza ek codec'ler yükleyebildiğinden, geçerli cihazda hangi codec bileşenlerinin kullanılabilir olduğunu belirlemek için çalışma zamanında codec desteği sorgulamak isteyebilirsiniz.

Oluşturucuyu çağırarak CodecQuery sınıfının yeni bir örneğini başlatın.

var codecQuery = new CodecQuery();

FindAllAsync yöntemi, sağlanan parametrelerle eşleşen tüm yüklü codec bileşenlerini döndürür. Bu parametreler arasında ses veya video codec bileşenleri veya her ikisini de sorgulayıp sorgulamayabileceğinizi belirten bir CodecKind değeri, kodlayıcıları veya kod çözücüleri sorgulayıp sorgulamayabileceğinizi belirten bir CodecCategory değeri ve sorguladığınız H.264 video veya MP3 ses gibi medya kodlama alt türünü temsil eden bir dize yer alır.

Tüm alt türlerin codec'lerini döndürmek için alt tür değeri için boş bir dize belirtin. Aşağıdaki örnekte cihazda yüklü olan tüm video kodlayıcılar listelenmiştir.

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'e geçirdiğiniz alt tür dizesi, sistem tarafından tanımlanan alt tür GUID'sinin dize gösterimi veya alt türün FOURCC kodu olabilir. Desteklenen medya alt türü GUID'leri kümesi Ses Alt Türü GUID'leri ve Video Alt Türü GUID'leri makalelerinde listelenmiştir, ancak CodecSubtypes sınıfı desteklenen her alt türün GUID değerlerini döndüren özellikler sağlar. FOURCC kodları hakkında daha fazla bilgi için bkz. FOURCC Kodları.

Aşağıdaki örnek, cihazda yüklü bir H.264 video kod çözücü olup olmadığını belirlemek için "H264" FOURCC kodunu belirtir. H.264 video içeriğini oynatmayı denemeden önce bu sorguyu gerçekleştirebilirsiniz. Desteklenmeyen kod çözücüleri oynatma sırasında da işleyebilirsiniz. Daha fazla bilgi için bkz. Medya öğelerini açarken desteklenmeyen codec bileşenlerini ve bilinmeyen hataları işleme.

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

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

Aşağıda, mevcut cihazda bir FLAC ses kodlayıcısının yüklü olup olmadığını belirlemeye yönelik örnek sorgular verilmiştir; yüklüyse, sesi bir dosyaya yakalamak veya başka bir biçimdeki sesi FLAC ses dosyasına dönüştürmek için kullanılabilecek alt tür için bir MediaEncodingProfile oluşturulur.

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