次の方法で共有


ProtectionCapabilities.IsTypeSupported(String, String) メソッド

定義

DRM 機能のビデオ デコード、表示、および出力保護サブシステムの機能を照会します。

警告

この方法は、古いバージョンの Windows 10 に存在する場合でも、Windows 10 バージョン 1607 以降の OS バージョンでのみ使用することをお勧めします。

public:
 virtual ProtectionCapabilityResult IsTypeSupported(Platform::String ^ type, Platform::String ^ keySystem) = IsTypeSupported;
ProtectionCapabilityResult IsTypeSupported(winrt::hstring const& type, winrt::hstring const& keySystem);
public ProtectionCapabilityResult IsTypeSupported(string type, string keySystem);
function isTypeSupported(type, keySystem)
Public Function IsTypeSupported (type As String, keySystem As String) As ProtectionCapabilityResult

パラメーター

type
String

Platform::String

winrt::hstring

サポートのクエリが実行される機能を識別する文字列。 このパラメーターは、メディアの種類とサブタイプの識別子を指定する RFC 2045 Content-Type 文字列と、必要なコーデックの RFC 6381 コーデック識別子を受け入れます。 これらの基本文字列は、HTML5 HTMLMediaElementcanPlayType メソッドで使用されているものと一致します。 RFC 2045 では、";<parameter>=<name>[=<value>] [,<name>[=<value>]"の形式で修飾子として追加のカスタム パラメーターを使用できます。 RFC 2045 準拠パーサーは、認識されない場合、これらのパラメーターを無視する必要があります。 機能クエリの場合、 は機能名前が付けられます。

この実装では、有効なクエリ結果を提供するために、RFC 2045 メディアの種類とサブタイプの識別子 ("video/mp4" など) と RFC 6381 コーデック パラメーター codec=”<video codec>[,<audio codec>]” が常に存在する必要があります。

コンテンツ タイプとタイプという用語は、従来、MIME タイプとしてよく知られています。

keySystem
String

Platform::String

winrt::hstring

クエリを確認する PlayReady 名前空間を識別し、ハードウェアまたはソフトウェアの保護を指定する文字列。 ハードウェア クエリには "com.microsoft.playready.recommendation.3000" を使用します (PlayReady にはハードウェア オフロードのサポートが必要)、ソフトウェア保護のサポートを明示的に照会する場合は "com.microsoft.playready.recommendation.2000"、一般的なクエリの場合は "com.microsoft.playready.recommendation" を使用します (下位互換性を保証するには、ソフトウェア保護のサポートに回答する必要があります)。

戻り値

クエリ対象の機能がサポートされている可能性があるかどうか、サポートされている可能性があるかどうか、またはサポートされていないかどうかを示す値。

注釈

入力パラメーター タイプには、RFC 6381 Content-Type メディア タイプとサブタイプ識別子が存在する必要があります。 RFC 2045 Codecs パラメーター文字列も存在する必要があります。 MPEG-4 は、この API でサポートされている唯一のコンテナーです。 H.264 (avc1) と HEVC (hvc1, hev1) は、サポートされている回答を提供する唯一のビデオ コーデックです。 MPEG-4 (mp4a)、MPEG-1 Layer 3 (mp3)、Dolby Digital (ac-3)、Dolby Digital Plus (ec-3) は、サポートされている回答を提供する唯一のオーディオ コーデックです。 サポートされている文字列は次のとおりです。

video/mp4;codecs=”avc1,<audio codec>”

video/mp4;codecs=”hvc1, <audio codec>”

video/mp4;codecs=”hev1, <audio codec>”

Windows 10 バージョン 1709 以降では、次もサポートされています。

Video/mp4;codecs=”vp9,<audio codec>”

Video/mp4;codecs=”vp09,<audio codec>”

クエリ文字列の特徴部分は、セミコロン区切り記号を使用して上記の文字列の 1 つに追加されます。 基になるグラフィックス ドライバーとハードウェアは、機能のクエリ方法に制約を課します。 ビデオ サブシステムには、次の要件が適用されます。

  1. 1 回の呼び出しで各サブシステムから使用できる機能名と値のクエリは 1 つだけです
  2. デコード サブシステム クエリは、ディスプレイ 1、ディスプレイ 2、または出力保護クエリなしで実行できます。
  3. Display 1 サブシステム クエリでは、デコード サブシステム クエリが存在する必要があります
  4. ディスプレイ 2 サブシステム クエリにはデコード サブシステム クエリが必要ですが、Display 1 サブシステム クエリは必要ありません。
  5. 出力保護サブシステム (HDCP) クエリは、制約 #3 および #4 に従って、Decode、Display 1、または Display 2 サブシステム クエリの有無にかかわらず実行できます。

General: Efficiency クエリは、他のサブシステム クエリと組み合わせることができます。

返される結果は、個々のすべての機能クエリの論理 AND であり、次の説明が示されています。 結果は、出力保護サブシステムからのみ許可され、一時的にしか許可されません。 この おそらく は、他のすべての機能クエリの AND の結果 よりも優先される可能性があります。 が、おそらく または サポートされていないに時間の経過と伴って解決されるまでです。 解決する の現在の時間制限は 10 秒です。

次の表に、ビデオ サブシステム別に整理された、サポートされている個々の機能クエリの一覧を示します。

アイテム ビデオ のサブシステム 機能名 機能の値 形容 このサブシステムでは必須
1a デコード decode-res-x 負以外の数値 (ピクセル単位) ビデオ デコーダーは X 軸でこの最大解像度をサポートしていますか? Y
1b デコード decode-res-y 負以外の数値 (ピクセル単位) ビデオ デコーダーは、Y 軸でこの最大解像度をサポートしていますか? Y
1c デコード decode-bitrate キロビット/秒 (Kbps) の正の数値 ビデオ デコーダーはこの最大ビットレートをサポートしていますか? Y
1d デコード decode-fps 24、25、29.97、30、50、59.94、または 60 デコードされたビデオは、この最大フレーム/秒 (FPS) 値をサポートしていますか? Y
1e デコード decode-bpc (decode-bpp は非推奨) 0、8、10、または 12 ビデオ デコーダーは、このピクセル単位の色深度を使用できますか? Y
1f デコード decoder-hardware-acceleration** 1 または true の値なし OS デコーダーが存在するかどうかにかかわらず、DXVA ハードウェア アクセラレーションを使用できますか。 N
1g デコード decoder-software-acceleration ** 1 または true の値なし OS デコーダーが存在する場合、ストリームをデコードできますか? N
1h デコード decoder-software-requires-hardware** 1 または true の値なし OS デコーダーの機能では、DXVA ハードウェア アクセラレーションが存在する必要がありますか? N
2a 表示 1 display-res-x 負以外の数値 (ピクセル単位) 少なくとも 1 つの交差** 表示で X 軸でこの解像度がサポートされていますか? Y
2b 表示 1 display-res-y 負以外の数値 (ピクセル単位) 少なくとも 1 つの交差*** 表示では、この解像度が Y 軸でサポートされていますか? Y
2c 表示 1 display-refreshrate 24、25、29.97、30、50、59.94、または 60 少なくとも要求されたリフレッシュ レートに対して (Windows によって認識されるように) ディスプレイが構成されていますか? N
2d 表示 1 display-bpc (display-bpp は非推奨) 8 または 10 必要な解像度を持つすべての交差するディスプレイ≥、少なくともこの色深度を実現していますか? N
3 表示 2* hdr 1 (サポート) ターゲットはハイ ダイナミック レンジ (HDR) レンダリングをサポートしていますか Y
4 出力保護 hdcp 0 (オフ)、1 (HDCP 2.2 Type 1 制限なし)、2 (HDCP 2.2 Type 1 の制限あり) すべての交差する有効なディスプレイは、少なくとも要求保護レベルをサポートしていますか? Y
5 一般: 効率** efficiency-setting 0 (オフ = 制限なし)、1 (オン = バッテリ電源時の解像度制限) ユーザーは、最高の解像度を優先して、バッテリ寿命、ストリーミング オーバーヘッド、ダウンロード速度を求めますか?**** Y
6a 復号化 encryption-type "cenc" または "cbcs" この暗号化の種類は、指定されたコーデック/キー システムを使用した暗号化解除でサポートされていますか? 値が指定されていない場合は、既定値の "cenc" が使用されます。 N
6b 復号化 encryption-iv-size 8 または 16 この初期化ベクター (IV) サイズ (バイト単位) は、指定されたコーデック/キー システムでの暗号化解除でサポートされていますか? 値が指定されていない場合は、既定値の 8 が使用されます。 N

* Windows 10 バージョン 1607 以降の OS バージョンでのみサポートされます

** Windows 10 バージョン 1709 以降の OS バージョンでのみサポートされます

*** 交差アルゴリズムは次のとおりです。

  1. アプリケーション ユーザー インターフェイスのビデオ クライアント領域にピクセルがあるすべてのディスプレイを検索します。
  2. 手順 1 でディスプレイを駆動しているすべてのグラフィックス アダプターを見つけます。 ハードウェア DRM クエリの場合、この一連のアダプターは、ハードウェア DRM をサポートしているアダプターのみにフィルター処理されます。
  3. 手順 2. でグラフィックス アダプターに接続されているすべてのディスプレイを検索します。

**** このポリシーがオンのときに使用する解決制限を選択するのは、コンテンツ プロバイダーに依存します。 1080p の制限をお勧めしますが、720p を使用できます。 このポリシーの入力は、Windows 10 バージョン 1709 で追加された [ビデオ設定] ユーザー インターフェイス ページから取得されることに注意してください。

項目 1a と 1b、2a、2b のペアは、それぞれ (要求された x >= 実際の交差セットの最大 x) AND (要求された y >= 実際の交差するセットの最大 y) として計算され、必要に応じて x と y をスワップして縦表示が横向きに正規化されるように変更されます。

hdcp クエリ (項目 4) には、計算コストの高い最初の呼び出しコストがあります。 要求されたレベルをアクティブなディスプレイ トポロジで満たすことができるかどうかをプローブするには、HDCP を要求されたレベルでオンにする必要があります。 HDCP が非同期的に評価され、HDCP 2.2 で最大数秒かかることが原因で結果が 場合がありますが、クエリは最小ブロックと同期されるため、結果が として終了するか、サポートされていないするまで、呼び出し元がクエリを繰り返し使用する必要があります。 Maybe 状態のままクエリで要求された HDCP レベルを変更すると、無効な応答が発生する可能性があります。 タイムアウトは約 10 秒です。

基になる計算コストのため、hdcp クエリを 250 ミリ秒ごとに複数回呼び出さないことを強くお勧めします。 推奨される最小値は 500 ミリ秒です。 キャッシュは、このコストを最小限に抑えるために実行されますが、ポーリング中に表示トポロジが変更されるとキャッシュが無効になります。

実装の詳細として、HDCP 2.2 Type 1 の制限が設定されていない場合でも、すべてのノードが HDCP 2.2 をサポートしている場合は、グラフィックス アダプターが HDCP 2.2 を使用することを選択できます。 HDCP 2.2 は、HDCP 1.x よりもかなり時間がかかる場合があります。 現在の世代のテレビの観察では、リピータを含む HDCP 1.x デバイスでは最大 8 秒、約 1 秒が表示されます。 そのため、アプリケーションの起動時または出力トポロジの変更後の最初の hdcp=1 クエリでは、この最悪のケースに対して最大 8 秒とマージンを待機する必要があります。 最大待機として 10 秒を使用する場合は、ユーザーが最初の UI など、タイトルを選択することが最も期待されていない場合に、アプリケーションのスタートアップ クエリを実行することをお勧めします。 トポロジの変更が発生しない場合、それ以降のすべての hdcp クエリは 1 秒未満になります。 コンテンツにクエリと同じ HDCP 出力要件がある場合、再生開始時に再び発生する複数秒の待機がキャッシュによって引き起こされます。

出力トポロジの変更では、高解像度のテレビやモニターがデスクトップを安定させるために数秒かかることがよくあります。 出力保護レベルが変更され、特に減少すると、通常、ハードウェア DRM でのアクティブな再生が設計上失敗します。 ここでは、MF_POLICY_UNSUPPORTED (0xC00D7159) エラーに対する反応は、ユーザーにエラーを隠し、再クエリを実行し、変更された機能に適したコンテンツ バージョンで再開することです。 効果的に、これは「ホットプラグ」安定化時間の延長として機能する。

H.264 実装ではソフトウェア デコードまたは DirectX ビデオ アクセラレーション (DXVA) GPU オフロードが可能なので、ソフトウェア DRM デコード機能クエリのパフォーマンスがあいまいになる可能性があります。 ただし、H.264 DXVA はすべての Windows エンドポイントで非常に一般的です。

ソフトウェア DRM デコード クエリの機能上の制限は、decode-bpc が評価されないことです。 Windows では H.264 10 ビット デコードはサポートされていませんが、decode-bpc=10 を含むクエリは成功します。

機能クエリの結果には、サブシステムの理論上の最大機能が反映されます。 GPU の他のアクティビティやさまざまな電源状態では、実際の機能が低下する可能性があります。

ハードウェア DRM クエリの例

ハードウェア DRM および HDCP 2.2 Type 1 の制限がある 4K 10 ビット HEVC Standard ダイナミック レンジ (SDR) コンテンツの最も一般的な使用方法を次に示します。

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”decode-res-x=3840,decode-res-y=2160,decode-bitrate=20000,decode-fps=30,decode-bpc=10,display-res-x=3840,display-res-y=2160,display-bpc=8,hdcp=2”’);

ここで、mp4a は、mp3ac-3、または ec-3に置き換えることができます。 デコード ビットレートは、コンテンツ プロバイダーのエンコードに従って調整できます。 decode-fps は 30 ではなく 60 に設定できますが、ハードウェア DRM セキュリティ プロセッサのスループット機能によって制御される場合があります。 たとえば、プロバイダーが 4K ストリームを 3200 x 1800、3000 x 2000、または 2560 x 1440 ディスプレイにプッシュする場合、display-res-xdisplay-res-y の値は完全な 4K より低く設定できます。

デコードクエリの結果は動的に変化することは予想されないため、hdcp=2 の連続したポーリングは、小さな最適化として短い形式を使用できます

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”hdcp=2”’);

もちろん、この最適化では動的なモニター解像度の変更はキャッチされませんが、このような変更により、HDCP の確立が進行中に中断される可能性があります。

ハードウェア DRM および HDCP 2.2 Type 1 の制限がある 4K 10 ビット HEVC ハイ ダイナミック レンジ (HDR) コンテンツの最も一般的な使用方法を次に示します。

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”hvc1,mp4a”;features=”decode-res-x=3840,decode-res-y=2160,decode-bitrate=20000,decode-fps=30,decode-bpc=10,display-res-x=3840,display-res-y=2160,display-bpc=8,hdr=1,hdcp=2”’);

注: Windows 10 バージョン 1607 の場合、hdr=1 は、DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 または DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 または DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 で 10 ビット MPO サポートが存在するか、開発専用の HighColor レジストリ キーが存在し、設定されていることを示します。 DWORD 値として 1 として HKLM\SOFTWARE\Microsoft\Windows\DWM key HighColor します。

ハードウェア DRM と HDCP を使用する 1080p 8 ビット H.264 SDR コンテンツで、2.2 Type 1 の制限がない場合の最も一般的な使用方法を次に示します。

IsTypeSupported(‘com.microsoft.playready.recommendation.3000’,’video/mp4;codecs=”avc1,mp4a”;features=”decode-res-x=1920,decode-res-y=1080,decode-bitrate=10000,decode-fps=30,decode-bpc=8,display-res-x=1920,display-res-y=1080,display-bpc=8,hdcp=1”’);

適用対象

こちらもご覧ください