다음을 통해 공유


HdcpSession 클래스

정의

앱에서 그래픽 하드웨어와 디스플레이 간에 HDCP(High-Bandwidth Digital Content Protection)의 현재 상태를 설정하고 쿼리할 수 있습니다.

public ref class HdcpSession sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(196608, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 196608)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class HdcpSession final : IClosable
[Windows.Foundation.Metadata.Activatable(196608, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 196608)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class HdcpSession : System.IDisposable
function HdcpSession()
Public NotInheritable Class HdcpSession
Implements IDisposable
상속
Object Platform::Object IInspectable HdcpSession
특성
구현

Windows 요구 사항

디바이스 패밀리
Windows 10 Anniversary Edition (10.0.14393.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v3.0에서 도입되었습니다.)

예제

다음 예제에서는 HDCP를 설정한 다음 완료되면 반응합니다.

먼저 몇 가지 선언을 수행합니다.

private HdcpProtection desiredHdcpProtection = HdcpProtection.OnWithTypeEnforcement;
private HdcpProtection currentHdcpProtection = HdcpProtection.On;
private bool outputIsProtected = false;
private HdcpSession hdcpSession;
private void SetHdcpProtection()
{
    hdcpSession = new HdcpSession();

    // Register an event to get notified when HDCP changes
    hdcpSession.ProtectionChanged += (HdcpSession sender, object eventArgs) =>
    {
        // In case we want to do something with the level
        HdcpProtection? protection = sender.GetEffectiveProtection();

        if (protection != null)
        {
            currentHdcpProtection = protection.Value;
        }
        else
        {
            // The current Hdcp protection level is pending... so treat it as though it's off altogether
            currentHdcpProtection = HdcpProtection.Off;
        }

        // Check the protection
        outputIsProtected = sender.IsEffectiveProtectionAtLeast(desiredHdcpProtection);
    };

    hdcpSession.SetDesiredMinProtectionAsync(desiredHdcpProtection).Completed = (asyncOperation, asyncStatus) =>
    {
        if (HdcpSetProtectionResult.Success != asyncOperation.GetResults())
        {
            // Handle the case where we failed to set the HDCP protection
            DebugTextBlock.Text = "ERROR! Something went wrong";
        }

        outputIsProtected = hdcpSession.IsEffectiveProtectionAtLeast(desiredHdcpProtection);
    };
}

설명

OPM용 하위 수준 Media Core Media Pipeline API나 PlayReady DRM을 사용하지 않더라도 앱에 HDCP를 켜는 것이 좋습니다.

다른 ISV(독립 소프트웨어 공급업체)에는 다양한 수준의 보호가 필요할 수 있습니다. "간단한 In-Transit 보호"에 대한 법적 요구 사항이 있는 ISV는 스트리밍을 위해 인증과 함께 HTTPS를 사용하고 디스플레이 출력 보호를 위해 HDCP를 사용할 수 있습니다. 다른 ISV는 정교한 파이프라인을 빌드하고 해당 파이프라인 내에서 HDCP를 직접 제어해야 합니다. 일부 콘텐츠에 대해 더 엄격한 HDCP2를 적용할 수 있지만 다른 콘텐츠에는 필요하지 않습니다.

ISV는 HDCP 상태를 설정하고 설정된 검사 수 있습니다. 시스템에서 HDCP를 설정할 수 없는 경우 비트 전송률 또는 해상도를 제한하거나 전혀 재생되지 않는 비즈니스 논리를 구현하도록 선택할 수 있습니다. 법적 의무에 따라 비즈니스 논리를 구축합니다.

HDCP를 보호해야 하는 재생으로 앱이 완료되면 다시 해제하도록 선택할 수 있습니다(예: 트레일러의 경우 또는 클린 종료의 일부로).

HdcpSession API는 위의 모든 시나리오를 수용하므로 특정 요구 사항에 맞게 앱의 HDCP 설정을 조정할 수 있습니다.

생성자

HdcpSession()

HdcpSession 클래스의 새 instance 초기화합니다.

메서드

Close()

HdcpSession instance 닫습니다.

Dispose()

관리되지 않는 리소스의 확보, 해제 또는 다시 설정과 관련된 애플리케이션 정의 작업을 수행합니다.

GetEffectiveProtection()

HdcpSession instance 효과적인 보호를 반환합니다.

IsEffectiveProtectionAtLeast(HdcpProtection)

HdcpSession instance 유효한 보호가 지정된 HdcpProtection 값과 적어도 같은지 확인합니다.

SetDesiredMinProtectionAsync(HdcpProtection)

지정된 보호 수준으로 HdcpSession instance 보호를 비동기적으로 설정하려고 합니다.

이벤트

ProtectionChanged

HdcpSession instance 보호 수준이 변경되면 발생합니다.

적용 대상

추가 정보