指定したキー システムに対して、指定したコンテンツ タイプがサポートされているかどうかをクエリします。
構文
HRESULT IsTypeSupportedEx(
[in] BSTR type,
[in] BSTR keySystem,
[out] MF_MEDIA_ENGINE_CANPLAY *pAnswer
);
パラメーター
[in] type
サポートが照会される機能を識別する BSTR 。 このパラメーターは、メディアの種類とサブタイプの識別子を指定する RFC 2045 Content-Type 文字列と、必要なコーデックの RFC 6381 コーデック識別子を受け入れます。 これらの基本文字列は、HTML5 HTMLMediaElement canPlayType メソッドで使用されているものと一致します。 RFC 2045 では、追加のカスタム パラメーターを修飾子として ";<parameter>=<name>[=<value>] [,<name>[=<value>]"。 RFC 2045 準拠パーサーは、認識されない場合、これらのパラメーターを無視する必要があります。 機能クエリの場合、 <パラメーター> はフィーチャーという名前です。
この実装では、有効なクエリ結果を提供するために、RFC 2045 メディアの種類とサブタイプの識別子 ("video/mp4"、RFC 6381 コーデック パラメーター codec="<video codec>[,<audio codec>]) が常に存在する必要があります。
コンテンツ タイプとタイプという用語は、従来 MIME タイプとしてよく知られています。
[in] keySystem
クエリを確認する PlayReady 名前空間を識別し、ハードウェアまたはソフトウェアの保護を指定する BSTR 。 ハードウェア クエリには "com.microsoft.playready.recommendation.3000" を使用します (PlayReady にはハードウェア オフロードのサポートが必要)、ソフトウェア保護のサポートを明示的に照会する場合は "com.microsoft.playready.recommendation.2000"、一般的なクエリの場合は "com.microsoft.playready.recommendation" を使用します (下位互換性を保証するには、ソフトウェア保護のサポートに回答する必要があります)。
[out] pAnswer
クエリ対象の機能がサポートされている可能性があるかどうか、サポートされている可能性があるかどうか、またはサポートされていないかを示すMF_MEDIA_ENGINE_CANPLAY列挙体の値。
戻り値
成功にS_OK。
注釈
型入力パラメーターには、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、または出力保護クエリなしで実行できます。
- Display 1 サブシステム クエリでは、デコード サブシステム クエリが存在する必要があります
- ディスプレイ 2 サブシステム クエリにはデコード サブシステム クエリが必要ですが、Display 1 サブシステム クエリは必要ありません。
- 出力保護サブシステム (HDCP) クエリは、制約 #3 および #4 に従って、Decode、Display 1、または Display 2 サブシステム クエリの有無にかかわらず実行できます。
General: Efficiency
クエリは、他のサブシステム クエリと組み合わせることができます。
返される結果は、個々のすべての機能クエリの論理 AND であり、次の説明が示されています。 A Maybe result is allowed only from the output protection subsystem, and only temporarily. これは、おそらく他のすべての機能クエリの AND の結果よりも優先される可能性があります。その結果は、時間の経過と同時に [おそらく] または [サポートされていません] に解決されるまでです。 [Maybe to resolve] の現在の時間制限は 10 秒です。
次の表に、ビデオ サブシステム別に整理された、サポートされている個々の機能クエリの一覧を示します。
アイテム | ビデオ のサブシステム | 機能名 | 機能値 | 説明 | このサブシステムでは必須 |
---|---|---|---|---|---|
1a | デコード | decode-res-x | 負以外の数値 (ピクセル単位) | ビデオ デコーダーは X 軸でこの最大解像度をサポートしていますか? | Y |
1b | デコード | decode-res-y | 負以外の数値 (ピクセル単位) | ビデオ デコーダーは、Y 軸でこの最大解像度をサポートしていますか? | Y |
1c | デコード | デコードビットレート | キロビット/秒 (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 |
1時間 | デコード | decoder-software-requires-hardware** | 1 または値なしを true として扱う | OS デコーダーの機能では、DXVA ハードウェア アクセラレーションが存在する必要がありますか? | N |
2a | 表示 1 | display-res-x | 負以外の数値 (ピクセル単位) | 少なくとも 1 つの交差** ディスプレイで X 軸でこの解像度がサポートされていますか? | Y |
2b | 表示 1 | display-res-y | 負以外の数値 (ピクセル単位) | Y 軸で少なくとも 1 つの交差*** 表示でこの解像度がサポートされていますか? | Y |
2c | 表示 1 | ディスプレイリフレッシュレート | 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 | 一般: 効率** | 効率設定 | 0 (オフ = 制限なし)、1 (オン = バッテリ電源時の解像度制限) | ユーザーは、最高の解像度を優先して、バッテリ寿命、ストリーミング オーバーヘッド、ダウンロード速度を求めますか?**** | Y |
6a | 復号化 | 暗号化タイプ | 省略可能な "-clearlead" サフィックスを持つ "cenc" または "cbcs"。 | この暗号化の種類は、指定されたコーデック/キー システムを使用した暗号化解除でサポートされていますか? 値が指定されていない場合は、既定値の "cenc" が使用されます。 Windows 11 ビルド 22621 および Windows 10 ビルド 19045.5796 以降では、サフィックス "-clearlead" がサポートされています。 暗号化の種類の値に "-clearlead" が追加されると、暗号化されたコンテンツの先頭でクリア コンテンツを使用するためのサポートも要求されます。 コンテンツの先頭にあるコンテンツをクリアすると、最初のフレームを表示する時間が短縮されます。 暗号化の種類に "-clearlead" を追加すると、要求されたコーデックのバージョン番号が確認されます。 AV1 および VP9 コーデックはメジャー バージョン 2 でチェックされ、HEVC は v2.0.53421 以降をチェックします。 | N |
6b | 復号化 | encryption-iv-size | 8 または 16 | この初期化ベクター (IV) サイズ (バイト単位) は、指定されたコーデック/キー システムでの暗号化解除でサポートされていますか? 値が指定されていない場合は、既定値の 8 が使用されます。 | N |
* Windows 10 バージョン 1607 以降の OS バージョンでのみサポートされます
** Windows 10 バージョン 1709 以降の OS バージョンでのみサポートされます
*** 交差アルゴリズムは次のとおりです。
- アプリケーション ユーザー インターフェイスのビデオ クライアント領域にピクセルがあるすべてのディスプレイを検索します。
- 手順 1 でディスプレイを駆動しているすべてのグラフィックス アダプターを見つけます。 ハードウェア DRM クエリの場合、この一連のアダプターは、ハードウェア DRM をサポートしているアダプターのみにフィルター処理されます。
- 手順 2. でグラフィックス アダプターに接続されているすべてのディスプレイを検索します。
**** このポリシーがオンの場合に使用する解決制限を選択するのは、コンテンツ プロバイダー次第です。 1080p の制限をお勧めしますが、720p を使用できます。 このポリシーの入力は、Windows 10 バージョン 1709 で追加された [ビデオ設定] ユーザー インターフェイス ページから取得されることに注意してください。
項目 1a と 1b、1b、2a、2b のペアはそれぞれ (要求された x >= 実際の交差セットの最大 x) AND (要求された y >= 実際の交差するセットの最大 y) として計算され、必要に応じて x と y をスワップすることで縦向きの表示が横向きに正規化されます。
hdcp クエリ (項目 4) には、計算コストの高い最初の呼び出しコストがあります。 要求されたレベルをアクティブなディスプレイ トポロジで満たすことができるかどうかをプローブするには、HDCP を要求されたレベルでオンにする必要があります。 HDCP が非同期的に評価され、HDCP 2.2 で最大数秒かかるが、クエリが最小ブロッキングで同期されるため、結果が "おそらく" または "サポートされていません" として終了するまで、呼び出し元がクエリを繰り返し使用する必要があります。 Maybe 状態のままクエリで要求された HDCP レベルを変更すると、無効な応答が発生する可能性があります。 Maybe タイムアウトは約 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
をmp3
、ac-3
、またはec-3
に置き換えることができます。 デコード ビットレートは、コンテンツ プロバイダーのエンコードに従って調整できます。
decode-fps
は 30 ではなく 60 に設定できますが、ハードウェア DRM セキュリティ プロセッサのスループット機能によって制限される場合があります。
display-res-x
プロバイダーが 4K ストリームを 3200 x 1800、3000 x 2000、または 2560 x 1440 ディスプレイにプッシュする場合、 display-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 レジストリ キーが存在し、設定されていることを示します。HKLM\SOFTWARE\Microsoft\Windows\DWM key HighColor
DWORD 値は 1 です。
ハードウェア 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”’);
要求事項
要件 | 価値 |
---|---|
ヘッダー | mfmediaengine.h |