<div dir="ltr"><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">Hi Everyone</span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px"><br></span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">I have created an app using objective c and gstreamer.</span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px"><br></span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">The issue I am facing is that when I play a single file it is playing as desired till the end but when I try to include the gapless functionality the same file did not play till the last frame</span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px"> </span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">I am using playbin and about to finish to perform gapless playback.</span><br></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px"><br></span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">Can you guide me where to look at to resolve the problem. Thnaking you in anticipation</span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px"><br></span></div><div><font color="#000000" face="verdana, geneva, helvetica, arial, sans-serif"><span style="font-size:13.44px">Following is my code</span></font></div><div><font color="#000000" face="verdana, geneva, helvetica, arial, sans-serif"><span style="font-size:13.44px"><br></span></font></div><div><font face="verdana, geneva, helvetica, arial, sans-serif" color="#0000ff"><span style="background-color:rgb(0,0,255)"><div style="font-size:13.44px">static void prepare_next_stream (GstElement *obj, GStreamerBackend *self){</div><div style="font-size:13.44px">     NSString* uri = [self playNext];</div><div style="font-size:13.44px">     if(![uri isEqualToString:@"loop"] && ![uri isEqualToString:@"playonce"] && ![uri isEqualToString:@""])</div><div style="font-size:13.44px">     {</div><div style="font-size:13.44px">         const char *char_uri = [uri UTF8String];</div><div style="font-size:13.44px">         g_object_set (self->pipeline, "uri", char_uri, NULL);</div><div style="font-size:13.44px">     }</div><div style="font-size:13.44px">}</div><div style="font-size:13.44px"><br></div><div style="font-size:13.44px">//Main Function</div><div><div><span style="font-size:13.44px">       GstBus *bus;</span></div><div><span style="font-size:13.44px">        GSource *timeout_source;</span></div><div><span style="font-size:13.44px">        GSource *bus_source;</span></div><div><span style="font-size:13.44px">        GError *error = NULL;</span></div><div><span style="font-size:13.44px">        //GstElement *audio_sink;</span></div><div><span style="font-size:13.44px">        //GstElement *decklink_video_sink;</span></div><div><span style="font-size:13.44px">        //GstElement *deinterlace, *interlace;</span></div><div><span style="font-size:13.44px">        //GstElement *tee, *queue, *video_sink, *queue1;</span></div><div><span style="font-size:13.44px">        GstElement *video_bin, *audio_bin;</span></div><div><span style="font-size:13.44px">        GstElement *video_filter_bin;</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        GST_DEBUG("Creating pipeline");</span></div><div><span style="font-size:13.44px">        context = g_main_context_new();</span></div><div><span style="font-size:13.44px">        g_main_context_push_thread_default(context);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        video_bin = gst_parse_bin_from_description("tee name=t t. ! queue ! autovideosink t. ! decklinkvideosink mode=3", TRUE, NULL);</span></div><div><span style="font-size:13.44px">        video_filter_bin = gst_parse_bin_from_description("capssetter caps=video/x-raw,interlace-mode=interleaved", TRUE, NULL);</span></div><div><span style="font-size:13.44px">        audio_bin = gst_parse_bin_from_description("audioconvert ! decklinkaudiosink", TRUE, NULL);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        pipeline = gst_parse_launch("playbin", &error);</span></div><div><span style="font-size:13.44px">        const char *char_uri = [uri UTF8String];</span></div><div><span style="font-size:13.44px">        g_object_set(pipeline, "uri", char_uri, NULL);</span></div><div><span style="font-size:13.44px">        GST_DEBUG("URI set to %s", char_uri);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        g_object_set(pipeline, "video-sink", video_bin, NULL);</span></div><div><span style="font-size:13.44px">        g_object_set(pipeline, "video-filter", video_filter_bin, NULL);</span></div><div><span style="font-size:13.44px">        g_object_set(pipeline, "audio-sink", audio_bin, NULL);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        if(error){</span></div><div><span style="font-size:13.44px">            gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message);</span></div><div><span style="font-size:13.44px">            g_clear_error(&error);</span></div><div><span style="font-size:13.44px">            NSLog(@"pipeline error %s",message);</span></div><div><span style="font-size:13.44px">            [self setUIMessage:message];</span></div><div><span style="font-size:13.44px">            g_free(message);</span></div><div><span style="font-size:13.44px">            return;</span></div><div><span style="font-size:13.44px">        }</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        GstElement *videosink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY);</span></div><div><span style="font-size:13.44px">        if(!videosink){</span></div><div><span style="font-size:13.44px">            GST_ERROR("Could not retrieve video sink");</span></div><div><span style="font-size:13.44px">            return;</span></div><div><span style="font-size:13.44px">        }</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videosink), (guintptr)(id)ui_video_view);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);</span></div><div><span style="font-size:13.44px">        if (ret == GST_STATE_CHANGE_FAILURE) {</span></div><div><span style="font-size:13.44px">            NSLog(@"Unable to set the pipeline to the playing state.\n");</span></div><div><span style="font-size:13.44px">            gst_object_unref (pipeline);</span></div><div><span style="font-size:13.44px">            return;</span></div><div><span style="font-size:13.44px">        }</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        bus = gst_element_get_bus(pipeline);</span></div><div><span style="font-size:13.44px">        bus_source = gst_bus_create_watch(bus);</span></div><div><span style="font-size:13.44px">        g_source_set_callback(bus_source, (GSourceFunc)gst_bus_async_signal_func, NULL, NULL);</span></div><div><span style="font-size:13.44px">        g_source_attach(bus_source, context);</span></div><div><span style="font-size:13.44px">        g_source_unref(bus_source);</span></div><div><span style="font-size:13.44px">        g_signal_connect (G_OBJECT(bus), "message::error", (GCallback)error_cb, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        g_signal_connect (G_OBJECT(bus), "message::eos", (GCallback)eos_cb, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        g_signal_connect (G_OBJECT(bus), "message::state-changed", (GCallback)state_changed_cb, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        g_signal_connect (G_OBJECT(bus), "message::duration", (GCallback)duration_cb, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        g_signal_connect (G_OBJECT(bus), "message::clock-lost", (GCallback)clock_lost_cb, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        g_signal_connect (pipeline, "about-to-finish", (GCallback)prepare_next_stream, (__bridge void *)self);</span></div><div><span style="font-size:13.44px">        timeout_source = g_timeout_source_new(1);</span></div><div><span style="font-size:13.44px">        g_source_set_callback(timeout_source, (GSourceFunc)refresh_ui, (__bridge void *)self,NULL);</span></div><div><span style="font-size:13.44px">        g_source_attach(timeout_source, context);</span></div><div><span style="font-size:13.44px">        g_source_unref(timeout_source);</span></div><div><span style="font-size:13.44px"><br></span></div><div><span style="font-size:13.44px">        GST_DEBUG("Entering main loop...");</span></div><div><span style="font-size:13.44px">        main_loop = g_main_loop_new(context, FALSE);</span></div><div><span style="font-size:13.44px">        [self check_initializing_complete];</span></div><div><span style="font-size:13.44px">        g_main_loop_run(main_loop);</span></div><div><span style="font-size:13.44px">        GST_DEBUG("Exiting main loop...");</span></div><div><span style="font-size:13.44px">        g_main_loop_unref(main_loop);</span></div><div><span style="font-size:13.44px">        main_loop = NULL;</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        g_main_context_pop_thread_default(context);</span></div><div><span style="font-size:13.44px">        g_main_context_unref(context);</span></div><div><span style="font-size:13.44px">        gst_object_unref (bus);</span></div><div><span style="font-size:13.44px">        gst_element_set_state (pipeline, GST_STATE_NULL);</span></div><div><span style="font-size:13.44px">        gst_object_unref (pipeline);</span></div><div><span style="font-size:13.44px">        </span></div><div><span style="font-size:13.44px">        pipeline = NULL;</span></div><div><span style="font-size:13.44px">        timeout_source = NULL;</span></div><div><span style="font-size:13.44px">        bus = NULL;</span></div><div><span style="font-size:13.44px">        bus_source = NULL;</span></div><div><span style="font-size:13.44px">        return;</span></div></div><div style="font-size:13.44px"><br></div></span></font></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">Regards</span></div><div style="font-size:12.8px"><span style="color:rgb(0,0,0);font-family:verdana,geneva,helvetica,arial,sans-serif;font-size:13.44px">Adeel Arshad</span></div></div>