Break down pipelines using udpsrc/udpsink

pfarmer flacone at gmx.de
Tue Mar 5 13:38:24 PST 2013


On 03/05/2013 04:45 PM, Gary Thomas [via GStreamer-devel] wrote:
> On 2013-03-04 16:29, pfarmer wrote:
>
> > On 03/04/2013 10:25 PM, Gary Thomas [via GStreamer-devel] wrote:
> >> On 2013-03-04 13:15, pfarmer wrote:
> >>
> >> > Gary Thomas wrote
> >> >> I'm trying to split up a pipeline using udpsrc/udpsink elements.
> >> >> All of the "network" traffic will be local.  This is in 
> anticipation
> >> >> of having some variable number of sinks for a single data source
> >> >> (I have a camera that I want to share amongst a number of 
> applications)
> >> >>
> >> >> I have this working pipeline:
> >> >>     gst-launch -e -v v4l2src device=/dev/video0 queue-size=16 \
> >> >>       !
> >> >> 
> video/x-raw-yuv,format='(fourcc)UYVY',width=1280,height=720,framerate=30/1
> >> >> \
> >> >>       ! tee name=v-t \
> >> >>         v-t. ! queue ! videoscale ! 
> "video/x-raw-yuv,width=240,height=120"
> >> >> ! ffmpegcolorspace ! ximagesink force-aspect-ratio=true
> >> >> This pipeline just takes the output of the camera and displays 
> it in
> >> >> a window on my desktop.
> >> >>
> >> >> I've tried splitting it up like this:
> >> >>     # Start the source pipeline
> >> >>     gst-launch -e -v v4l2src device=/dev/video0 queue-size=16 \
> >> >>        !
> >> >> 
> video/x-raw-yuv,format='(fourcc)UYVY',width=1280,height=720,framerate=30/1
> >> >> \
> >> >>        ! tee name=v-src \
> >> >>          v-src. ! queue ! rtpvrawpay pt=96 ! udpsink port=61000
> >> >>
> >> >>     # Display the image
> >> >>     gst-launch -e -v udpsrc port=61000  \
> >> >>       !
> >> >>
> >> 
> "application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)RAW,sampling=(string)YCbCr-4:2:2,depth=(string)8,width=(string)1280,height=(string)720,colorimetry=(string)SMPTE240M,payload=(int)96"
> >> >> \
> >> >>       ! rtpvrawdepay \
> >> >>       !
> >> >> 
> video/x-raw-yuv,format='(fourcc)UYVY',width=1280,height=720,framerate=30/1
> >> >> \
> >> >>       ! tee name=v-t \
> >> >>         v-t. ! queue ! videoscale ! 
> "video/x-raw-yuv,width=240,height=120"
> >> >> ! ffmpegcolorspace ! ximagesink force-aspect-ratio=true
> >> >>
> >> >> I can see that the packets are being sent between the two 
> pipelines,
> >> >> but it looks like they are being quietly dropped (no messages). 
>  It's
> >> >> not totally clear that they are arriving to the second pipeline 
> at all.
> >> >> I've also tried this where the source pipeline is on one machine 
> and
> >> >> the receiving pipeline is on another, still no luck.
> >> >>
> >> >> I know that the CAPS match because I copied them from the output of
> >> >> a previous run.
> >> >>
> >> >> Any hints what I might be doing wrong & how to make this work?
> >> >
> >> > Try to make the imagesink not syncing to the clock: sync=false
> >> > In my case the ximagesink also does not work, I have to use the 
> xvimagesink.
> >> > For example:
> >> > Sender:
> >> >   gst-launch -v v4l2src ! tee ! queue ! ffmpegcolorspace !
> >> > video/x-raw-yuv,format='(fourcc)UYVY',width=1280,height=720, 
> framerate=30/1
> >> > ! rtpvrawpay ! udpsink port=61000  tee0. ! queue ! xvimagesink 
> sync=false
> >> > Receiver:
> >> >   gst-launch udpsrc port=61000 caps="application/x-rtp,
> >> > encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, 
> width=(string)1280,
> >> > height=(string)720, colorimetry=(string)BT709-2, depth=(string)8" !
> >> > rtpvrawdepay ! xvimagesink
> >>
> >> That didn't make any difference, sorry.
> >>
> >> I also tried adding the extra branch to do a local display and ran 
> this
> >> between machines - the source machine displays fine, the 
> destination shows nothing.
> >>
> >> Do the above quoted pipelines imply that they actually run for you? 
>  Are you
> >> using gstreamer-0.10 or 1.0?  (I'm stuck on 0.10 for the time being)
> >>
> >> >
> >> >
> >> > Gary Thomas wrote
> >> >> Is this a reasonable approach to sharing this data?  Eventually
> >> >> I need to grab & display it on the screen while at the same time
> >> >> sending it out over a [physical] network.
> >> >
> >> > On the same machine shared memory might be better suited. I.e. with
> >> > shmsink/shmsrc (at least on a Unix machine).
> >> >
> >>
> >> Thanks for the pointer, I'll check it out.
> >>
> >> --
> >> ------------------------------------------------------------
> >> Gary Thomas                 |  Consulting for the
> >> MLB Associates              |    Embedded world
> >> ------------------------------------------------------------
> >> _______________________________________________
> >> gstreamer-devel mailing list
> >> [hidden email] </user/SendEmail.jtp?type=node&node=4658879&i=0>
> >> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> >>
> >>
> >> 
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >> If you reply to this email, your message will be added to the 
> discussion below:
> >> 
> http://gstreamer-devel.966125.n4.nabble.com/Break-down-pipelines-using-udpsrc-udpsink-tp4658873p4658879.html
> >> To start a new topic under GStreamer-devel, email [hidden email] 
> </user/SendEmail.jtp?type=node&node=4658880&i=0>
> >> To unsubscribe from GStreamer-devel, click here.
> >> NAML
> >> 
> <http://gstreamer-devel.966125.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> 
>
> >>
> > I used gstreamer 0.10.
> > "I also tried adding the extra branch" what do you mean by that? It 
> should work more easy on the same machine. Also check your firewall.
> > Does a minimalistic (without tee's and without a real src) example 
> work?, like:
> > Sender:
> >   gst-launch videotestsrc horizontal-speed=5 ! video/x-raw-yuv ! 
> rtpvrawpay ! udpsink port=5001
> > Receiver:
> >   gst-launch udpsrc port=5001 caps="application/x-rtp, 
> sampling=(string)YCbCr-4:2:2, width=(string)320, height=(string)240" ! 
> rtpvrawdepay ! xvimagesink
> >
>
> Thanks for the pointers.  I started with your examples and adjusted
> them to fit my needs.  Finally, I ended up rewriting my pipelines,
> adding bits piecemeal, until I got something that worked.  I'm
> still unsure why my originals did not work, but these pipelines
> function as expected:
>
> Sender (camera source):
>    gst-launch -e -v v4l2src device=/dev/video0 queue-size=16 \
>     ! 
> video/x-raw-yuv,format='(fourcc)UYVY',width=1280,height=720,framerate=30/1 
> \
>     ! tee name=v-src \
>       v-src. ! queue leaky=upstream ! rtpvrawpay pt=96 ! shmsink 
> socket-path=/tmp/shm-stream.sock \
>       v-src. ! queue leaky=upstream ! rtpvrawpay pt=96 ! shmsink 
> socket-path=/tmp/shm-preview.sock \
>       v-src. ! queue leaky=upstream ! rtpvrawpay pt=96 ! shmsink 
> socket-path=/tmp/shm-record.sock \
>
> One receiver (display on screen):
>    gst-launch -vv shmsrc socket-path=/tmp/shm-preview.sock \
>      ! "application/x-rtp, sampling=(string)YCbCr-4:2:2, 
> width=(string)1280, height=(string)720, payload=(int)96" \
>      ! rtpvrawdepay ! tee name=v-t \
>        v-t. ! queue ! videoscale ! 
> "video/x-raw-yuv,width=240,height=120" ! ffmpegcolorspace ! ximagesink 
> force-aspect-ratio=true
>
> Curiously, the sender pipeline will hang if the queues are not leaky.
> I also ended up using the shared memory connections as UDP even over
> the localhost (lo) connection was way too much overhead when I have
> full size video to handle.
>
> -- 
> ------------------------------------------------------------
> Gary Thomas                 |  Consulting for the
> MLB Associates              |    Embedded world
> ------------------------------------------------------------
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email] </user/SendEmail.jtp?type=node&node=4658897&i=0>
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
> ------------------------------------------------------------------------
> If you reply to this email, your message will be added to the 
> discussion below:
> http://gstreamer-devel.966125.n4.nabble.com/Break-down-pipelines-using-udpsrc-udpsink-tp4658873p4658897.html 
>
> To start a new topic under GStreamer-devel, email 
> ml-node+s966125n966125h77 at n4.nabble.com
> To unsubscribe from GStreamer-devel, click here 
> <http://gstreamer-devel.966125.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=966125&code=ZmxhY29uZUBnbXguZGV8OTY2MTI1fDY2NTk5NjY2OQ==>.
> NAML 
> <http://gstreamer-devel.966125.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> 
>
Do you have to use the RTP? It might be not necessary in your case since 
you can drop buffers as you like and it seems you'r not going for some 
sophisticated buffering or compression (and don't have to send it to 
another machine).
That your queue has to be leaky might be solved with the 
wait-for-connection=false property for the shmsink since the buffers 
will be dropped there in that case.

Here is a pipline which works on my machine:
Sender:
  gst-launch-1.0  v4l2src ! video/x-raw, width=1280, height=720, 
framerate=30/1 ! tee ! queue ! shmsink socket-path=/tmp/myshm1 
shm-size=10000000 wait-for-connection=false sync=false   tee0. ! queue ! 
shmsink socket-path=/tmp/myshm2 shm-size=10000000 
wait-for-connection=false sync=false
Receiver 1:
gst-launch-1.0 shmsrc socket-path=/tmp/myshm1 ! video/x-raw, 
format=I420, width=1280, height=720, framerate=30/1 ! xvimagesink
Receiver 2:
gst-launch-1.0 shmsrc socket-path=/tmp/myshm2 ! video/x-raw, 
format=I420, width=1280, height=720, framerate=30/1 ! xvimagesink

This should work also with gstreamer-0.10 and your supported camera format:
Sender:
  gst-launch-0.10  v4l2src ! video/x-raw-yuv, width=1280, height=720, 
framerate=30/1, format=\(fourcc\)UYVY ! tee ! queue ! shmsink 
socket-path=/tmp/myshm1 shm-size=10000000 wait-for-connection=false 
sync=false   tee0. ! queue ! shmsink socket-path=/tmp/myshm2 
shm-size=10000000 wait-for-connection=false sync=false
Receiver 1:
gst-launch-0.10 shmsrc socket-path=/tmp/myshm1 ! video/x-raw-yuv, 
format=\(fourcc\)UYVY, width=1280, height=720, framerate=30/1 ! xvimagesink
Receiver 2:
gst-launch-0.10 shmsrc socket-path=/tmp/myshm2 ! video/x-raw-yuv, 
format=\(fourcc\)UYVY, width=1280, height=720, framerate=30/1 ! xvimagesink






--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Break-down-pipelines-using-udpsrc-udpsink-tp4658873p4658902.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20130305/b49da752/attachment-0001.html>


More information about the gstreamer-devel mailing list