---
libavformat/rtsp.c | 74 +++++++++++++++++++++++++++++-------------------------
1 file changed, 40 insertions(+), 34 deletions(-)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 4beb275..0c53e3e 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -2233,13 +2233,51 @@ static void append_source_addrs(char *buf, int size,
const char *name,
av_strlcatf(buf, size, ",%s", addrs[i]->addr);
}
+static int open_rtp_stream(AVFormatContext *s, RTSPStream *rtsp_st)
+{
+ RTSPState *rt = s->priv_data;
+ AVDictionary *opts = map_to_opts(rt);
+ char url[1024], namebuf[50];
+ int err;
+
+ err = getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip,
+ sizeof(rtsp_st->sdp_ip),
+ namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
+ if (err) {
+ av_log(s, AV_LOG_ERROR, "getnameinfo: %s\n", gai_strerror(err));
+ err = AVERROR(EIO);
+ goto fail;
+ }
+ ff_url_join(url, sizeof(url), "rtp", NULL,
+ namebuf, rtsp_st->sdp_port,
+ "?localport=%d&ttl=%d&connect=%d&write_to_source=%d",
+ rtsp_st->sdp_port, rtsp_st->sdp_ttl,
+ rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0,
+ rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 : 0);
+
+ append_source_addrs(url, sizeof(url), "sources",
+ rtsp_st->nb_include_source_addrs,
+ rtsp_st->include_source_addrs);
+ append_source_addrs(url, sizeof(url), "block",
+ rtsp_st->nb_exclude_source_addrs,
+ rtsp_st->exclude_source_addrs);
+ err = ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
+ &s->interrupt_callback, &opts);
+ if (err < 0)
+ err = AVERROR_INVALIDDATA;
+
+fail:
+ av_dict_free(&opts);
+
+ return err;
+}
+
static int sdp_read_header(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
RTSPStream *rtsp_st;
int size, i, err;
char *content;
- char url[1024];
if (!ff_network_init())
return AVERROR(EIO);
@@ -2267,43 +2305,11 @@ static int sdp_read_header(AVFormatContext *s)
/* open each RTP stream */
for (i = 0; i < rt->nb_rtsp_streams; i++) {
- char namebuf[50];
rtsp_st = rt->rtsp_streams[i];
if (!(rt->rtsp_flags & RTSP_FLAG_CUSTOM_IO)) {
- AVDictionary *opts = map_to_opts(rt);
-
- err = getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip,
- sizeof(rtsp_st->sdp_ip),
- namebuf, sizeof(namebuf), NULL, 0,
NI_NUMERICHOST);
- if (err) {
- av_log(s, AV_LOG_ERROR, "getnameinfo: %s\n",
gai_strerror(err));
- err = AVERROR(EIO);
- av_dict_free(&opts);
+ if ((err = open_rtp_stream(s, rtsp_st)) < 0)
goto fail;
- }
- ff_url_join(url, sizeof(url), "rtp", NULL,
- namebuf, rtsp_st->sdp_port,
- "?localport=%d&ttl=%d&connect=%d&write_to_source=%d",
- rtsp_st->sdp_port, rtsp_st->sdp_ttl,
- rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0,
- rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 : 0);
-
- append_source_addrs(url, sizeof(url), "sources",
- rtsp_st->nb_include_source_addrs,
- rtsp_st->include_source_addrs);
- append_source_addrs(url, sizeof(url), "block",
- rtsp_st->nb_exclude_source_addrs,
- rtsp_st->exclude_source_addrs);
- err = ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, &opts);
-
- av_dict_free(&opts);
-
- if (err < 0) {
- err = AVERROR_INVALIDDATA;
- goto fail;
- }
}
if ((err = ff_rtsp_open_transport_ctx(s, rtsp_st)))
goto fail;
--
2.6.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel