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

6 c# directshow

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

非常感谢提前.

Ger*_*ies 11

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

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

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