Requesting a simple example using fdsrc and fdsink

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Requesting a simple example using fdsrc and fdsink

Piper984
Hello forum,

I have a few Gstreamer based coming up where I'd like to use stdin/stdout or named pipes to sink and source video.  I've not had much luck in getting a simple hello world type pipeline working. Hopefully someone can take a look at this with me and give me some pointers.

I'd like to see how I could take a very simple pipeline like this (which works find on Ubuntu 14.04)...

gst-launch-1.0 -e -v videotestsrc is-live=true horizontal-speed=1 ! autovideosink sync=false

... and split into two parts. Part one: pipe the output of videotestsrc to stdout, and then Part two: pipe stdin to the autovideosink element.

I tried this:

gst-launch-1.0 -e -v videotestsrc is-live=true horizontal-speed=1 ! fdsink | gst-launch-1.0 -e -v fdsrc fd=0 ! autovideosink

But when I try this I get the following error message:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'autovideosink0-actual-sink-glimage': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplay\)\ gldisplay0";
ERROR: from element /GstPipeline:pipeline0/GstFdSrc:fdsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2933): void gst_base_src_loop(GstPad *) (): /GstPipeline:pipeline0/GstFdSrc:fdsrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

I've tried searching for better syntax but so far no luck in getting anything to work.  If someone could take a look and point me in the right direction it would be super helpful.  I have a few apps I need to develop where using named pipes is going to be very handy so hopefully figuring out the proper syntax and usage of fdsrc and fdsink will get me to where I need to be.


Thanks and regards!
 
Reply | Threaded
Open this post in threaded view
|

Re: Requesting a simple example using fdsrc and fdsink

Piper984
Hi:
My first message had some [raw] tags (via the Nabble site ) around the bash commands I provided and those look to have been removed from the email digest.  So I'm reposting my request without those tags, as I think most GStreamers rely on the email digests.  Also fixed a typo. :)

---START REPOST---

Hello forum,

I have a few Gstreamer based projects coming up where I'd like to use stdin/stdout or named pipes to sink and source video.  I've not had much luck in getting a simple hello world type pipeline working. Hopefully someone can take a look at this with me and give me some pointers.

I'd like to see how I could take a very simple pipeline like this (which works find on Ubuntu 14.04)...

gst-launch-1.0 -e -v videotestsrc is-live=true horizontal-speed=1 ! autovideosink sync=false

... and split into two parts. Part one: pipe the output of videotestsrc to stdout, and then Part two: pipe stdin to the autovideosink element.

I tried this:

gst-launch-1.0 -e -v videotestsrc is-live=true horizontal-speed=1 ! fdsink | gst-launch-1.0 -e -v fdsrc fd=0 ! autovideosink

But when I try this I get the following error message:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'autovideosink0-actual-sink-glimage': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplay\)\ gldisplay0";
ERROR: from element /GstPipeline:pipeline0/GstFdSrc:fdsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2933): void gst_base_src_loop(GstPad *) (): /GstPipeline:pipeline0/GstFdSrc:fdsrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

I've tried searching for better syntax but so far no luck in getting anything to work.  If someone could take a look and point me in the right direction it would be super helpful.  I have a few apps I need to develop where using named pipes is going to be very handy so hopefully figuring out the proper syntax and usage of fdsrc and fdsink will get me to where I need to be.


Thanks and regards!
Reply | Threaded
Open this post in threaded view
|

Re: Requesting a simple example using fdsrc and fdsink

Tim Müller
On Tue, 2016-09-20 at 07:48 -0700, Piper984 wrote:

Hi,


> gst-launch-1.0 -e -v videotestsrc is-live=true horizontal-speed=1 !
> fdsink |
> gst-launch-1.0 -e -v fdsrc fd=0 ! autovideosink
>
> But when I try this I get the following error message: 
>
> streaming task paused, reason not-negotiated (-4)

The pipe won't maintain the one-buffer-one-frame packetisation.

You can either add a videoparse element after fdsrc and configure it as
needed (plus add a videoconvert in front of autovideosink, since
there's no negotiation across the pipe), or use gdppay ! fdsink / fdsrc
! gdpdepay.

There are other mechanisms as well like shared memory sinks/sources
fwiw.

Cheers
 -Tim

--
Tim Müller, Centricular Ltd - http://www.centricular.com

Join us at the GStreamer Conference!
10-11 October 2016 in Berlin,
Germany
http://gstreamer.freedesktop.org/conference/

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Requesting a simple example using fdsrc and fdsink

Piper984
Hi Tim,

Thanks a bunch for the reply.  What you explain makes sense but I'm still not getting the results I am looking for.  Based on your reply, I then adjusted my gst-launch example as follows...

gst-launch-1.0 -v -e videotestsrc ! gdppay ! fdsink | gst-launch-1.0 -e -v fdsrc fd=0 ! gdpdepay ! autovideosink

... thinking this should open up a window and display the test pattern.  However, I get the errors about not being able to preroll...

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'autovideosink0-actual-sink-glimage': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplay\)\ gldisplay0";
ERROR: from element /GstPipeline:pipeline0/GstGDPDepay:gdpdepay0: Could not decode stream.
Additional debug info:
gstgdpdepay.c(443): gst_gdp_depay_chain (): /GstPipeline:pipeline0/GstGDPDepay:gdpdepay0:
could not create event from GDP packet
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

... and I assume that this is because I just don't quite understand how the autovideosink element works with whatever it's sent.

Do you have a working bash/gst-launch command that shows the displaying of video from stdin or from a named pipe?  I think if I could just see a working example it would help me build my understanding.

Thanks!

Piper