HdcpSession 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
允许应用在图形硬件和显示器之间设置和查询高带宽数字内容保护 (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
- 继承
- 属性
- 实现
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 实例的保护级别更改时触发。 |