2009-12-05 20 views
8

Quiero crear un widget Qt que pueda reproducir transmisiones RTP entrantes donde el video está codificado como H264 y no contiene audio.Reproducir transmisión de video RTP usando Qt?

Mi plan básico para la aplicación es el siguiente:

  • Crear un objeto MediaSource Phonon (tipo corriente).
  • conectarlo con una subclase QIODevice que proporciona los datos
  • Obtener los datos de vídeo utilizando:
    • La biblioteca JRTPLIB cliente
    • El GStreamergstrtpbin plugin. Este complemento se encarga de pagar los paquetes y decodificar el video. Tal vez esto mejore las posibilidades de que Phonon reconozca los datos.

Mi entorno:

  • Ubuntu 9.10
  • Qt 4.6

Mis preguntas:

  • Es mi enfoque una buena? Tal vez estoy pasando por alto una solución más obvia o simple?
  • Actualmente estoy teniendo este problema: cuando intento reproducir la secuencia de video, el estado del MediaObject cambia a ErrorState con errorType FatalError. ¿Alguien puede decirme lo que estoy haciendo mal?

Editar
Una solución que encontré está utilizando libvlc en combinación con Qt, lo que he aprendido acerca de esta thread. Aquí hay un code sample para el interesado. Todavía estoy buscando una solución basada en Phonon.
Idealmente, solo tendría que proporcionar un archivo SDP y el trabajo está hecho.

Respuesta

3

Pude hacerlo funcionar con la solución libVLC. No puedo garantizar que esta sea la mejor solución , ya que simplemente dejé de cuidar eso.

Aquí hay un link to the libVLC sample.

+0

Parece que ha eliminado este archivo. ¿Hay alguna posibilidad de publicar el código nuevamente o se ha perdido a tiempo? – Narcolei

+1

Gracias por avisarme. Se corrigieron las urls. – StackedCrooked

+0

@StackedCrooked de todos modos para obtener un flujo de Cam IP utilizando los archivos? –

2

La manera en que entiendo que Phonon funciona al menos en Windows es que QT proporciona un complemento de back-end de phonon para DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) y GStreamer en su caso. Luego obtendrías o escribirías tu propio filtro DirectShow que puede aceptar transmisiones RTP como fuente. DirectShow se encarga de la decodificación, y Phonon se ocupará de la representación.

lo tanto, si el servidor funciona, el código de la aplicación es tan simple como:

 Phonon::MediaObject *media = new Phonon::MediaObject(); 
     Phonon::VideoWidget *video = new Phonon::VideoWidget(); 
     Phonon::createPath(media, video); 
     media->setCurrentSource(source); 
     media->play(); 

Parece que el problema radica en el back-end GStreamer aceptar RTP como fuente. ¿Puedes reproducir esa fuente en un GStreamer independiente sin ningún problema?

+0

no he conseguido que todavía funciona. Reproducción de un archivo local funciona, pero cuando intento cargar un flujo RTP (a través de un objeto MediaSource (QIODevice) que lee los paquetes RTP) VideoPlayer permanece en LoadingState. Ahora estoy experimentando con otro enfoque: estoy usando el plugin de gstrtpbin de GStreamer para leer los datos RTP entrantes, decodificar el flujo de vídeo y de alguna manera conectarlo a un widget de Qt. – StackedCrooked

Cuestiones relacionadas