2009-08-19 21 views
6

Logré reproducir hasta 8 videos sincronizados con una sola ventana de video con varias transmisiones usando el directshowlib para C#. El problema es que la ventana de video se reproduce solo en una sola pantalla: cuando intento que se extienda por muchas pantallas, no funciona. La ventana de la aplicación se extiende correctamente, pero el video se reproduce solo en una pantalla. ¿Algunas ideas?¿Cómo reproducir múltiples videos sincronizados en múltiples monitores usando directshow?

Gracias mucho por adelantado.

Respuesta

11

Supongo que está utilizando el VMR con múltiples pines de entrada. El VMR se renderizará en una sola superficie, que debe estar en una sola pantalla. Debería poder renderizar sus flujos en múltiples VMR, con cada VMR colocado en una pantalla separada dentro de su ventana maximizada.

Parece que tiene todos los flujos en un solo gráfico. Puede separarlos en diferentes gráficos, con cada gráfico con una fuente y un renderizador. Iniciar los gráficos en sincronización significa usar IMediaFilter :: Run en lugar de IMediaControl :: Ejecutar:

  • Elija un gráfico como maestro.
  • Asegúrese de que el maestro tenga un reloj. Esto normalmente se hace cuando se activa, pero puede forzarlo a que ocurra antes llamando a SetDefaultSyncSource en el gráfico.
  • Consulta los gráficos de IMediaFilter, obtén el reloj del gráfico maestro con GetSyncSource y pásalo a los otros gráficos usando SetSyncSource.
  • Pausa todos los gráficos.
  • Espere hasta que GetState devuelva S_OK (la pausa está completa).
  • Obtenga la hora del gráfico y agregue 10 ms o menos.
  • Llamada IMediaFilter :: Ejecutar en todos los gráficos, pasando esta vez (ahora + 10ms) como el parámetro.
+0

Muchas gracias Geraint. Voy a intentar eso. –

Cuestiones relacionadas