- На самом деле я скачал образец учебника для gstreamer по ссылке,
http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/
git://people.freedesktop.org/~slomo/gst-sdk-tutorials
Теперь я изменил следующий код в учебнике 3,
-(void) app_function { GstBus *bus; GSource *bus_source; GError *error = NULL; GST_DEBUG ("Creating pipeline"); pipeline = gst_pipeline_new ("e-pipeline"); /* Create our own GLib Main Context and make it the default one */ context = g_main_context_new (); g_main_context_push_thread_default(context); /* Build pipeline */ // pipeline = gst_parse_launch("videotestsrc ! warptv ! videoconvert ! autovideosink", &error); source = gst_element_factory_make("udpsrc", "source"); g_object_set( G_OBJECT ( source), "port", 8001, NULL ); GstCaps *caps; caps = gst_caps_new_simple ("application/x-rtp", "encoding-name", G_TYPE_STRING, "H264", "payload", G_TYPE_INT, 96, "clock-rate", G_TYPE_INT, 90000, NULL); g_object_set (source, "caps", caps, NULL); rtp264depay = gst_element_factory_make ("rtph264depay", "rtph264depay"); h264parse = gst_element_factory_make ("h264parse", "h264parse"); vtdec = gst_element_factory_make ("vtdec", "vtdec"); glimagesink = gst_element_factory_make ("glimagesink", "glimagesink"); gst_bin_add_many (GST_BIN(pipeline), source, rtp264depay, h264parse, vtdec, glimagesink, NULL); if (error) { gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message); g_clear_error (&error); [self setUIMessage:message]; g_free (message); return; } /* Set the pipeline to READY, so it can already accept a window handle */ gst_element_set_state(pipeline, GST_STATE_READY); video_sink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); if (!video_sink) { GST_ERROR ("Could not retrieve video sink"); return; } gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(video_sink), (guintptr) (id) ui_video_view); /* Instruct the bus to emit signals for each received message, and connect to the interesting signals */ 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::state-changed", (GCallback)state_changed_cb, (__bridge void *)self); gst_object_unref (bus); /* Create a GLib Main Loop and set it to run */ GST_DEBUG ("Entering main loop..."); main_loop = g_main_loop_new (context, FALSE); [self check_initialization_complete]; g_main_loop_run (main_loop); GST_DEBUG ("Exited main loop"); g_main_loop_unref (main_loop); main_loop = NULL; /* Free resources */ g_main_context_pop_thread_default(context); g_main_context_unref (context); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); return;
}
-Теперь я запускаю приложение на iPad, и приложение начинает играть.
- Теперь я вхожу в фоновый режим и возвращаюсь на передний план, потоковые обновления Gstreamer не видны в пользовательском интерфейсе, но при использовании сети xcode я мог видеть, что пакеты принимаются.... :(
Заранее спасибо....iOS GEEKS....