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,
{
mrl_t mrl;
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 );
/* 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)
{
char *port;
/* For historical reasons, rtp:// means RTP over UDP */
strcpy (mrl.psz_access, "udp");
fmt = rtpfmt;
}
else
rtp:
if (mrl.psz_name[0] == '[')
{
static const char list[] = "dccp\0sctp\0tcp\0udplite\0";
for (const char *a = list; *a; a += strlen (a) + 1)
if (strcmp (a, mrl.psz_access) == 0)
{
fmt = rtpfmt;
break;
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;
}
/* Convert the URL to a basic sout chain */
if (asprintf (&psz_chain, fmt,
else
{
/* 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)
psz_chain = NULL;
}
/* Duplicate and wrap if sout-display is on */
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