これは私がしばらく扱ってきた問題であり、(Microsoftからでも)良い答えを得ることができませんでした。汎用ダンプフィルターを使用して、ハードウェアで圧縮されたMPEGファイルをディスクに書き込みます。グラフには、すべてのフレームで呼び出されるSampleGrabberフィルターもあります。SampleGrabberコールバックから、DirectShowタイムスタンプとともに字幕を取得し、SAMI(.smi)字幕ファイルに書き込みます。SAMIファイルにはすべてのフレームに正しい字幕が含まれているため、これはすべて機能しているようです。ただし、いくつか問題があります。
最初のいくつか(通常は3または4)のDirectShowタイムスタンプはすべて0です。SampleGrabberからコールバックを取得している場合、これらのタイムスタンプは増分されるべきではありませんか?
再生を開始すると、最初に表示されるタイムスタンプは、SAMIファイルの約10〜20個の字幕です。最初のフレームには、ファイルの最初のタイムスタンプが表示されると思います。
これはおそらく#2に関連していますが、字幕がファイル内の適切なフレームに同期されていません。最大40フレーム遅れることがあります。
私はC++経由でDirectShowを使用しており、Windows XP SP3(最新のドライバーは2008年9月8日)でHauppauge HVR-1800を使用してキャプチャし、Media PlayerClassic6.4.9.0で再生しています。どんなアイデアでも大歓迎です。