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,但不需要其他內容。

ISV 可能會想要設定 HDCP 狀態,並檢查它是否已建立。 如果系統無法建立 HDCP,他們可以選擇實作商務邏輯來限制位元速率或解析度,或完全不播放。 他們會根據其法律義務來建置商務邏輯。

一旦應用程式完成必須受到 HDCP 保護的播放之後,他們可能會選擇將它關閉 (,例如,或作為全新結束) 的一部分。

HdcpSession API 可容納上述所有案例,可讓您調整應用程式的 HDCP 設定,以符合您的特定需求。

建構函式

HdcpSession()

初始化 HdcpSession 類別的新實例。

方法

Close()

關閉 HdcpSession 實例。

Dispose()

執行與釋放 (Free)、釋放 (Release) 或重設 Unmanaged 資源相關聯之應用程式定義的工作。

GetEffectiveProtection()

傳回 HdcpSession 實例的有效保護。

IsEffectiveProtectionAtLeast(HdcpProtection)

檢查 HdcpSession 實例的有效保護是否至少等於指定的 HdcpProtection 值。

SetDesiredMinProtectionAsync(HdcpProtection)

以非同步方式嘗試使用指定的保護層級來設定 HdcpSession 實例的保護。

事件

ProtectionChanged

HdcpSession 實例的保護層級變更時引發。

適用於

另請參閱