From bc650c59ca6d2edbf555dc0cec11091f274b42f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 15 Sep 2007 19:14:11 +0000 Subject: [PATCH] Rework SDP API a little --- include/vlc_sout.h | 1 + modules/stream_out/rtp.c | 26 +++++++++++++--------- src/libvlc.sym | 2 +- src/stream_output/sdp.c | 48 +++++++++++++++++++++++++++++++++++++--- 4 files changed, 62 insertions(+), 15 deletions(-) diff --git a/include/vlc_sout.h b/include/vlc_sout.h index 78202901cb..a752be62fc 100644 --- a/include/vlc_sout.h +++ b/include/vlc_sout.h @@ -222,6 +222,7 @@ VLC_EXPORT(void, sout_MethodRelease, (announce_method_t *) ); /** SDP */ +VLC_EXPORT( char *, vlc_sdp_Start, ( vlc_object_t *obj, const char *cfgpref, const struct sockaddr *src, size_t srclen, const struct sockaddr *addr, size_t addrlen ) ); VLC_EXPORT( char *, sdp_Start, (const char *name, const char *description, const char *url, const char *email, const char *phone, const struct sockaddr *orig, size_t origlen, const struct sockaddr *addr, size_t addrlen) ); VLC_EXPORT( char *, sdp_AddMedia, (char **sdp, const char *type, const char *protocol, int dport, unsigned pt, vlc_bool_t bw_indep, unsigned bw, const char *rtpmap, const char *fmtp) ); VLC_EXPORT( char *, sdp_AddAttribute, (char **sdp, const char *name, const char *fmt, ...) ATTRIBUTE_FORMAT( 3, 4 ) ); diff --git a/modules/stream_out/rtp.c b/modules/stream_out/rtp.c index f0828600b8..90a893a6ce 100644 --- a/modules/stream_out/rtp.c +++ b/modules/stream_out/rtp.c @@ -69,10 +69,10 @@ #define NAME_LONGTEXT N_( \ "This is the name of the session that will be announced in the SDP " \ "(Session Descriptor)." ) -#define DESC_TEXT N_("Session description") +#define DESC_TEXT N_("Session descriptipn") #define DESC_LONGTEXT N_( \ - "This allows you to give a broader description of the stream, that will " \ - "be announced in the SDP (Session Descriptor)." ) + "This allows you to give a short description with details about the stream, " \ + "that will be announced in the SDP (Session Descriptor)." ) #define URL_TEXT N_("Session URL") #define URL_LONGTEXT N_( \ "This allows you to give an URL with more details about the stream " \ @@ -80,8 +80,13 @@ "be announced in the SDP (Session Descriptor)." ) #define EMAIL_TEXT N_("Session email") #define EMAIL_LONGTEXT N_( \ - "This allows you to give a contact mail address for the stream, that will " \ - "be announced in the SDP (Session Descriptor)." ) + "This allows you to give a contact mail address for the stream, that will " \ + "be announced in the SDP (Session Descriptor)." ) +#define PHONE_TEXT N_("Session phone number") +#define PHONE_LONGTEXT N_( \ + "This allows you to give a contact telephone number for the stream, that will " \ + "be announced in the SDP (Session Descriptor)." ) + #define PORT_TEXT N_("Port") #define PORT_LONGTEXT N_( \ "This allows you to specify the base port for the RTP streaming." ) @@ -141,6 +146,8 @@ vlc_module_begin(); URL_LONGTEXT, VLC_TRUE ); add_string( SOUT_CFG_PREFIX "email", "", NULL, EMAIL_TEXT, EMAIL_LONGTEXT, VLC_TRUE ); + add_string( SOUT_CFG_PREFIX "phone", "", NULL, PHONE_TEXT, + PHONE_LONGTEXT, VLC_TRUE ); add_integer( SOUT_CFG_PREFIX "port", 1234, NULL, PORT_TEXT, PORT_LONGTEXT, VLC_TRUE ); @@ -170,7 +177,7 @@ vlc_module_end(); *****************************************************************************/ static const char *ppsz_sout_options[] = { "dst", "name", "port", "port-audio", "port-video", "*sdp", "ttl", "mux", - "description", "url", "email", + "description", "url", "email", "phone", "dccp", "tcp", "udplite", "mp4a-latm", NULL }; @@ -686,14 +693,11 @@ char *SDPGenerate( const sout_stream_t *p_stream, const char *rtsp_url ) dstlen = sizeof( struct sockaddr_in ); } - psz_sdp = sdp_Start( p_sys->psz_session_name, - p_sys->psz_session_description, - p_sys->psz_session_url, p_sys->psz_session_email, - NULL, NULL, 0, (struct sockaddr *)&dst, dstlen ); + psz_sdp = vlc_sdp_Start( VLC_OBJECT( p_stream ), SOUT_CFG_PREFIX, + NULL, 0, (struct sockaddr *)&dst, dstlen ); if( psz_sdp == NULL ) return NULL; - /* TODO: a=source-filter */ if( rtsp_url != NULL ) diff --git a/src/libvlc.sym b/src/libvlc.sym index 9bb795067d..857865712d 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -257,7 +257,7 @@ playlist_ServicesDiscoveryRemove playlist_TreeMove resolve_xml_special_chars secstotimestr -sdp_Start +vlc_sdp_Start sdp_AddAttribute sdp_AddMedia sout_AccessOutDelete diff --git a/src/stream_output/sdp.c b/src/stream_output/sdp.c index bea5dd6332..02ba40ba18 100644 --- a/src/stream_output/sdp.c +++ b/src/stream_output/sdp.c @@ -87,9 +87,9 @@ static vlc_bool_t IsSDPString (const char *str) char *sdp_Start (const char *name, const char *description, const char *url, - const char *email, const char *phone, - const struct sockaddr *src, size_t srclen, - const struct sockaddr *addr, size_t addrlen) + const char *email, const char *phone, + const struct sockaddr *src, size_t srclen, + const struct sockaddr *addr, size_t addrlen) { uint64_t now = NTPtime64 (); char *sdp; @@ -244,3 +244,45 @@ char *sdp_AddMedia (char **sdp, return newsdp; } + + +char *vlc_sdp_Start (vlc_object_t *obj, const char *cfgpref, + const struct sockaddr *src, size_t srclen, + const struct sockaddr *addr, size_t addrlen) +{ + size_t cfglen = strlen (cfgpref); + if (cfglen > 100) + return NULL; + + char varname[cfglen + sizeof ("description")], *subvar = varname + cfglen; + strcpy (varname, cfgpref); + + session_descriptor_t *p_session = calloc (1, sizeof (*p_session)); + if (p_session == NULL) + return NULL; + + strcpy (subvar, "name"); + char *name = var_GetNonEmptyString (obj, varname); + strcpy (subvar, "description"); + char *description = var_GetNonEmptyString (obj, varname); + strcpy (subvar, "url"); + char *url = var_GetNonEmptyString (obj, varname); + strcpy (subvar, "email"); + char *email = var_GetNonEmptyString (obj, varname); + strcpy (subvar, "phone"); + char *phone = var_GetNonEmptyString (obj, varname); +#if 0 + strcpy (subvar, "group"); + char *group = var_GetNonEmptyString (obj, varname); +#endif + + char *sdp = sdp_Start (name, description, url, email, phone, + src, srclen, addr, addrlen); + free (name); + free (description); + free (url); + free (email); + free (phone); + + return sdp; +} -- 2.39.2