0

我正在编写一个directshow源过滤器来读取特定的原始文件,原始文件在每一帧中都包含时间戳(utc时间)

我的过滤器是从微软SDK的“Push Source Filters Sample”修改而来的,所以最重要的是覆盖GetMediaType()、DecideBufferSize()和FillBuffer()。

我的问题在 FillBuffer(IMediaSample *pSample) 中。我不知道如何在这个函数中正确调用 pSample->SetTime() ,因为时间戳从一个很大的数字开始,帧会一直等到 StreamTime 到达时间戳。

该问题可以通过在每一帧上减去一个偏移量来解决,但我需要下游过滤器中的原始时间戳(SampleGrabber)

有更好的解决方案吗?

4

1 回答 1

0

媒体样本上没有绝对时间戳。您需要从正在流式传输的片段中的所有样本中减去前导媒体样本时间,以便第一个媒体样本为零,并且以下内容正确设置。

如果您可以使基本时间戳(您正在减去)可用于您的样本采集器回调,那么您可以将其添加回来并恢复正确的绝对时间。

MSDN:DirectShow 中的时间戳

于 2013-02-27T08:16:34.617 回答