这是我一直在处理的一个问题,并且无法得到一个好的答案(甚至来自微软)。我正在使用通用转储过滤器将硬件压缩的 MPEG 文件写入磁盘。在图中,我还有一个 SampleGrabber 过滤器,它在每一帧都被调用。从 SampleGrabber 回调中,我得到一个字幕以及 DirectShow 时间戳,并将它们写入 SAMI (.smi) 字幕文件。这一切似乎都在工作,因为 SAMI 文件包含每一帧的正确字幕。但是,我有几个问题:
前几个(通常是 3 或 4 个)DirectShow 时间戳都是 0。如果我从 SampleGrabber 获得回调,这些时间戳不应该递增吗?
当我开始播放时,显示的第一个时间戳是 SAMI 文件中大约 10-20 个字幕。我假设第一帧将显示文件中的第一个时间戳。
这可能与#2有关,但字幕未同步到文件中的相应帧。它们有时可能会迟到 40 帧。
我通过 C++ 使用 DirectShow,在 Windows XP SP3 下使用 Hauppauge HVR-1800 捕获(最新驱动程序 09/08/2008),并在 Media Player Classic 6.4.9.0 下播放。欢迎任何想法。