提交 6f5048f4 编写于 作者: Z Zhao Zhili 提交者: Michael Niedermayer

rtp: Fix play multiple multicast streams with the same port

We cannot play multiple multicast streams with the same port at the
same time. This is because both rtp and rtcp port are opened in
read-write mode, so they will not bind to the multicast address. Try
to make rtp port as read-only by default to solve this bug.
Signed-off-by: NZhao Zhili <wantlamy@gmail.com>
Signed-off-by: NMichael Niedermayer <michael@niedermayer.cc>
上级 86db71b4
......@@ -323,6 +323,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
char path[1024];
const char *p;
int i, max_retry_count = 3;
int rtcpflags;
av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port,
path, sizeof(path), uri);
......@@ -388,12 +389,13 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
s->local_rtpport = -1;
continue;
}
rtcpflags = flags | AVIO_FLAG_WRITE;
if (s->local_rtcpport < 0) {
s->local_rtcpport = s->local_rtpport + 1;
build_udp_url(s, buf, sizeof(buf),
hostname, s->rtcp_port, s->local_rtcpport,
sources, block);
if (ffurl_open_whitelist(&s->rtcp_hd, buf, flags,
if (ffurl_open_whitelist(&s->rtcp_hd, buf, rtcpflags,
&h->interrupt_callback, NULL,
h->protocol_whitelist, h->protocol_blacklist) < 0) {
s->local_rtpport = s->local_rtcpport = -1;
......@@ -404,7 +406,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
build_udp_url(s, buf, sizeof(buf),
hostname, s->rtcp_port, s->local_rtcpport,
sources, block);
if (ffurl_open_whitelist(&s->rtcp_hd, buf, flags, &h->interrupt_callback,
if (ffurl_open_whitelist(&s->rtcp_hd, buf, rtcpflags, &h->interrupt_callback,
NULL, h->protocol_whitelist, h->protocol_blacklist) < 0)
goto fail;
break;
......
......@@ -2316,7 +2316,7 @@ static int sdp_read_header(AVFormatContext *s)
append_source_addrs(url, sizeof(url), "block",
rtsp_st->nb_exclude_source_addrs,
rtsp_st->exclude_source_addrs);
err = ffurl_open_whitelist(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
err = ffurl_open_whitelist(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ,
&s->interrupt_callback, &opts, s->protocol_whitelist, s->protocol_blacklist);
av_dict_free(&opts);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册