如何使用directshow在多个显示器上同步播放多个video?

我已成功设法使用带有多个流的单个video窗口同步播放8个video,使用directshowlib进行c#。 问题是video窗口只在一个屏幕上播放 – 当我试图让它跨越许多屏幕时,它不起作用。 应用程序窗口正确跨越,但video仅在一个屏幕上播放。 有任何想法吗?

非常感谢提前。

我假设您正在使用具有多个输入引脚的VMR。 VMR将渲染到单个表面,该表面需要在单个显示器上。 您应该能够将流渲染到多个VMR,每个VMR都放置在最大化窗口内的单独显示器上。

听起来好像你将所有流都放在一个图表中。 您可以将它们分成不同的图形,每个图形都有一个源和一个渲染器。 同步启动图表意味着使用IMediaFilter :: Run而不是IMediaControl :: Run:

  • 选择一个图作为主图。
  • 确保主人有一个时钟。 这通常在激活时完成,但您可以通过在图形上调用SetDefaultSyncSource来强制它发生。
  • 查询IMediaFilter的图形,使用GetSyncSource从主图形中获取时钟,并使用SetSyncSource将其传递给其他图形。
  • 暂停所有图表。
  • 等到GetState返回S_OK(暂停完成)。
  • 从图表中获取时间并添加10毫秒左右。
  • 调用IMediaFilter ::在所有图形上运行,将此时间(现在为+ 10ms)作为参数传递。