Commit bc650c59 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Rework SDP API a little

parent d5f7a3c1
......@@ -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 ) );
......
......@@ -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 )
......
......@@ -257,7 +257,7 @@ playlist_ServicesDiscoveryRemove
playlist_TreeMove
resolve_xml_special_chars
secstotimestr
sdp_Start
vlc_sdp_Start
sdp_AddAttribute
sdp_AddMedia
sout_AccessOutDelete
......
......@@ -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;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment