如何使用媒体基础在给定时间运行/启动线程

How to run/start a thread at a given time using Media Foundation?

本文关键字:运行 定时间 启动 线程 何使用 媒体      更新时间:2023-10-16

我正在寻找在指定时间与媒体基金会启动线程。

我知道,在直接表中,有一个由 IMediaFilter调用的函数,其中 tStart是参考时钟的时间值。:

Interface::HRESULT Run(REFERENCE_TIME tStart);

但是在媒体基金会中,没有这样的功能可以运行或以时间为参数的线程。

是否有解决方案可以在媒体基金会中执行此操作?

DirectShow或Media Foundation均具有与问题描述相匹配的功能。

两个API都有在请求之后立即启动活动的方法。

DirectShow的IMediaFilter.Run不会首先启动线程。然后,该方法是一个技巧,而不是预期的用途:

...当应用程序调用IMediaControl::Run方法时,过滤器图管理器在每个过滤器上调用IMediaFilter::Run。它将将来稍微设置TSTART的值,以说明图形延迟。

请注意,您在调用IMediaFilter::Run上没有任何消息,该方法应该在内部称为。

媒体基金会的内部设计不同。您无法安排启动,也不会对内部工作线程产生影响。假设您启动媒体会话活动并尽快开始。