cut patial video segment from file: GstSegment or splitmuxsink

kilamski malik.cisse at gmx.net
Thu Jul 11 16:06:22 UTC 2019


Sorry. There is a mistake in previous message. setting is 5 to 10 seconds:

Thanks Vinod Kesti for the pointer.
However I tried your method without much success.
Here is the code: What might be wrong?


void* launch_gst_cut_section_pipe(void)
{
    CustomData data;
    GstBus *bus;
    GstMessage *msg;
    GstStateChangeReturn ret;
    gchar *descr;
    GError *error = NULL;

    dout("Started cutting section!\n");

    /* Initialize GStreamer */
    gst_init (NULL,NULL);

    data.terminate = false;

    //create a new pipeline
    descr =
        g_strdup_printf ("filesrc
location=/tmp/rec/V_Cam02_2019.07.11_10.33.02.479.ts ! tsdemux ! mpegtsmux !
filesink location=test2.ts");

    data.pipeline = gst_parse_launch (descr, &error);
    if (error != NULL)
    {
      dout("could not construct gstreamer pipeline: %s\n", error->message);
      g_clear_error (&error);
      return 0;
    }

    gst_element_set_state(data.pipeline, GST_STATE_PAUSED);//not sure this
is needed???
*#if 1
        //GST_SEEK_TYPE_SET, 20 * GST_SECOND));
        //GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE));
        if (!gst_element_seek (data.pipeline, 1.0, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH,
                               GST_SEEK_TYPE_SET, 5 * GST_SECOND,
                               GST_SEEK_TYPE_SET, 10 * GST_SECOND));
        {
          dout("### Seek failed! ###\n");
        }
#endif*

    /* Start playing */
    ret = gst_element_set_state (data.pipeline, GST_STATE_PLAYING);
    if (ret == GST_STATE_CHANGE_FAILURE) {
        dout("Unable to set the gstreamer pipeline to the playing
state.\n");
        gst_object_unref (data.pipeline);
        return 0;
    }

    /* Listen to the bus */
    bus = gst_element_get_bus (data.pipeline);
    do {
        msg = gst_bus_timed_pop_filtered (bus, 200 * GST_MSECOND,
GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

        /* Parse message */
        if (msg != NULL)
        {
            handle_message (&data, msg);
        }
        else
        {
           //nothing to do yet!
        }
    } while (!data.terminate);

    dout("Cutting section finished!\n");
    /* Free resources */
    gst_object_unref (bus);
    gst_element_set_state (data.pipeline, GST_STATE_NULL);
    gst_object_unref (data.pipeline);
    return 0;
}


I get this warning when setting: *export GST_DEBUG="*:3"*

2019-07-11 15:56:52 | Started cutting section!
0:00:00.063433232  3296 0xaaaab8e22c60 WARN                 basesrc
gstbasesrc.c:3583:gst_base_src_start_complete:<filesrc0> pad not activated
yet
*2019-07-11 15:56:52 | ### Seek failed! ###*
0:00:00.066805541  3296 0xaaaab8e048a0 FIXME               basesink
gstbasesink.c:3145:gst_base_sink_default_event:<filesink0> stream-start
event without group-id. Consider implementing group-id handling in the
upstream elements
0:00:00.407322486  3296 0xaaaab8e048a0 WARN                 basesrc
gstbasesrc.c:2445:gst_base_src_update_length:<filesrc0> processing at or
past EOS
2019-07-11 15:56:52 | Cutting section finished!





--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/


More information about the gstreamer-devel mailing list