static void gst_rtsp_server_get_property (GObject * object, guint propid, GValue * value, GParamSpec * pspec) { GstRTSPServer *server = GST_RTSP_SERVER (object); switch (propid) { case PROP_ADDRESS: g_value_take_string (value, gst_rtsp_server_get_address (server)); break; case PROP_SERVICE: g_value_take_string (value, gst_rtsp_server_get_service (server)); break; case PROP_BACKLOG: g_value_set_int (value, gst_rtsp_server_get_backlog (server)); break; case PROP_SESSION_POOL: g_value_take_object (value, gst_rtsp_server_get_session_pool (server)); break; case PROP_MEDIA_MAPPING: g_value_take_object (value, gst_rtsp_server_get_media_mapping (server)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec); } }
int main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactoryURI *factory; gst_init (&argc, &argv); if (argc < 2) { g_message ("usage: %s <uri>", argv[0]); return -1; } loop = g_main_loop_new (NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new (); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping (server); /* make a URI media factory for a test stream. */ factory = gst_rtsp_media_factory_uri_new (); /* when using GStreamer as a client, one can use the gst payloader, which is * more efficient when there is no payloader for the compressed format */ /* g_object_set (factory, "use-gstpay", TRUE, NULL); */ gst_rtsp_media_factory_uri_set_uri (factory, argv[1]); /* if you want multiple clients to see the same video, set the shared property * to TRUE */ /* gst_rtsp_media_factory_set_shared ( GST_RTSP_MEDIA_FACTORY (factory), TRUE); */ /* attach the test factory to the /test url */ gst_rtsp_media_mapping_add_factory (mapping, "/test", GST_RTSP_MEDIA_FACTORY (factory)); /* don't need the ref to the mapper anymore */ g_object_unref (mapping); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) goto failed; g_timeout_add_seconds (2, (GSourceFunc) timeout, server); /* start serving */ g_print ("stream ready at rtsp://127.0.0.1:8554/test\n"); g_main_loop_run (loop); return 0; /* ERRORS */ failed: { g_print ("failed to attach the server\n"); return -1; } }
int main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new (); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, "( " "videotestsrc ! video/x-raw-yuv,width=352,height=288,framerate=15/1 ! " "x264enc ! rtph264pay name=pay0 pt=96 " "audiotestsrc ! audio/x-raw-int,rate=8000 ! " "alawenc ! rtppcmapay name=pay1 pt=97 " ")"); /* attach the test factory to the /test url */ gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); /* don't need the ref to the mapper anymore */ g_object_unref (mapping); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) goto failed; g_timeout_add_seconds (2, (GSourceFunc) timeout, server); /* start serving */ g_main_loop_run (loop); return 0; /* ERRORS */ failed: { g_print ("failed to attach the server\n"); return -1; } }
int main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory; gchar *str; gst_init (&argc, &argv); if (argc < 2) { g_message ("usage: %s <filename.sdp>", argv[0]); return -1; } loop = g_main_loop_new (NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new (); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory = gst_rtsp_media_factory_new (); str = g_strdup_printf ("( filesrc location=%s ! sdpdemux name=dynpay0 )", argv[1]); gst_rtsp_media_factory_set_launch (factory, str); gst_rtsp_media_factory_set_shared (factory, TRUE); g_free (str); /* attach the test factory to the /test url */ gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); /* don't need the ref to the mapper anymore */ g_object_unref (mapping); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); g_timeout_add_seconds (2, (GSourceFunc) timeout, server); /* start serving */ g_main_loop_run (loop); return 0; }
int main(int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory; gchar * profile_file_name = DEFAULT_PROFILE_FILE; GstRTSPServerConfiguration * server_config; gst_init(&argc, &argv); loop = g_main_loop_new(NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new(); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping(server); /* make a media factory for a jpeg stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory = gst_rtsp_media_factory_new(); /* set webcam source and port to listen for factory */ gst_rtsp_factory_set_device_source(factory, "v4l2src", "/dev/video0", 3000); /* prepare server configuration for jpeg stream */ server_config = gst_rtsp_server_configuration_load(profile_file_name); /* map server configuration to media factory */ gst_rtsp_media_factory_set_server_configuration(factory, server_config); /* share the pipeline with multiple clients */ gst_rtsp_media_factory_set_shared(factory, TRUE); /* attach the test factory to the /jpg url */ gst_rtsp_media_mapping_add_factory(mapping, "/jpg", factory); /* don't need the ref to the mapper anymore */ g_object_unref(mapping); /* attach the server to the default maincontext */ gst_rtsp_server_attach(server, NULL); g_timeout_add_seconds(2, (GSourceFunc) timeout, server); /* start serving */ g_main_loop_run(loop); return 0; }
int main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); if (argc < 2) { g_print ("usage: %s <launch line> \n" "example: %s \"( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )\"\n", argv[0], argv[0]); return -1; } loop = g_main_loop_new (NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new (); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, argv[1]); /* attach the test factory to the /test url */ gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); /* don't need the ref to the mapper anymore */ g_object_unref (mapping); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); /* start serving */ g_main_loop_run (loop); return 0; }
static void add_rtsp_uri (SnraManager * manager, guint resource_id, const gchar * source_uri) { GstRTSPMediaMapping *mapping; GstRTSPMediaFactoryURI *factory; gchar *rtsp_uri = g_strdup_printf ("/resource/%u", resource_id); mapping = gst_rtsp_server_get_media_mapping (manager->rtsp); factory = gst_rtsp_media_factory_uri_new (); /* Set up the URI, and set as shared (all viewers see the same stream) */ gst_rtsp_media_factory_uri_set_uri (factory, source_uri); gst_rtsp_media_factory_set_shared (GST_RTSP_MEDIA_FACTORY (factory), TRUE); g_signal_connect (factory, "media-constructed", G_CALLBACK (new_stream_constructed_cb), manager); /* attach the test factory to the test url */ gst_rtsp_media_mapping_add_factory (mapping, rtsp_uri, GST_RTSP_MEDIA_FACTORY (factory)); g_object_unref (mapping); g_free (rtsp_uri); }
int main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); server = gst_rtsp_server_new (); mapping = gst_rtsp_server_get_media_mapping (server); factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, "( v4l2src is-live=1 device=/dev/video1 ! jpegenc ! rtpjpegpay name=pay0 pt=96 )"); gst_rtsp_media_factory_set_shared (factory, TRUE); gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); g_object_unref (mapping); gst_rtsp_server_attach (server, NULL); g_main_loop_run (loop); return 0; }
void gss_rtsp_stream_start (GssRtspStream * rtsp_stream) { GString *pipe_desc; int pipe_fds[2]; int ret; ret = pipe (pipe_fds); if (ret < 0) { return; } pipe_desc = g_string_new (""); g_string_append (pipe_desc, "( "); g_string_append_printf (pipe_desc, "fdsrc fd=%d name=src ! ", pipe_fds[0]); g_string_append (pipe_desc, "oggdemux name=demux ! "); g_string_append (pipe_desc, "queue ! rtptheorapay name=pay0 pt=96 "); g_string_append (pipe_desc, "demux. ! queue ! rtpvorbispay name=pay1 pt=97 "); g_string_append (pipe_desc, ")"); GST_DEBUG ("%s", pipe_desc->str); rtsp_stream->factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (rtsp_stream->factory, pipe_desc->str); g_string_free (pipe_desc, FALSE); rtsp_stream->mapping = gst_rtsp_server_get_media_mapping (rtsp_stream->server); gst_rtsp_media_mapping_add_factory (rtsp_stream->mapping, "/stream", rtsp_stream->factory); g_object_unref (rtsp_stream->mapping); g_signal_emit_by_name (rtsp_stream->stream->sink, "add", pipe_fds[1]); gst_rtsp_server_attach (rtsp_stream->server, NULL); }
int main(int argc, char **argv) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPCamMediaFactory *factory; GstRTSPUrl *local_url; GOptionContext *ctx; GOptionGroup *gst_group; gboolean res; GError *error = NULL; g_type_init (); g_thread_init (NULL); ctx = g_option_context_new ("rtsp://host:port/path"); g_option_context_add_main_entries (ctx, option_entries, NULL); gst_group = gst_init_get_option_group (); g_option_context_add_group (ctx, gst_group); res = g_option_context_parse (ctx, &argc, &argv, &error); g_option_context_free (ctx); gst_init (&argc, &argv); if (!res) { g_printerr ("command line error: %s\n", error->message); g_error_free (error); return 1; } if (gst_rtsp_url_parse (argc != 2 ? "rtsp://127.0.0.1:8554/test" : argv[1], &local_url) != GST_RTSP_OK) { g_printerr ("invalid rtsp url\n"); return 1; } loop = g_main_loop_new (NULL, FALSE); server = gst_rtsp_server_new (); factory = gst_rtsp_cam_media_factory_new (); g_object_set (factory, "video-device", video_device, "video", !no_video, "video-width", video_width, "video-height", video_height, "video-codec", video_codec, "video-framerate", fps_n, fps_d, "audio", !no_audio, "audio-device", audio_device, "audio-codec", audio_codec, NULL); gst_rtsp_media_factory_set_shared (GST_RTSP_MEDIA_FACTORY (factory), TRUE); mapping = gst_rtsp_server_get_media_mapping (server); gst_rtsp_media_mapping_add_factory (mapping, local_url->abspath, GST_RTSP_MEDIA_FACTORY (factory)); g_object_unref (mapping); gst_rtsp_url_free (local_url); gst_rtsp_server_attach (server, NULL); g_timeout_add_seconds (5, (GSourceFunc) timeout, server); /* start serving */ g_main_loop_run (loop); return 0; }
int main(int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; GstRTSPMediaMapping *mapping; GstRTSPMediaFactory *factory_h264, *factory_mpeg4; GstRTSPServerConfiguration * server_config = NULL; gchar * audio_profile_name = NULL; gst_init(&argc, &argv); loop = g_main_loop_new(NULL, FALSE); /* create a server instance */ server = gst_rtsp_server_new(); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping(server); /* make a media factory for a h264 video stream and audio (aac, g711 or g726) stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory_h264 = gst_rtsp_media_factory_new(); factory_h264->two_streams = TRUE; /* set webcam source and port to listen for factory */ gst_rtsp_factory_set_device_source(factory_h264, "v4l2src", "/dev/video0", 3000); /* Load server configuration for h264 stream */ server_config = gst_rtsp_server_configuration_load(DEFAULT_PROFILE_FILE_VIDEO_H264); /* check to see if we need audio stream for our server */ if (argc > 1 && server_config != NULL) { if (g_strrstr(argv[1], "aac")) { audio_profile_name = "audio AAC"; } else if (g_strrstr(argv[1], "g726")) { audio_profile_name = "audio G726"; } else if (g_strrstr(argv[1], "g711")) { audio_profile_name = "audio G711"; } /* set default audio format for our configuration */ if (audio_profile_name != NULL) { gst_rtsp_server_configuration_set_default_audio_pipeline(server_config, audio_profile_name); } } /* apply server config to the factory */ gst_rtsp_media_factory_set_server_configuration(factory_h264, server_config); /* share the pipeline with multiple clients */ gst_rtsp_media_factory_set_shared(factory_h264, TRUE); /* attach the test factory to the /h264 url */ gst_rtsp_media_mapping_add_factory(mapping, "/h264", factory_h264); /* make a media factory for a mpeg 4 video stream and audio (aac, g711 or g726) stream. The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements named pay%d. Each * element with pay%d names will be a stream */ factory_mpeg4 = gst_rtsp_media_factory_new(); factory_mpeg4->two_streams = TRUE; /* set webcam source and port to listen for factory */ /* gst_rtsp_factory_set_device_source (factory_jpg, "v4l2src", "/dev/video0", 3000); */ factory_mpeg4->v4l2src_pipeline = factory_h264->v4l2src_pipeline; factory_mpeg4->v4l2src_port = factory_h264->v4l2src_port + 1; factory_mpeg4->multiudpsink = factory_h264->multiudpsink; /* prepare server configuration for mpeg4 stream */ server_config = gst_rtsp_server_configuration_load(DEFAULT_PROFILE_FILE_VIDEO_MPEG4); /* set default audio profile fo mpeg4 stream */ if (audio_profile_name != NULL) { gst_rtsp_server_configuration_set_default_audio_pipeline(server_config, audio_profile_name); } /* now, map server configuration to the factory */ gst_rtsp_media_factory_set_server_configuration(factory_mpeg4, server_config); /* share the pipeline with multiple clients */ gst_rtsp_media_factory_set_shared(factory_mpeg4, TRUE); /* attach the test factory to the /mp4 url */ gst_rtsp_media_mapping_add_factory(mapping, "/mp4", factory_mpeg4); /* don't need the ref to the mapper anymore */ g_object_unref(mapping); /* attach the server to the default maincontext */ gst_rtsp_server_attach(server, NULL); g_timeout_add_seconds(2, (GSourceFunc) timeout, server); /* start serving */ g_main_loop_run(loop); return 0; }
/* ============================================================================ * @Function: rtspmodule_init * @Description: Initialize GST Application interface. * ============================================================================ */ int rtspmodule_init (struct rtspmodule_arguments *arg) { guint major, minor, micro, nano; GstBus *bus; /* Settings - Encoder and Streaming */ arguments.width = arg->width; arguments.height = arg->height; arguments.gfps = arg->gfps; arguments.gbitrate = arg->gbitrate; arguments.gmtu = arg->gmtu; arguments.vsrc = arg->vsrc; arguments.vencoder = g_strdup(arg->vencoder); arguments.rtpencoder = arg->rtpencoder; /* GSTAPP Setup */ gst_init(NULL, NULL); gst_version(&major, &minor, µ, &nano); g_print("..This program is linked against GStreamer %d.%d.%d\n", major, minor, micro); loop = g_main_loop_new(NULL, FALSE); datasize = arguments.height * arguments.width * 4; databuffer = gst_buffer_new_and_alloc (datasize); inputdatabuffer = malloc ((sizeof(char))*datasize); pipeline = construct_app_pipeline(); if ( !pipeline ) { g_printerr("Failed to construct pipeline\n"); return -1; } g_print("..GSTAPP Pipeline Setup... \n"); /* we add a message handler */ bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline)); gst_bus_add_watch(bus, bus_watch, loop); gst_object_unref(bus); /* create a server instance */ server = gst_rtsp_server_new (); /* get the mapping for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ mapping = gst_rtsp_server_get_media_mapping (server); /* make a media factory for a test stream. * The default media factory can use * gst-launch syntax to create pipelines. * any launch line works as long as it contains elements * named pay%d. Each element with pay%d names will be a stream */ //factory = gst_rtsp_media_factory_new (); factory = GST_RTSP_MEDIA_FACTORY(gst_rtsp_media_factory_custom_new()); // allow multiple clients to see the same video gst_rtsp_media_factory_set_shared (factory, TRUE); g_object_set(factory, "bin", pipeline, NULL); /* attach the test factory to the /test url */ gst_rtsp_media_mapping_add_factory (mapping, "/bbwatch", factory); /* don't need the ref to the mapping anymore */ g_object_unref (mapping); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); /* add a timeout for the session cleanup */ g_timeout_add_seconds (2, (GSourceFunc) cleanup_timeout, server); g_print("..GST Pipeline Initialized ...\n"); return 0; }