C# DirectShow IMediseek位置始终返回0

C# DirectShow IMediseek位置始终返回0,c#,directshow,C#,Directshow,这是工作好,我得到压缩视频 (graph as IMediaFilter).SetSyncSource(null).Check(); IMediaControl mc = graph as IMediaControl; mc.Run().Check(); 但这个imediseek位置总是返回0。为什么? (graph as IMediaFilter).SetSyncSource(null)

这是工作好,我得到压缩视频

     (graph as IMediaFilter).SetSyncSource(null).Check();
                        IMediaControl mc = graph as IMediaControl;
                        mc.Run().Check();
但这个imediseek位置总是返回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
}
(图形为IMediaFilter).SetSyncSource(null).Check();
IMediaControl mc=作为IMediaControl的图形;
IMediaSeeking ms=mux作为IMediaSeeking;
mc.Run().Check();
长度长;
ms.GetDuration(超出长度).Check();
长pos;
while(ms.GetCurrentPosition(out pos).successed()&&pos
来自

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

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


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

可能此
IMediseek
实现(在此多路复用器过滤器上)未报告位置,或者未正确报告。为什么?这是所有标准gb.SetOutputFileName(DShowIDs.MEDIASUBTYPE_Avi,dest_file,out mux,out sink);gb.RenderStream(null,null,overlay_filter,compressor,mux).Check();他正在做
mux作为IMediaSeeking,即使用了多路复用器,这是正确的/可以理解的,但是他想了解更多细节,尤其是图形拓扑。也许这是mux特有的问题。