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,33 +813,46 @@ static char *_sout_stream_url_to_chain( vlc_object_t *p_this, ...@@ -813,33 +813,46 @@ 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] == '[')
else
{ {
static const char list[] = "dccp\0sctp\0tcp\0udplite\0"; port = strstr (mrl.psz_name, "]:");
for (const char *a = list; *a; a += strlen (a) + 1) if (port != NULL)
if (strcmp (a, mrl.psz_access) == 0) port++;
{
fmt = rtpfmt;
break;
} }
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
/* Convert the URL to a basic sout chain */ {
if (asprintf (&psz_chain, fmt, /* Convert the URL to a basic standard sout chain */
if (asprintf (&psz_chain,
"standard{mux=\"%s\",access=\"%s\",dst=\"%s\"}",
mrl.psz_way, mrl.psz_access, mrl.psz_name) == -1) mrl.psz_way, mrl.psz_access, mrl.psz_name) == -1)
psz_chain = NULL; 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