DirectShow IMediaSeeking位置始终返回0

时间:2014-12-22 07:24:06

标签: c# directshow

这很好用,我得到压缩视频

     (graph as IMediaFilter).SetSyncSource(null).Check();
                        IMediaControl mc = graph as IMediaControl;
                        mc.Run().Check();

但是这个IMediaSeeking位置总是返回0.为什么?

(graph as IMediaFilter).SetSyncSource(null).Check();
IMediaControl mc = graph as IMediaControl;
IMediaSeeking ms = mux as IMediaSeeking;
mc.Run().Check();

long length;
ms.GetDuration(out length).Check();
long pos;
while (ms.GetCurrentPosition(out pos).Succeeded() && pos < length)
{
    //this pos always 0
}

1 个答案:

答案 0 :(得分:0)

来自IMediaSeeking::GetCurrentPosition

的官方文档
  

过滤器图形管理器根据当前流时间计算位置;它不会查询图表中的过滤器。对于文件回放,这会产生准确的结果,因为回放与流时间同步。对于文件写入,结果不准确。要获取文件写入图形中的当前位置,请查询多路复用器过滤器。 (但是,位置与实时捕捉无关。)

您的渲染器过滤器是什么?你正在渲染文件吗?如果是这样,您需要查询多路复用器过滤器。

您可能已经知道这一点,但您不应该使用当前位置逻辑来确定图表是否已完成 - 您需要等待EC_COMPLETE事件(例如)。