H.264 streamSDKを使用してDVRからを受信しています。メモリリークがあり、すべてのリークの原因はSDKだと思いました。しかし、ストリームを記録し、ディスクから1つずつフレームを読み取って再生すると(サードパーティのdllが関与していない場合)、問題はdllではなくストリーム自体にあることに気付きました。
奇妙なことにDivX H264 Decoder、メモリリークを引き起こさない唯一のコーデックですが、ストリームが長時間実行されると、DivXデコーダーもクラッシュすることがあります。使用したいMicrosoft DTV-DVD Video Decoderのですが、大量のメモリリークが発生し、多くのフレームがドロップされます。私が試した他の多くのH.264デコーダーも同じように動作します。
h.264 frames他の問題のないストリームと比較していくつかを使用して調べましたh.264 parsersが、ログから明らかなことは何もわかりませんでした。
私の問題はh.264フレーム構造に関するものなので、FramesFromFileSourceFilter以下からダウンロードできるという名前のソースフィルターを用意しました。
http://www.akaydin.com/directshow/FramesFromFileSourceFilter.zip
これはVisual Studio 2008プロジェクトであり、すべての依存関係は、比較的配置されたフォルダー(h.264フレームを含む)のzipファイルに含まれています。したがって、必要なのは、プロジェクトをコンパイルし、出力をに登録し、regsvr32.exeGraphEditまたはGraphStudioから必要なh.264デコーダーでフィルターを実行することだけです。グラフの例を以下に示します。


また、h264フレームは、以下のリンクで単一の生のh264ファイルとして利用できます。これはVLCで再生できます(元のFPSは12 FPSであったため、FPSが間違っています)。
http://www.akaydin.com/directshow/stream.zip
質問:
DivXデコーダーを除く多くの有名なH264デコーダーでメモリリークの問題を引き起こしている可能性があります。このストリームの何が問題になっていますか?
アップデート1
データスレッドの読み取りは削除され、機能はバッファとフラグを使用せずにFillBufferに移動されます。問題は同じままです。
http://www.akaydin.com/directshow/FramesFromFileSourceFilterUpdate1.zip
アップデート2
Update1は、いくつかの問題を引き起こしていた関数で使用Sleep()していました。FillBuffer()今、私はを削除しSleep()、以前SetTime()は〜12FPSでした。これによりMicrosoft DTV-DVD Video Decoder、フレームのドロップの問題も解決されましたが、メモリの問題は解決されませんでした。
http://www.akaydin.com/directshow/FramesFromFileSourceFilterUpdate2.zip
メモリの増加はでWorking Setのみ発生します。Virtual Bytes安定してPrivate Bytesいるようです。でのみ発生する継続的なWorking Setメモリ増分の原因は何でしょうMicrosoft DTV-DVD Video Decoderか?