Запрос кодеков, установленных на устройстве
Класс CodecQuery позволяет запрашивать кодеки, установленные на текущем устройстве. Список кодеков, включенных в Windows 10 для различных семейств устройств, перечислены в статье Поддерживаемые кодеки, но так как пользователи и приложения могут устанавливать дополнительные кодеки на устройстве, может потребоваться запросить поддержку кодека во время выполнения, чтобы определить, какие кодеки доступны на текущем устройстве.
API CodecQuery является членом пространства имен Windows.Media.Core , поэтому вам потребуется включить это пространство имен в приложение.
using Windows.Media.Core;
Инициализация нового экземпляра класса CodecQuery путем вызова конструктора.
var codecQuery = new CodecQuery();
Метод FindAllAsync возвращает все установленные кодеки, соответствующие заданным параметрам. Эти параметры включают значение CodecKind , указывающее, запрашиваете ли вы аудио или видеокодеки или оба, значение CodecCategory , указывающее, запрашиваете ли кодировщики или декодеры, а также строку, представляющую подтип кодирования мультимедиа, для которого запрашиваются запросы, например видео H.264 или аудио MP3.
Укажите пустую строку для значения подтипа, чтобы возвращать кодеки для всех подтипов. В следующем примере перечислены все кодировщики видео, установленные на устройстве.
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);
}
}
Строка подтипа, передаваемая в FindAllAsync , может быть строковым представлением GUID подтипа, который определяется системой или кодом FOURCC для подтипа. Набор поддерживаемых графических идентификаторов подтипов мультимедиа приведен в статьях аудиоподтипов GUID и GUID подтипа видео, но класс CodecSubtypes предоставляет свойства, возвращающие значения GUID для каждого поддерживаемого подтипа. Дополнительные сведения о кодах FOURCC см. в разделе "Коды FOURCC"
В следующем примере указывается код FOURCC "H264" для определения наличия декодера видео H.264, установленного на устройстве. Этот запрос можно выполнить перед попыткой воспроизведения видеоконтента H.264. Вы также можете обрабатывать неподдерживаемые кодеки во время воспроизведения. Дополнительные сведения см. в разделе "Обработка неподдерживаемых кодеков и неизвестных ошибок при открытии элементов мультимедиа".
IReadOnlyList<CodecInfo> h264Result = await codecQuery.FindAllAsync(CodecKind.Video, CodecCategory.Decoder, "H264");
if (h264Result.Count > 0)
{
this.codecResultsTextBox.Text = "H264 decoder is present.";
}
В следующем примере выполняется запросы, чтобы определить, установлен ли кодировщик звука FLAC на текущем устройстве и, если да, для подтипа создается mediaEncodingProfile , который можно использовать для записи звука в файл или перекодирования звука из другого формата в аудиофайл 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;
}
См. также
- Воспроизведение мультимедиа
- Базовая фото, видео и аудиозапись с помощью MediaCapture
- Перекодирование файлов мультимедиа
- Поддерживаемые кодеки