画面のビデオ ストリームをキャプチャしてリモート クライアントに送信するアプリを作成しようとしています。Windows で画面をキャプチャする最善の方法は、DXGI Desktop Duplication API (Windows 8 以降で利用可能) を使用することであることがわかりました。Microsoft は、複製されたフレームを画面にストリーミングするきちんとしたサンプルを提供しています。さて、これらのフレームをエンコードしてネットワーク経由で送信する最も簡単で比較的高速な方法は何だろうと考えていました。
フレームAcquireNextFrame
は、更新されたダーティ リージョンとムーブ リージョンを含むデスクトップ ビットマップとメタデータを含むサーフェスから取得されます。ここから、いくつかのオプションがあります。
- DirectX サーフェスからビットマップを抽出し、 ffmpegなどの外部ライブラリを使用して一連のビットマップを H.264 にエンコードし、RTSP 経由で送信します。この方法は簡単ですが、ネイティブの Windows メソッドを利用していないため、遅すぎるのではないかと心配しています。D3D テクスチャを ffmpeg 互換のビットマップに変換するのは、不要な作業のように思えます。
- この回答から: D3D テクスチャを IMFSample に変換し、MediaFoundation のSinkWriterを使用してフレームをエンコードします。このビデオ エンコーディングのチュートリアルを見つけましたが、ビデオ ファイルにすべてをダンプする代わりに、エンコードされたフレームをすぐに取得して送信する方法をまだ見つけていません。
以前にこのようなことをしたことがないので、正しい方向に進んでいるかどうかを尋ねています. 最終的には、リモート デバイスから表示できる、シンプルでできれば低レイテンシのデスクトップ キャプチャ ビデオ ストリームが必要です。
また、Desktop Duplication が提供するダーティ リージョンとムーブ リージョンを利用できないかと考えています。フレームをエンコードする代わりに、ネットワーク経由で送信し、クライアント側で処理を行うことができますが、これは、クライアントで DirectX 11.1 以降を使用できる必要があることを意味します。これは、モバイル プラットフォームにストリーミングしたい場合には不可能です。 .