2013-06-26 12 views
12

Sono novizio con gstreamer e sto cercando di utilizzarlo. Il mio primo obiettivo è creare un semplice flusso rtp di video h264 tra due dispositivi. Sto usando questi due condotte:Streaming video H.264 su rtp utilizzando gstreamer

mittente: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000

Ricevitore: gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

Ma con il primo (il mittente) ho ottenuto il seguente errore:

Setting pipeline to PAUSED ... 
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n 
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed 
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2812): gst_base_src_loop(): /GstPipeline:pipeline0/GstFileSrc:filesrc0: 
streaming task paused, reason not-negotiated (-4) 
ERROR: pipeline doesn't want to preroll. 
Setting pipeline to NULL ... 
Freeing pipeline ... 

ho provato molte altre configurazioni ma non sono riuscito a trovare la pipeline giusta.

alcune altre informazioni: versione Gstreamer: 1.0.7 OS: Windows 7

Qualche idea/suggerimento? Thx,

risposta

8

filesrc leggerà i dati dal file specificato come byte non elaborati; non puoi semplicemente codificare questi byte grezzi con x264enc, avrai bisogno di dati video per far funzionare tutto questo. provare ad aggiungere un demuxer /decodificatore prima di ri-codifica del flusso), ad esempio qualcosa di simile:

mittente:

gst-launch-1.0 -v \ 
    filesrc location=/tmp/sample_h264.mov 
    ! qtdemux \ 
    ! h264parse \ 
    ! ffdec_h264 \ 
    ! ffmpegcolorspace \ 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 

Si dovrebbe fare un rapido controllo se questo funziona utilizzando un video di prova soure:

gst-launch-1.0 -v \ 
    videotestsrc 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 
+0

Grazie per i dati suggerimento raw/video, ma io pensa che questo risolva solo una parte del problema. Ho provato la classica pipeline con videotestsrc ma nulla sta andando dall'altra parte. Anche con la seguente pipeline non posso ricevere nulla dall'altra parte: 'gst-launch-1.0 -v videotestsrc! host udpsink = porta 192.128.52.128 = 9001' Ho la sensazione che l'udpsink non stia inviando nulla! PS: non è un problema di firewall, li disattivo tutti – abir

+0

Provando con: 'ffmpeg -i C: \ tmp \ sample_h264.mov -f mpegts udp: //192.168.52.128: 9001' ... e lo stream viene ricevuto dall'altra parte. Ma voglio farlo con gstreamer – abir

+0

'videotestsrc! udpsink' è * non * un flusso RTP. devi aggiungere un payloader –

Problemi correlati