IMediaSample时间和媒体时间

时间:2015-04-22 15:57:40

标签: c++ visual-c++ directshow

SetTime和SetMediaTime之间的主要区别是什么?

现在我的directshow livesource我计算它的时间

REFERENCE_TIME rtStart = m_rtLastSampleTime;
m_rtLastSampleTime += pVih->AvgTimePerFrame;
pms->SetTime(&rtStart, &m_rtLastSampleTime);
pms->SetSyncPoint(TRUE);
pms->SetDiscontinuity(rtStart <= 1);

这对某些编码器不起作用 我注意到使用这些编码器的源设置了mediatime,它们似乎跳了起来。

1 个答案:

答案 0 :(得分:0)

Media Times

  

可选地,过滤器还可以指定样本的媒体时间。在视频流中,媒体时间表示帧编号。在音频流中,媒体时间表示数据包中的样本号。例如,如果每个数据包包含一秒44.1千赫兹(kHz)音频,则第一个数据包的媒体开始时间为零,媒体停止时间为44100.在可搜索流中,媒体时间始终相对于开始时间的流。例如,假设您从15-fps视频流开始寻找2秒。搜索后的第一个媒体样本的时间戳为零,但媒体时间为30。

     

渲染器和多路复用器过滤器可以通过检查间隙来使用介质时间来确定帧或样本是否已被丢弃。但是,不需要过滤器来设置媒体时间。要在样本上设置媒体时间,请调用IMediaSample :: SetMediaTime方法。

我不认为它实际上是在任何地方使用过的。相反,SetTime很重要。