アプリケーションのコーディングを始めたばかりです。私のアイデアはStreamMyGameのようなものを作成することですが、個人的な使用のために、これを実現するシングルプレイヤーゲームトランスミッターと呼ばれるプロジェクトがすでにあります(http://sourceforge.net/projects/spgt/files/ )。
これまでのところ、エンコードもストリーミングも行っていません。ビデオをキャプチャしてアプリウィンドウに表示しているだけです。
では、エンコード/ストリーミングをどのように処理できますか?生のJPEGのUDPストリームが最も簡単なパスだと思っていましたが、よくわかりません。
また、これまでに持っているものをどのように最適化できますか?ビデオの再生には問題なく動作しますが、ゲームウィンドウをキャプチャすると、元のビデオほどきびきびとは見えません。これは、バックグラウンドで実行されていることが原因である可能性があります。それは別の質問につながります、アクティブなウィンドウの代わりに指定されたタイトルでウィンドウをキャプチャするにはどうすればよいですか?
https://github.com/fr500/desktop_streamer
編集:
現在のキャプチャ方法を使用したいくつかのテスト:
ビデオプレーヤーキャプチャ(960x720p)
starting benchmark
================================================
looking for window: test.mp4
looking for window: test.mp4
looking for window: test.mp4
looking for window: test.mp4
looking for window: test.mp4
================================================
starting single thread capture only test
Time Elapsed: 19480 milliseconds
Frame Time: 32 milliseconds
Rough FPS: 30
Sleeping 2 seconds
starting single thread capture and save as bmp test
Time Elapsed: 19768 milliseconds
Frame Time: 32 milliseconds
Rough FPS: 30
Sleeping 2 seconds
starting single thread capture and save as jpg test
Time Elapsed: 28593 milliseconds
Frame Time: 47 milliseconds
Rough FPS: 20
Sleeping 2 seconds
starting dual thread capture only test
Time Elapsed: 19515 milliseconds
Frame Time: 32 milliseconds
Rough FPS: 30
Sleeping 2 seconds
starting quad thread capture only test
Time Elapsed: 19481 milliseconds
Frame Time: 32 milliseconds
Rough FPS: 30
Sleeping 2 seconds
Crysis 2キャプチャ(1024x768p)
starting benchmark
================================================
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
looking for window: Crysis 2 (TM)
================================================
starting single thread capture only test
Time Elapsed: 20003 milliseconds
Frame Time: 33 milliseconds
Rough FPS: 29
Sleeping 2 seconds
starting single thread capture and save as bmp test
Time Elapsed: 20105 milliseconds
Frame Time: 33 milliseconds
Rough FPS: 29
Sleeping 2 seconds
starting single thread capture and save as jpg test
Time Elapsed: 17353 milliseconds
Frame Time: 28 milliseconds
Rough FPS: 34
Sleeping 2 seconds
starting dual thread capture only test
Time Elapsed: 19991 milliseconds
Frame Time: 33 milliseconds
Rough FPS: 30
Sleeping 2 seconds
starting quad thread capture only test
Time Elapsed: 19983 milliseconds
Frame Time: 33 milliseconds
Rough FPS: 30
Sleeping 2 seconds
画像をBMPに保存しても実際にはオーバーヘッドは追加されませんが、JPGのように保存すると、ビデオへのオーバーヘッドエンコーディングのアイデアが得られます。それでも最大の問題は、フレーム自体を取得することです。現在のように遅すぎて、追いつくことができず、その結果、一部のフレームが欠落しています。フレームを60fps以上でキャプチャできれば、シングルプレイヤーゲームではエンコーディング+ストリーミングの遅延を実際に管理できる可能性があります。
フレームを取得するためにDXフックアプローチを試してみます。