这很好用,我得到压缩视频
(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
}
答案 0 :(得分:0)
来自IMediaSeeking::GetCurrentPosition
的官方文档过滤器图形管理器根据当前流时间计算位置;它不会查询图表中的过滤器。对于文件回放,这会产生准确的结果,因为回放与流时间同步。对于文件写入,结果不准确。要获取文件写入图形中的当前位置,请查询多路复用器过滤器。 (但是,位置与实时捕捉无关。)
您的渲染器过滤器是什么?你正在渲染文件吗?如果是这样,您需要查询多路复用器过滤器。
您可能已经知道这一点,但您不应该使用当前位置逻辑来确定图表是否已完成 - 您需要等待EC_COMPLETE事件(例如)。