Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La classe CodecQuery consente di eseguire query per i codec installati nel dispositivo corrente. L'elenco dei codec inclusi in Windows per famiglie di dispositivi diverse è elencato nell'articolo Codec supportati, ma poiché gli utenti e le app possono installare codec aggiuntivi in un dispositivo, è possibile eseguire una query sul supporto dei codec in fase di esecuzione per determinare quali codec sono disponibili nel dispositivo corrente.
Inizializzare una nuova istanza della classe CodecQuery chiamando il costruttore .
var codecQuery = new CodecQuery();
Il metodo FindAllAsync restituisce tutti i codec installati che corrispondono ai parametri specificati. Questi parametri includono un valore CodecKind che specifica se si esegue una query per codec audio o video o entrambi, un valore CodecCategory che specifica se si esegue una query per codificatori o decodificatori e una stringa che rappresenta il sottotipo di codifica multimediale per cui si esegue una query, ad esempio video H.264 o audio MP3.
Specificare una stringa vuota per il valore del sottotipo per restituire codec per tutti i sottotipi. L'esempio seguente elenca tutti i codificatori video installati nel dispositivo.
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);
}
}
La stringa del sottotipo passata in FindAllAsync può essere una rappresentazione di stringa del GUID del sottotipo definito dal sistema o da un codice FOURCC per il sottotipo. Il set di GUID del sottotipo multimediale supportato è elencato negli articoli GUID sottotipo audio e GUID sottotipo video, ma la classe CodecSubtypes fornisce proprietà che restituiscono i valori GUID per ogni sottotipo supportato. Per altre informazioni sui codici FOURCC, vedere FOURCC Codes.
Nell'esempio seguente viene specificato il codice FOURCC "H264" per determinare se nel dispositivo è installato un decodificatore video H.264. È possibile eseguire questa query prima di tentare di riprodurre contenuto video H.264. Puoi anche gestire codec non supportati in fase di riproduzione. Per altre informazioni, vedere Gestire codec non supportati ed errori sconosciuti durante l'apertura di elementi multimediali.
IReadOnlyList<CodecInfo> h264Result =
await codecQuery.FindAllAsync(CodecKind.Video, CodecCategory.Decoder, "H264");
if (h264Result.Count > 0)
{
codecResultsTextBox.Text = "H264 decoder is present.";
}
Nell'esempio seguente viene eseguita una query per determinare se nel dispositivo corrente è installato un codificatore audio FLAC e, in tal caso, viene creato un MediaEncodingProfile per il sottotipo che può essere usato per l'acquisizione dell'audio in un file o la transcodifica dell'audio da un altro formato a un 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;
}