#include #include #define PIPELINE_STR "videotestsrc num-buffers=100 ! x264enc ! queue ! mpegtsmux name=mux ! fakesink" static void _on_bus_message (GstBus * bus, GstMessage * message, GMainLoop * mainloop) { switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_ERROR: case GST_MESSAGE_EOS: g_main_loop_quit (mainloop); break; default: break; } } static void advertise_service (GstElement * mux) { GstMpegtsSDTService *service; GstMpegtsSDT *sdt; GstMpegtsDescriptor *desc; GstMpegtsSection *section; sdt = gst_mpegts_sdt_new (); sdt->actual_ts = TRUE; sdt->transport_stream_id = 42; service = gst_mpegts_sdt_service_new (); service->service_id = 42; service->running_status = GST_MPEGTS_RUNNING_STATUS_RUNNING + service->service_id; service->EIT_schedule_flag = FALSE; service->EIT_present_following_flag = FALSE; service->free_CA_mode = FALSE; desc = gst_mpegts_descriptor_from_dvb_service (GST_DVB_SERVICE_DIGITAL_TELEVISION, "some-service", NULL); g_ptr_array_add (service->descriptors, desc); g_ptr_array_add (sdt->services, service); section = gst_mpegts_section_from_sdt (sdt); gst_mpegts_section_send_event (section, mux); gst_mpegts_section_unref (section); } int main (int argc, char **argv) { GstElement *pipeline = NULL; GError *error = NULL; GstBus *bus; GMainLoop *mainloop; GstElement *mux; gst_init (&argc, &argv); pipeline = gst_parse_launch (PIPELINE_STR, &error); if (error) { g_print ("pipeline could not be constructed: %s\n", error->message); g_clear_error (&error); return 1; } mainloop = g_main_loop_new (NULL, FALSE); mux = gst_bin_get_by_name (GST_BIN (pipeline), "mux"); advertise_service (mux); gst_object_unref (mux); /* Put a bus handler */ bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); gst_bus_add_signal_watch (bus); g_signal_connect (bus, "message", (GCallback) _on_bus_message, mainloop); /* Start pipeline */ gst_element_set_state (pipeline, GST_STATE_PLAYING); g_main_loop_run (mainloop); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); gst_object_unref (bus); return 0; }