Looping a video with gstreamer and gst-launch? Looping a video with gstreamer and gst-launch? linux linux

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.