IMediaSample时间和媒体时间

问题描述:

SetTime和SetMediaTime之间的主要区别是什么?IMediaSample时间和媒体时间

现在在我的DirectShow livesource我算算时间像这样

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

这不能与某些编码器。
我注意到与这些编码器一起工作的源代码设置了mediatime,并且它们似乎跳起来了。

Media Times

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

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

我不认为它实际上在任何地方使用。相反,SetTime非常重要。