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

Fix specifying a sout RTP port number using a sout MRL

parent a458b6af
...@@ -813,34 +813,47 @@ static char *_sout_stream_url_to_chain( vlc_object_t *p_this, ...@@ -813,34 +813,47 @@ static char *_sout_stream_url_to_chain( vlc_object_t *p_this,
{ {
mrl_t mrl; mrl_t mrl;
char *psz_chain; char *psz_chain;
const char *fmt = "standard{mux=\"%s\",access=\"%s\",dst=\"%s\"}";
static const char rtpfmt[] = "rtp{mux=\"%s\",proto=\"%s\",dst=\"%s\"}";
mrl_Parse( &mrl, psz_url ); mrl_Parse( &mrl, psz_url );
/* Check if the URLs goes #rtp - otherwise we'll use #standard */ /* Check if the URLs goes to #rtp - otherwise we'll use #standard */
static const char rtplist[] = "dccp\0sctp\0tcp\0udplite\0";
for (const char *a = rtplist; *a; a += strlen (a) + 1)
if (strcmp (a, mrl.psz_access) == 0)
goto rtp;
if (strcmp (mrl.psz_access, "rtp") == 0) if (strcmp (mrl.psz_access, "rtp") == 0)
{ {
char *port;
/* For historical reasons, rtp:// means RTP over UDP */ /* For historical reasons, rtp:// means RTP over UDP */
strcpy (mrl.psz_access, "udp"); strcpy (mrl.psz_access, "udp");
fmt = rtpfmt; rtp:
if (mrl.psz_name[0] == '[')
{
port = strstr (mrl.psz_name, "]:");
if (port != NULL)
port++;
}
else
port = strchr (mrl.psz_name, ':');
if (port != NULL)
*port++ = '\0'; /* erase ':' */
if (asprintf (&psz_chain,
"rtp{mux=\"%s\",proto=\"%s\",dst=\"%s%s%s\"}",
mrl.psz_way, mrl.psz_access, mrl.psz_name,
port ? "\",port=\"" : "", port ? port : "") == -1)
psz_chain = NULL;
} }
else else
{ {
static const char list[] = "dccp\0sctp\0tcp\0udplite\0"; /* Convert the URL to a basic standard sout chain */
for (const char *a = list; *a; a += strlen (a) + 1) if (asprintf (&psz_chain,
if (strcmp (a, mrl.psz_access) == 0) "standard{mux=\"%s\",access=\"%s\",dst=\"%s\"}",
{ mrl.psz_way, mrl.psz_access, mrl.psz_name) == -1)
fmt = rtpfmt; psz_chain = NULL;
break;
}
} }
/* Convert the URL to a basic sout chain */
if (asprintf (&psz_chain, fmt,
mrl.psz_way, mrl.psz_access, mrl.psz_name) == -1)
psz_chain = NULL;
/* Duplicate and wrap if sout-display is on */ /* Duplicate and wrap if sout-display is on */
if (psz_chain && (config_GetInt( p_this, "sout-display" ) > 0)) if (psz_chain && (config_GetInt( p_this, "sout-display" ) > 0))
{ {
......
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