Video Freezes
Adeel Arshad
arshad.adeel.83 at gmail.com
Thu Feb 16 06:39:48 UTC 2017
Hi All
My System is
OSX Sierra
Decklink 10.8.3
Gstreamer 1.10
File Type: Mpeg2
My pipeline is as follow
GstBus *bus;
GSource *timeout_source;
GSource *bus_source;
GError *error = NULL;
GST_DEBUG("Creating pipeline");
context = g_main_context_new();
g_main_context_push_thread_default(context);
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);
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;
I am playing files sequentially using about to finish but first file play
normally but next file freezes for some time and then play normally then
next 2 or 3 files play fine but then next file freezes for sometime. How
can I debug that issue
Regards
Adeel Arshad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20170216/8cc72e2d/attachment-0001.html>
More information about the gstreamer-devel
mailing list