Looping a video with gstreamer and gst-launch?
If using gst-launch then you may have to use while true; do [your command]; done
as Fredrik has stated. However if interested in C code, I have written a code which may help you. Looping of video every 2 seconds from the beginning of the file at the end of the stream of first run.
//(c) 2011 enthusiasticgeek // This code is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.#include <gst/gst.h>gboolean bus_callback(GstBus *bus, GstMessage *msg, gpointer data){ GstElement *play = GST_ELEMENT(data); switch (GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_EOS: /* restart playback if at end */ if (!gst_element_seek(play, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 2000000000, //2 seconds (in nanoseconds) GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { g_print("Seek failed!\n"); } break; default: break; } return TRUE;}gintmain (gint argc, gchar *argv[]){ GMainLoop *loop; GstElement *play; GstBus *bus; /* init GStreamer */ gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); /* make sure we have a URI */ if (argc != 2) { g_print ("Usage: %s <URI>\n", argv[0]); return -1; } /* set up */ play = gst_element_factory_make ("playbin", "play"); g_object_set (G_OBJECT (play), "uri", argv[1], NULL); bus = gst_pipeline_get_bus (GST_PIPELINE (play)); gst_bus_add_watch (bus, bus_callback, play); gst_object_unref (bus); gst_element_set_state (play, GST_STATE_PLAYING); /* now run */ g_main_loop_run (loop); /* also clean up */ gst_element_set_state (play, GST_STATE_NULL); gst_object_unref (GST_OBJECT (play)); return 0;}
Update:See the following linkhttp://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-dataaccess.html
[Section 19.1.2. Play a region of a media file]. This could be used in conjugation with my code.
This seems to be possible with multifilesrc
plugin,
gst-launch-1.0 multifilesrc location=alien-age.mpg loop=true ! decodebin ! autovideosink
Seems to be added back in June 2011.
According to folks on the #gstreamer
IRC channel, you can't do this with gstreamer itself, you'd need something outside the gstreamer pipeline to loop it.