2009-08-19 21 views
6

Sono riuscito a riprodurre fino a 8 video sincronizzati utilizzando una singola finestra video con più flussi utilizzando il directshowlib per C#. Il problema è che la finestra del video viene riprodotta solo su una singola schermata: quando provo a farla apparire su più schermi, non funziona. La finestra dell'app si estende correttamente, ma il video viene riprodotto solo su una schermata. Qualche idea?Come riprodurre più video sincronizzati su più monitor usando directshow?

Grazie mille in anticipo.

risposta

11

Suppongo che tu stia utilizzando il VMR con più pin di input. Il VMR renderà su una singola superficie, che deve essere su un singolo display. Dovresti essere in grado di eseguire il rendering dei tuoi stream su più VMR, con ogni VMR posizionato su un display separato all'interno della tua finestra ingrandita.

Sembra che tu abbia tutti i flussi in un singolo grafico. Puoi separarli in grafici diversi, con ciascun grafico con una sorgente e un riproduttore. Avviare i grafici in sincronizzazione significa utilizzare IMediaFilter :: Esegui invece di IMediaControl :: Esegui:

  • Selezionare un grafico come master.
  • Assicurarsi che il master abbia un orologio. Normalmente questo viene fatto quando si attiva, ma è possibile forzarlo ad accadere prima chiamando SetDefaultSyncSource sul grafico.
  • Interrogare i grafici per IMediaFilter, ottenere l'orologio dal grafico master utilizzando GetSyncSource e passarlo agli altri grafici utilizzando SetSyncSource.
  • Mettere in pausa tutti i grafici.
  • Attendere fino a quando GetState restituisce S_OK (la pausa è completa).
  • Prendi il tempo dal grafico e aggiungi 10ms circa.
  • Chiama IMediaFilter :: Esegui su tutti i grafici, passando questa volta (ora + 10 ms) come parametro.
+0

Grazie mille Geraint. Ci proverò. –

Problemi correlati