这是一个我已经处理了一段时间的问题,而且还没有得到一个好的答案(即使是从微软那里)。我使用通用转储过滤器将硬件压缩的MPEG文件写入磁盘。在图中,我还有一个SampleGrabber过滤器,它在每个帧上都会被调用。通过SampleGrabber回调,我获得了一个副标题以及DirectShow时间戳,并将它们写到一个SAMI (.smi)字幕文件中。这一切似乎都是可行的,因为SAMI文件包含每个帧的正确字幕。不过,我有几个问题:
我正在使用DirectShow通过C++,在Windows SP3下使用HauppaugeHVR-1800捕获(带有最新的驱动程序09/08/2008),并在媒体播放器经典6.4.9.0下播放。任何想法都欢迎。
发布于 2008-12-12 14:26:46
您是否使用获取传入的IMediaSample的GetTime或GetMediaTime。GetTime是您想要的,因为它重新呈现流、演示文稿的时间。
确保还检查传入的IMediaSample的isPreRoll函数。应忽略预录示例,因为它们将在回放过程中再次输出。我要做的另一件事是确保您的样本抓取器在过滤器的下游尽可能远。最好是在任何要求者和渲染者之后。
还请参阅TimeStamps文档中关于DirectShow的文章。它概述了使用时间戳的其他注意事项。
当然,即使在完成上述所有技巧之后,对于特定的DirectShow过滤器的行为仍然没有绝对的保证。
https://stackoverflow.com/questions/360707
复制相似问题