<div dir="ltr"><div><div>Hi!<br><br></div>I'm having problems to port a Python gstreamer 0.10 program to the 1.0 version. The program connects with a device (eye-tracking system) and tries to reproduce the video sent by the scene camera. The live video from the scene camera (full HD, 1920x1080, 25 fps), is encoded into the h.264 compression format with key-frames every 16 frames at ~5mbit and the audio is encoded into the mp3 compressions format. It is transmitted via UDP as mpeg-ts packets (188 bytes each).<br><br></div>The code for the 0.10 version, which works well is (I'm only posting the function where the gstreamer pipeline is created, please ask if more information is needed):<br><br><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt">PIPELINE_DEF = <span style="color:rgb(0,128,0);font-weight:bold">"udpsrc do-timestamp=true name=src closefd=false !" </span>\<br>               <span style="color:rgb(0,128,0);font-weight:bold">"mpegtsdemux !" </span>\<br>               <span style="color:rgb(0,128,0);font-weight:bold">"queue !" </span>\<br>               <span style="color:rgb(0,128,0);font-weight:bold">"ffdec_h264 max-threads=0 !" </span>\<br>               <span style="color:rgb(0,128,0);font-weight:bold">"ffmpegcolorspace !" </span>\<br>               <span style="color:rgb(0,128,0);font-weight:bold">"xvimagesink name=video"</span></pre><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt"><span style="color:rgb(128,128,128);font-style:italic"># Create gstreamer pipeline to stream video<br></span>pipeline = gst.parse_launch(PIPELINE_DEF)<br><br><span style="color:rgb(128,128,128);font-style:italic"># Source element: video socket. Sockfd file for UDP reception. socket.fileno() returns socket descriptor<br></span>src = pipeline.get_by_name(<span style="color:rgb(0,128,0);font-weight:bold">"src"</span>)<br>src.set_property(<span style="color:rgb(0,128,0);font-weight:bold">"sockfd"</span>, videoLive.fileno())<br><br>pipeline.set_state(gst.STATE_PLAYING)<br><br></pre><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt">For the 1.0 I'm building the pipeline using add and link instead of parse_launch. My code is:<br><br><span style="color:rgb(128,128,128);font-style:italic"># Setting gstreamer pipeline<br></span><span style="color:rgb(148,85,141)">self</span>.pipeline = Gst.Pipeline()<br><br><span style="color:rgb(148,85,141)">self</span>.udpsrc = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'udpsrc'</span>, <span style="color:rgb(0,128,0);font-weight:bold">'src'</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.udpsrc)<br><span style="color:rgb(148,85,141)">self</span>.udpsrc.set_property(<span style="color:rgb(0,128,0);font-weight:bold">'socket'</span>, Gio.Socket().new_from_fd(<span style="color:rgb(148,85,141)">self</span>.videosocket.fileno()))<br><br><span style="color:rgb(148,85,141)">self</span>.tsparse = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'tsparse'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.tsparse)<br><br><span style="color:rgb(148,85,141)">self</span>.demux = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'tsdemux'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.demux)<br><br><span style="color:rgb(148,85,141)">self</span>.queue = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'queue'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.queue)<br><br><span style="color:rgb(148,85,141)">self</span>.h264 = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'avdec_h264'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.h264)<br><br><span style="color:rgb(148,85,141)">self</span>.videoconvert = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'videoconvert'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.videoconvert)<br><br><span style="color:rgb(148,85,141)">self</span>.imagesink = Gst.ElementFactory.make(<span style="color:rgb(0,128,0);font-weight:bold">'xvimagesink'</span>, <span style="color:rgb(0,0,128)">None</span>)<br><span style="color:rgb(148,85,141)">self</span>.pipeline.add(<span style="color:rgb(148,85,141)">self</span>.imagesink)<br><br><span style="color:rgb(148,85,141)">self</span>.udpsrc.link(<span style="color:rgb(148,85,141)">self</span>.tsparse)<br><span style="color:rgb(148,85,141)">self</span>.tsparse.link(<span style="color:rgb(148,85,141)">self</span>.demux)<br><span style="color:rgb(148,85,141)">self</span>.demux.link(<span style="color:rgb(148,85,141)">self</span>.queue)<br><span style="color:rgb(148,85,141)">self</span>.queue.link(<span style="color:rgb(148,85,141)">self</span>.h264)<br><span style="color:rgb(148,85,141)">self</span>.h264.link(<span style="color:rgb(148,85,141)">self</span>.videoconvert)<br><span style="color:rgb(148,85,141)">self</span>.videoconvert.link(<span style="color:rgb(148,85,141)">self</span>.imagesink)<br><br><span style="color:rgb(148,85,141)">self</span>.bus = <span style="color:rgb(148,85,141)">self</span>.pipeline.get_bus()<br><span style="color:rgb(148,85,141)">self</span>.bus.add_signal_watch()<br><span style="color:rgb(148,85,141)">self</span>.bus.connect(<span style="color:rgb(0,128,0);font-weight:bold">'message::eos'</span>, <span style="color:rgb(148,85,141)">self</span>.on_eos)<br><span style="color:rgb(148,85,141)">self</span>.bus.connect(<span style="color:rgb(0,128,0);font-weight:bold">'message::error'</span>, <span style="color:rgb(148,85,141)">self</span>.on_error)<br><br><span style="background-color:rgb(228,228,255)">self</span>.pipeline.set_state(Gst.State.PLAYING)<br><br></pre><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt">Nothing is shown when I execute it. I've set the debug to threshold 4, and the output has some warnings before error is thrown:<br><br>0:00:01.937727762  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999<br>0:00:01.937776032  9549      0x3047ca0 INFO                 basesrc gstbasesrc.c:2772:gst_base_src_loop:<src> marking pending DISCONT<br>0:00:02.097347324  9549      0x3047ca0 INFO        mpegtspacketizer mpegtspacketizer.c:770:mpegts_try_discover_packet_size: have packetsize detected: 188 bytes<br>0:00:02.097410369  9549      0x3047ca0 INFO              mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:<mpegtsparse2-0> PAT<br>0:00:02.098061088  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad mpegtsparse2-0:sink<br>0:00:02.098093377  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event video/mpegts, systemstream=(boolean)true, packetsize=(int)188<br>0:00:02.098133309  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999<br>0:00:02.098167255  9549      0x3047ca0 INFO        mpegtspacketizer mpegtspacketizer.c:770:mpegts_try_discover_packet_size: have packetsize detected: 188 bytes<br>0:00:02.098192084  9549      0x3047ca0 INFO              mpegtsbase mpegtsbase.c:726:mpegts_base_apply_pat:<tsdemux0> PAT<br>0:00:02.098325493  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad tsdemux0:sink<br>0:00:02.098340146  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event audio/mpeg, mpegversion=(int)1<br>0:00:02.098364200  9549      0x3047ca0 WARN                 default descriptions.c:612:format_info_get_desc: Unexpected MPEG-1 layer in audio/mpeg, mpegversion=(int)1<br>0:00:02.098403181  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:897:gst_element_get_static_pad: found pad tsdemux0:sink<br>0:00:02.098413243  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:628:gst_event_new_caps: creating caps event video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal<br>0:00:02.098489834  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:646:gst_element_add_pad:<tsdemux0> adding pad 'audio_0041'<br>0:00:02.098501372  9549      0x3047ca0 INFO               GST_EVENT gstevent.c:709:gst_event_new_segment: creating segment event time segment start=0:00:00.000000000, stop=99:99:99.999999999, rate=1,000000, applied_rate=1,000000, flags=0x00, time=0:00:00.000000000, base=0:00:00.000000000, position 0:00:00.000000000, duration 99:99:99.999999999<br>0:00:02.110068408  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:646:gst_element_add_pad:<tsdemux0> adding pad 'video_0040'<br>0:00:02.110145009  9549      0x3047ca0 INFO                 basesrc gstbasesrc.c:2785:gst_base_src_loop:<src> pausing after gst_pad_push() = not-linked<br>0:00:02.110162087  9549      0x3047ca0 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<src> error: Internal data flow error.<br>0:00:02.110166484  9549      0x3047ca0 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<src> error: streaming task paused, reason not-linked (-1)<br>0:00:02.110180920  9549      0x3047ca0 INFO        GST_ERROR_SYSTEM gstelement.c:1835:gst_element_message_full:<src> posting message: Internal data flow error.<br>0:00:02.110201183  9549      0x3047ca0 INFO        GST_ERROR_SYSTEM gstelement.c:1858:gst_element_message_full:<src> posted error message: Internal data flow error.<br>0:00:02.110291520  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:766:gst_element_remove_pad:<tsdemux0> removing pad 'audio_0041'<br>0:00:02.110323251  9549      0x3047ca0 INFO        GST_ELEMENT_PADS gstelement.c:766:gst_element_remove_pad:<tsdemux0> removing pad 'video_0040'<br>0:00:02.110350647  9549      0x3047ca0 INFO                    task gsttask.c:300:gst_task_func:<src:src> Task going to paused<br>('on_error():', (GError('Internal data flow error.',), 'gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:src:\nstreaming task paused, reason not-linked (-1)'))<br><br></pre><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt">I guess the warning "Unexpected MPEG-1 layer in audio/mpeg, mpegversion=(int)1" has to do with the Internal data flow error, but I don't know how to solve it.<br><br></pre><pre style="background-color:rgb(255,255,255);color:rgb(0,0,0);font-family:"DejaVu Sans Mono";font-size:9pt">Any help would be appreciate. Thanks in advance.<br></pre></div>