6

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

提前非常感谢。

4

1 回答 1

11

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

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

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