Query uitvoeren op codecs die op een apparaat zijn geïnstalleerd

Met de codecQuery-klasse kunt u query's uitvoeren op codecs die op het huidige apparaat zijn geïnstalleerd. De lijst met codecs die zijn opgenomen in Windows voor verschillende apparaatfamilies, worden vermeld in het artikel Supported codecs, maar omdat gebruikers en apps extra codecs op een apparaat kunnen installeren, kunt u tijdens runtime zoeken naar codec-ondersteuning om te bepalen welke codecs beschikbaar zijn op het huidige apparaat.

Initialiseer een nieuw exemplaar van de CodecQuery-klasse door de constructor aan te roepen.

var codecQuery = new CodecQuery();

De methode FindAllAsync retourneert alle geïnstalleerde codecs die overeenkomen met de opgegeven parameters. Deze parameters bevatten een CodecKind-waarde die aangeeft of u query's uitvoert op audio- of videocodecs of beide, een CodecCategory-waarde die aangeeft of u query's uitvoert op encoders of decoders en een tekenreeks die het subtype mediacodering vertegenwoordigt waarvoor u query's uitvoert, zoals H.264-video of MP3-audio.

Geef een lege tekenreeks op voor de subtypewaarde om codecs voor alle subtypen te retourneren. In het volgende voorbeeld ziet u alle videocoderingsprogramma's die op het apparaat zijn geïnstalleerd.

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

De subtypetekenreeks die u doorgeeft in FindAllAsync , kan een tekenreeksweergave zijn van de subtype-GUID die wordt gedefinieerd door het systeem of een FOURCC-code voor het subtype. De set ondersteunde mediasubtype-GUID's worden vermeld in de artikelen Audio Subtype GUID's en Video Subtype GUID's, maar de klasse CodecSubtypes biedt eigenschappen die de GUID-waarden retourneren voor elk ondersteund subtype. Zie FOURCC-codes voor meer informatie over FOURCC-codes.

In het volgende voorbeeld wordt de FOURCC-code 'H264' opgegeven om te bepalen of er een H.264-videodecode is geïnstalleerd op het apparaat. U kunt deze query uitvoeren voordat u probeert H.264-video-inhoud af te spelen. U kunt ook niet-ondersteunde codecs verwerken tijdens het afspelen. Zie Niet-ondersteunde codecs en onbekende fouten verwerken bij het openen van media-items voor meer informatie.

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

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

In het volgende voorbeeld worden query's uitgevoerd om te bepalen of een FLAC-audiocoderingsprogramma is geïnstalleerd op het huidige apparaat en, als dat het zo is, wordt een MediaEncodingProfile gemaakt voor het subtype dat kan worden gebruikt voor het vastleggen van audio naar een bestand of het transcoderingsgeluid van een andere indeling naar een FLAC-audiobestand.

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