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

前端 未结 1 851
臣服心动
臣服心动 2020-12-14 13:52

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 pl

相关标签:
1条回答
  • 2020-12-14 14:35

    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.
    0 讨论(0)
提交回复
热议问题