다음을 통해 공유


디바이스에 설치된 코덱에 대한 쿼리

CodecQuery 클래스를 통해 현재 디바이스에 설치된 코덱에 대해 쿼리할 수 있습니다. 다른 디바이스 제품군에 대한 Windows 10에 포함되어 있는 코덱 목록은 지원되는 코덱문서에 나열되어 있지만, 사용자와 앱은 추가 코덱을 디바이스에 설치할 수 있습니다. 따라서 런타임 시 현재 디바이스에서 사용할 수 있는 코덱을 파악하기 위해 코덱 지원에 대한 쿼리를 수행할 수 있습니다.

CodecQuery API는 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 세트는 Audio Subtype GUIDsVideo Subtype GUIDs 문서에 나와 있지만, 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 오디오 인코더가 현재 디바이스에 설치되어 있는지 쿼리하고 설치되어 있다면 오디오를 파일에 캡처하거나 다른 형식에서 FLAC 오디오 파일로 오디오를 코드 변환하는 데 사용할 수 있는 하위 형식에 대해 MediaEncodingProfile이 생성됩니다.

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