DirectCapture の概要
DirectCapture
DirectCapture は、互換性のあるフレームのサーバー遅延を自動的に最小化する Xbox ゲーム ストリーミング プラットフォーム機能です。 XGameStreamingGetDisplayDetails API を使用すると、互換性のあるフレーム要件を照会できるため、ゲームで DirectCapture を確実に活用できます。 互換性のあるフレームの要件を以下に説明します。
Xbox ゲーム ストリーミングは、提示されたフレームをキャプチャ (コピー) し、ストリーミング用にフレームをエンコードすることで、ゲームをストリーミングします。 DirectCapture を使用しない場合、フレームは、入力プレゼンテーション パラメーターから、ディスプレイ ハードウェアを使用してエンコードするための形式に変換されます。 フレームには、Present Queue で 0 ~ 66 ミリ秒の待機時間があり、フレームをキャプチャするためにディスプレイ ライトバック (DWB) を通過するため、8.3 ミリ秒の待機時間があります。 プレゼント キューの時間は、ゲームのフレーム レートや、ダブル バッファリングまたはトリプル バッファリングのどちらが使用されているかなどによって異なります。 8.3 ミリ秒のディスプレイ ライトバック時間は、HDMI クロックに関連付けられているため、8.3 ミリ秒に固定されています。
ただし、Xbox ゲーム ストリーミング サーバーに HDMI ディスプレイが接続されていないため、今度は DirectCapture がディスプレイ ハードウェアを使用する代わりにソフトウェア実装で短絡します。 DirectCapture は、VSync の待機や、ダブルまたはトリプル バッファリングの反転の待機などを排除することで、約 2 ~ 12 ミリ秒でエンコード用のフレームをキャプチャします。 これにより、待機時間が最大 72 ミリ秒短縮されます。
待機時間を短縮するには、DirectCapture と互換性のあるパラメーターをゲームに提示する必要があります。
- サポートされているコンソール モード
- Lockhart プロファイリング モード
- サポートされているゲームのレンダリング解像度
- カスタムの解像度を含む任意値
- サポートされているスワップチェーン形式
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R9G9B9E5_SHAREDEXP
- サポートされている色空間
- DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
上記以外のプレゼンテーション パラメーターは、現在 DirectCapture ではサポートされていません。 たとえば、次のものはサポートされていません。
- ゲームレンダリング解像度: XDK ゲームの場合は 3840x2160
- HDR
- 複数のプレゼンテーション プレーン
XGameStreamingGetDisplayDetails は、DirectCapture との互換性を保つために何を表示するかを決定するのに役立ちます。PIX サポートは、将来リリースされる予定です。
タイトルが DirectCapture でストリーミングされていることを検証する
ストリーミング ログ ファイルを確認することで、タイトルが DirectCapture で実行されていることを確認できます。
ログ ファイルを収集しています
ストリーミング ログ ファイルを収集するには:
- ゲームの実行を開始する
- ストリーミングを開始し、コンテンツ テスト アプリ (CTA) のいずれかに接続します
- ゲームの短いセクションをプレイする
- ゲームを終了する
- CTA を切断する
- ログの書き込みが完了するまで 30 秒待ちます
- C:\temp などのローカル ディレクトリにログをコピーします。
xbcp xt:\XStreamLogs\XStreamManagementService.etl c:\temp
xbcp xt:\XStreamLogs\nanotrace.etl c:\temp
移行メッセージの表示
- Windows パフォーマンス アナライザーで XStreamManagementService.etl を開く
- 左側ウィンドウのシステム アクティビティを右クリックし、[グラフを分析ビューに追加] を選択します。
- 下のウィンドウで、Microsoft.Xbox.StreamManagementService を展開します。
- Microsoft.Xbox.HostStreamingAgent プロバイダーを探し、必要に応じて展開します。 これがない場合は、上記のログ ファイルの収集手順を繰り返します。
- DirectCaptureLog タスクを選択し、必要に応じて不明なプロセスを展開します。
- 右にスクロールして、0_Message、1_Message などの名前の列を探します。それぞれが DirectCapture からのメッセージです。 行が複数ある場合は、時間順にソートされます。
- 各メッセージの意味については、次の表を参照してください。 これらのメッセージは、DirectCapture が無効になっている場合の理由とともに、DirectCapture 遷移のシーケンスを示します。
メッセージ ID | メッセージ |
---|---|
1 | DirectCapture に切り替える |
2 | DWB に切り替える (DirectCapture は無効) |
3 | サポートされていないレンダリング プレーン構成です。 これは、ゲーム内のレンダリング プレーンが原因であるか、システムがタイトルの上にオーバーレイをレンダリングするためである可能性があります (システム通知など)。 |
4 | サポートされていないピクセル形式です。 その時点でのゲームのピクセル形式については、関連する PixelFormat を参照してください |
5 | サポートされていないタイル モードです。 その時点でのゲームのタイル モードに関連付けられている TileMode を参照してください |
6 | サポートされていないゲームの解像度です。 関連する GameResolutionWidth と GameResolutionHeight を参照して、その時点でゲームがレンダリングしていた解像度を確認します。 |
8 | ゲーム以外のフレームが画面に表示される |
12 | DirectCapture が有効になっていません (コンソール モードがサポートされていない可能性があります) |
18 | サポートされていないソースの四角形のサイズ |
19 | サポートされていない現在のパラメーター フラグ |
21 | サポートされていない出力先の長方形のサイズ |
詳細フレーム情報
- Windows パフォーマンス アナライザーで nanotrace.etl を開く
- "Microsoft.Xbox.CloudStreaming" プロバイダーに移動し、"VideoFrameCaptureSourceChanged" タスクを選択し、プロセス "ApplicationClipService.exe" を展開して、すべての "VideoFrameCaptureSourceChanged" イベントを表示します。
- "NewCaptureSource" フィールドを確認してください
- タイトルは、値が "DCap" のときに開始される DirectCapture の低レイテンシーでストリーミングされています
- "DWB" の値は、DirectCapture が使用されず、デフォルトのキャプチャ メカニズムが使用されることを意味します。 これは次の場合に行われます。
- タイトルが DirectCapture と互換性のないフレームを出力する
- システムはタイトルの上にオーバーレイをレンダリングします (例: システム通知)
注意
- nanotrace.etl の履歴は限られているため、"VideoFrameCaptureSourceChanged" が表示されない場合は、セッションが長すぎた可能性があります。 検証するには、短いセッションを実行して ETL を確認します。
- 開発キットでの DirectCapture のサポートは、Xbox シリーズ X 開発キットに限定されています
- 詳細については、「Xbox ゲーム ストリーミング: 待ち時間の短縮と最適なモバイル エクスペリエンスの最適化」をご覧ください。