私はC++でスクリーンキャストユーティリティを開発しています。
基本的にデスクトップフレームをキャプチャし、AVIファイルを作成します。アルゴリズムは次のとおりです。
- スレッドを作成します。
this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);
デスクトップを
thScreenCapture
1秒間にn回キャプチャします(5 fpsなど)。obj->Capture();
Capture()で、ビットマップデータをaviファイルに追加します。
this->appendBitmapToAvi(this->avifile, bmp);
このユーティリティは、サウンドも録音します。そのため、メソッドthScreenCaptureでは、サウンドデータもaviファイルに追加されます。
問題は、1秒あたり6フレーム(ハードウェア構成によって変わる可能性があります)を超えるフレームがキャプチャされると、フレームとサウンドの間にラグが発生することです。
アルゴリズムを最適化するための解決策を探しています。解決策は、フレームをメモリにバッファリングすることであり、すべてのフレームをオンザフライでaviファイルに追加することではありません。ただし、別のスレッドでキャプチャされているサウンドデータを処理する必要があるため、コードがより複雑になります。
このユーティリティが同期を失うことなくサポートするfps値を増やすために何を提案しますか?