Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
462 views
in Technique[技术] by (71.8m points)

c# - How to play multiple videos in sync over multiple monitors using directshow?

I′ve successfully managed to play up to 8 videos in sync using a single video window with multiple streams using the directshowlib for c#. The problem is the video window plays only on a single screen - when I try to have it span over many screens it does not work. The app window spans correctly, but the video plays only on one screen. Any ideas?

Thanks a lot in advance.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I assume that you're using the VMR with multiple input pins. The VMR is going to render to a single surface, which needs to be on a single display. You should be able to render your streams to multiple VMRs, with each VMR placed on a separate display within your maximised window.

It sounds as though you have all the streams in a single graph. You can separate them into different graphs, with each graph having one source and one renderer. Starting the graphs in sync means using IMediaFilter::Run instead of IMediaControl::Run:

  • Pick one graph as the master.
  • Make sure the master has a clock. This is normally done when going active, but you can force it to happen earlier by calling SetDefaultSyncSource on the graph.
  • Query the graphs for IMediaFilter, get the clock from the master graph using GetSyncSource and pass it to the other graphs using SetSyncSource.
  • Pause all the graphs.
  • Wait until GetState returns S_OK (the pause is complete).
  • Get the time from the graph and add 10ms or so.
  • Call IMediaFilter::Run on all graphs, passing this time (now + 10ms) as the parameter.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...