Hi Everyone I have created an app using objective c and gstreamer. 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 I am using playbin and about to finish to perform gapless playback. Can you guide me where to look at to resolve the problem. Thnaking you in anticipation Following is my code static void prepare_next_stream (GstElement *obj, GStreamerBackend *self){ NSString* uri = [self playNext]; if(![uri isEqualToString:@"loop"] && ![uri isEqualToString:@"playonce"] && ![uri isEqualToString:@""]) { const char *char_uri = [uri UTF8String]; g_object_set (self->pipeline, "uri", char_uri, NULL); } } //Main Function GstBus *bus; GSource *timeout_source; GSource *bus_source; GError *error = NULL; //GstElement *audio_sink; //GstElement *decklink_video_sink; //GstElement *deinterlace, *interlace; //GstElement *tee, *queue, *video_sink, *queue1; GstElement *video_bin, *audio_bin; GstElement *video_filter_bin; GST_DEBUG("Creating pipeline"); context = g_main_context_new(); g_main_context_push_thread_default(context); 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", TRUE, NULL); audio_bin = gst_parse_bin_from_description("audioconvert ! decklinkaudiosink", TRUE, NULL); pipeline = gst_parse_launch("playbin", &error); const char *char_uri = [uri UTF8String]; g_object_set(pipeline, "uri", char_uri, NULL); GST_DEBUG("URI set to %s", char_uri); g_object_set(pipeline, "video-sink", video_bin, NULL); g_object_set(pipeline, "video-filter", video_filter_bin, NULL); g_object_set(pipeline, "audio-sink", audio_bin, NULL); 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; g_main_context_pop_thread_default(context); g_main_context_unref(context); gst_object_unref (bus); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); pipeline = NULL; timeout_source = NULL; bus = NULL; bus_source = NULL; return; Regards Adeel Arshad _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On Wed, 1 Feb 2017 00:03:13 +0500
Adeel Arshad <[hidden email]> wrote: > Hi Everyone > > I have created an app using objective c and gstreamer. > > 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 > > I am using playbin and about to finish to perform gapless playback. > Using about-to-finish is the right thing to do, however sometimes I noticed that the gapless behavior is dependent on the particular codec used for the video, some codecs allow a finer granularity in seeking than others, what you are seeing might be related to that. Ciao, Antonio -- Antonio Ospite https://ao2.it https://twitter.com/ao2it A: Because it messes up the order in which people normally read text. See http://en.wikipedia.org/wiki/Posting_style Q: Why is top-posting such a bad thing? _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hi Hope you people are doing good. How can I use gstreamer debugging in my code. As my video sometimes play perfectly some time freezes in the same pipeline and I am not using decklink element in pipeline in my code. I want to check which element is creating issue. File Type: Mpeg2 Regards Adeel Arshad On Sat, Feb 4, 2017 at 5:35 PM, Antonio Ospite <[hidden email]> wrote: On Wed, 1 Feb 2017 00:03:13 +0500 _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
In reply to this post by adeel
Adeel Arshad wrote:
I tested playbin looping playback using the about-to-finish signal and found MPEG2 and Matroska files do not restart correctly. The Matroska file restarts at the beginning, freezes at 12 frames then continues from 10 seconds. The MPEG2 file restarts at 21 frames. Both Prores422 and MJPEG files play correctly. Could this be due to the latter (working) file types being I-Frame only codecs?Hope you people are doing good. How can I use gstreamer debugging in my code. As my video sometimes play perfectly some time freezes in the same pipeline and I am not using decklink element in pipeline in my code. I want to check which element is creating issue. File Type: Mpeg2 Regards Adeel Arshad Regards, Dave. _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |