Kinect v2からの色、赤外線、深度データをバッファリングする.NET 4.5アプリケーションを作成し、処理を実行してから、非圧縮形式でディスクにダンプします。.NETアプリケーションもffmpegをサブプロセスとして起動し、カラーデータをH.264としてエンコードされるようにパイプ処理します。
私はSSDを使用していないため、ビデオデータはディスクに書き込むよりも早く到着します。しかし、それは大丈夫です。RAMが不足しているときにビデオフレームを破棄してもかまいません。私の唯一の要件は、私が保持するものがほとんど8〜10秒のビデオの塊であることです。そのため、連続した8〜10秒のビデオ(約1.5〜2 GB)をバッファリングするのに十分なRAMがないときに、ビデオフレームの破棄を開始するロジックを.NET 4.5アプリケーションに追加しました。
また、ページのスラッシングを防ぐために、ページングファイルを完全に無効にしました。これにより、合計16 GBの物理RAMが残ります。
私の問題は、そのメカニズムが適切に設定されていても、Windows 8.1が低RAMをフリークすると、時々.NETアプリケーションまたはffmpegサブプロセスが強制終了することです。ディスクに書き込む。自分のプロセスが他のプロセスよりも重要であることをWindowsに伝える方法はありますか?
CreateMemoryResourceNotification
は、はるかにハックの少ない方法を指摘できます。