HdcpSession 类

定义

允许应用在图形硬件和显示器之间设置和查询高带宽数字内容保护 (HDCP) 的当前状态。

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

注解

你可能想要为应用启用 HDCP,即使你既不使用 OPM 的低级别媒体核心媒体管道 API,也不要使用 PlayReady DRM。

不同的 ISV (独立软件供应商) 可能需要不同级别的保护。 法律要求为“简单 In-Transit 保护”的 ISV 可能会使用 HTTPS 进行流式处理,将 HDCP 用于显示输出保护。 其他 ISV 生成复杂的管道,并要求从这些管道中直接控制 HDCP。 他们可能会对某些内容强制实施更严格的 HDCP2,但不需要对其他内容执行更严格的 HDCP2。

ISV 可能需要设置 HDCP 状态,并检查已建立它。 如果系统无法建立 HDCP,他们可以选择实现业务逻辑,这将限制比特率或分辨率,或者根本不播放。 他们根据法律义务构建业务逻辑。

应用完成必须受 HDCP 保护的播放后,可以选择将其关闭 (预告片,例如,或作为干净退出) 的一部分。

HdcpSession API 可适应上述所有方案,使你能够调整应用的 HDCP 设置以满足特定需求。

构造函数

HdcpSession()

初始化 HdcpSession 类的新实例。

方法

Close()

关闭 HdcpSession 实例。

Dispose()

执行与释放或重置非托管资源关联的应用程序定义的任务。

GetEffectiveProtection()

返回 HdcpSession 实例的有效保护。

IsEffectiveProtectionAtLeast(HdcpProtection)

检查 HdcpSession 实例的有效保护是否至少等于给定的 HdcpProtection 值。

SetDesiredMinProtectionAsync(HdcpProtection)

异步尝试使用给定的保护级别设置 HdcpSession 实例的保护。

事件

ProtectionChanged

HdcpSession 实例的保护级别更改时触发。

适用于

另请参阅