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

C# 如何使用directshow在多个显示器上同步播放多个视频?,c#,directshow,C#,Directshow,我已经成功地使用directshowlib for c#通过一个视频窗口和多个流同步播放了多达8个视频。问题是视频窗口只在一个屏幕上播放——当我试图让它跨越多个屏幕时,它不起作用。应用程序窗口的跨度正确,但视频仅在一个屏幕上播放。有什么想法吗 事先非常感谢。我假设您使用的是带有多个输入引脚的VMR。VMR将渲染到单个曲面,该曲面需要在单个显示器上显示。您应该能够将流渲染到多个VMR,每个VMR放置在最大化窗口内的单独显示器上 听起来好像所有的流都在一个图形中。您可以将它们分为不同的图,每个图都有

我已经成功地使用directshowlib for c#通过一个视频窗口和多个流同步播放了多达8个视频。问题是视频窗口只在一个屏幕上播放——当我试图让它跨越多个屏幕时,它不起作用。应用程序窗口的跨度正确,但视频仅在一个屏幕上播放。有什么想法吗


事先非常感谢。

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

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

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

非常感谢Geraint。我试试看。