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

时间:2009-08-19 11:39:56

标签: c# directshow

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

提前多多感谢。

1 个答案:

答案 0 :(得分:11)

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

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

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