Domanda

Voglio creare un widget Qt che può giocare in entrata flussi RTP in cui il video è codificato come H264 e non contiene l'audio.

Il mio piano di base per l'attuazione è questa:

  • Crea un Phonon MediaSource oggetto (tipo Stream).
  • Collegare con un QIODevice sottoclasse che fornisce i dati
  • Ottenere i dati video utilizzando:
    • Il href="http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib" rel="nofollow noreferrer"> JRTPLIB libreria client
    • Il GStreamer gstrtpbin plugin. Questo plugin si occupa depayloading i pacchetti e decodifica del video. Forse questo migliora le possibilità che Phonon riconoscerà i dati.

Il mio ambiente:

  • Ubuntu 9.10
  • Qt 4.6

Le mie domande:

  • Il mio approccio una buona? Forse sto affaccia su una soluzione più ovvia o semplice?
  • Al momento sto sperimentando questo problema: quando si cerca di riprodurre il video streaming lo stato del mediaobject si rivolge a ErrorState con ERRORE.TIPO FatalError. Qualcuno può dirmi che cosa sto facendo male?

Modifica
Una soluzione che ho trovato sta usando libVLC in combinazione con Qt, che ho imparato a conoscere in questo filo . Ecco un esempio di codice per gli interessati. Sto ancora cercando una soluzione Phonon-based.
Idealmente avrei solo bisogno di fornire un file SDP e lavoro è fatto.

È stato utile?

Soluzione

Sono riuscito a farlo funzionare con la soluzione libVLC. Non posso seguro che questo è il migliore soluzione anche se, come ho semplicemente smesso di cercare dopo.

Ecco un link per il campione libVLC .

Altri suggerimenti

Il modo in cui ho capito Phonon lavora almeno in Windows è che QT offre un plugin fononi backend per DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) e GStreamer nel tuo caso. Poi si sarebbe o ottenere o scrivere il proprio filtro DirectShow che può accettare flussi RTP come fonte. DirectShow si occupa della decodifica e Phonon si prenderà cura del rendering.

Quindi, se il backend funziona, il codice dell'applicazione è semplice come:

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

Sembra che il problema si trova con il backend di GStreamer accettare RTP come fonte. Si può riprodurre quella sorgente in GStreamer standalone senza problemi?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top