The following gst-launch commands are a working demonstration of how one
may pass video from a webcam through a shell pipe and then display it. And it does work, for about 20-50 seconds until fdsink gives a "Could not perform seek on resource" error for reason of "Illegal seek". $ gst-launch-1.0 -q v4l2src ! video/x-raw,width=1920,height=1080,framerate=30/1 ! avimux ! fdsink | gst-launch-1.0 -v fdsrc ! avidemux ! xvimagesink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = video/x-raw, format=(string)I420, framerate=(fraction)30/1, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock ERROR: from element /GstPipeline:pipeline0/GstFdSink:fdsink0: Could not perform seek on resource. Additional debug info: gstfdsink.c(574): gst_fd_sink_event (): /GstPipeline:pipeline0/GstFdSink:fdsink0: Error while seeking on file descriptor 1: Illegal seek Got EOS from element "pipeline0". Execution ended after 0:00:23.036333491 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ... I noticed one way to "fix" it was by setting the GST_DEBUG environment variable to its highest state (9) causing lots of output to the terminal and I guess slowing things down enough so the shell pipe going into fdsrc never empties. However, the side effect of this is that the video, while it doesn't stop playing, is extremely choppy with a poor frame rate. Another attempt I made was using the dd command inbetween the two GStreamer commands like this: | dd status=none iflag=fullblock bs=9999999 | to try and buffer standard input. However, it was to no avail because I still got an "Illegal seek" error after some time. Does anybody have any idea of what a solution to this could be or is this something that needs to be worked out in the GStreamer code? Thank you, Elliot _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Here is a simpler PoC that gives the same error after waiting for some
seconds if anybody has got some ideas: $ gst-launch-1.0 -q videotestsrc ! avimux ! fdsink | gst-launch-1.0 -q fdsrc ! avidemux ! autovideosink Same error shows up after letting the video play successfully for a bit: ERROR: from element /GstPipeline:pipeline0/GstFdSink:fdsink0: Could not perform seek on resource. Additional debug info: gstfdsink.c(592): gst_fd_sink_event (): /GstPipeline:pipeline0/GstFdSink:fdsink0: Error while seeking on file descriptor 1: Illegal seek ERROR: from element /GstPipeline:pipeline0/GstFdSink:fdsink0: Could not perform seek on resource. Additional debug info: gstfdsink.c(592): gst_fd_sink_event (): /GstPipeline:pipeline0/GstFdSink:fdsink0: Error while seeking on file descriptor 1: Illegal seek ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data stream error. Additional debug info: gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: streaming stopped, reason error (-5) My GStreamer is up-to-date, here are the version strings: gst-launch-1.0 version 1.18.2 GStreamer 1.16.2 Can anyone reproduce this behaviour? If so, please let me know so perhaps we can get to the bottom of this. Thanks, Elliot _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |