gapless playback is not playing full video

Shishir Pokharel Shishir.Pokharel at on24.com
Thu Aug 18 06:45:38 UTC 2016


You might be getting EOS from audio stream and not video stream. Try probing audio pad and intercept EOS events and drop it until you get EOS for video stream.

From: gstreamer-devel [mailto:gstreamer-devel-bounces at lists.freedesktop.org] On Behalf Of Adeel Arshad
Sent: Wednesday, August 17, 2016 11:34 PM
To: Discussion of the development of and with GStreamer <gstreamer-devel at lists.freedesktop.org>
Subject: Re: gapless playback is not playing full video

Hi all

I checked with only playbin element and still file is not playing till the end in gapless playback. Following is my code


GST_DEBUG("Creating pipeline");

    context = g_main_context_new();

    g_main_context_push_thread_default(context);



    pipeline = gst_parse_launch("playbin uri=file:///Users/administrator/Desktop/MAC_APPS/SUZUKI.mpg", &error);

    const char *char_uri = [uri UTF8String];

    g_object_set(pipeline, "uri", char_uri, NULL);

    GST_DEBUG("URI set to %s", char_uri);



   if(error){

    gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message);

    g_clear_error(&error);

    NSLog(@"pipeline error %s",message);

    [self setUIMessage:message];

    g_free(message);

    return;

   }



   GstElement *videosink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY);

   if(!videosink){

       GST_ERROR("Could not retrieve video sink");

       return;

   }



   gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videosink), (guintptr)(id)ui_video_view);



    ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);

    if (ret == GST_STATE_CHANGE_FAILURE) {

        NSLog(@"Unable to set the pipeline to the playing state.\n");

        gst_object_unref (pipeline);

        return;

    }



    bus = gst_element_get_bus(pipeline);

    bus_source = gst_bus_create_watch(bus);

    g_source_set_callback(bus_source, (GSourceFunc)gst_bus_async_signal_func, NULL, NULL);

    g_source_attach(bus_source, context);

    g_source_unref(bus_source);



    g_signal_connect (G_OBJECT(bus), "message::error", (GCallback)error_cb, (__bridge void *)self);

    g_signal_connect (G_OBJECT(bus), "message::eos", (GCallback)eos_cb, (__bridge void *)self);

    g_signal_connect (G_OBJECT(bus), "message::state-changed", (GCallback)state_changed_cb, (__bridge void *)self);

    g_signal_connect (G_OBJECT(bus), "message::duration", (GCallback)duration_cb, (__bridge void *)self);

    g_signal_connect (G_OBJECT(bus), "message::clock-lost", (GCallback)clock_lost_cb, (__bridge void *)self);

    g_signal_connect (pipeline, "about-to-finish", (GCallback)prepare_next_stream, (__bridge void *)self);

    timeout_source = g_timeout_source_new(1);

    g_source_set_callback(timeout_source, (GSourceFunc)refresh_ui, (__bridge void *)self,NULL);

    g_source_attach(timeout_source, context);

    g_source_unref(timeout_source);





    GST_DEBUG("Entering main loop...");

    main_loop = g_main_loop_new(context, FALSE);

    [self check_initializing_complete];

    g_main_loop_run(main_loop);

    GST_DEBUG("Exiting main loop...");

    g_main_loop_unref(main_loop);

    main_loop = NULL;

//My about to finish function

static void prepare_next_stream (GstElement *obj, GStreamerBackend *self){

     NSString* uri = [self playNext];

     if(![uri isEqualToString:@""])

     {

         const char *char_uri = [uri UTF8String];

         g_object_set (self->pipeline, "uri", char_uri, NULL);

     }

}
Regards

On Wed, Aug 17, 2016 at 2:40 PM, adeel <arshad.adeel.83 at gmail.com<mailto:arshad.adeel.83 at gmail.com>> wrote:
Dear All

This is my pipeline

video_bin = gst_parse_bin_from_description("tee name=t t. ! queue !
autovideosink t. ! decklinkvideosink mode=3", TRUE, NULL);

video_filter_bin = gst_parse_bin_from_description("capssetter
caps=video/x-raw,interlace-mode=interleaved,width=720,height=576", TRUE,
NULL);

audio_bin = gst_parse_bin_from_description("audioconvert !
decklinkaudiosink", TRUE, NULL);

When I play list of files I face the issue that my files are not playing
till the last frame. Only the last file playing till the end

What I am lacking in the code

Regards
Adeel Arshad



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gapless-playback-is-not-playing-full-video-tp4679124.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel at lists.freedesktop.org<mailto:gstreamer-devel at lists.freedesktop.org>
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160818/17160679/attachment-0001.html>


More information about the gstreamer-devel mailing list