提交 7934b15d 编写于 作者: M Martin Storsjö

Handle IPv6 in the RTSP code

Originally committed as revision 24925 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 3fbd12d1
...@@ -696,13 +696,10 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p) ...@@ -696,13 +696,10 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
th->ttl = strtol(p, (char **)&p, 10); th->ttl = strtol(p, (char **)&p, 10);
} }
} else if (!strcmp(parameter, "destination")) { } else if (!strcmp(parameter, "destination")) {
struct in_addr ipaddr;
if (*p == '=') { if (*p == '=') {
p++; p++;
get_word_sep(buf, sizeof(buf), ";,", &p); get_word_sep(buf, sizeof(buf), ";,", &p);
if (ff_inet_aton(buf, &ipaddr)) get_sockaddr(buf, &th->destination);
th->destination = ntohl(ipaddr.s_addr);
} }
} }
while (*p != ';' && *p != '\0' && *p != ',') while (*p != ';' && *p != '\0' && *p != ',')
...@@ -1174,20 +1171,22 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port, ...@@ -1174,20 +1171,22 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
break; break;
} }
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST: { case RTSP_LOWER_TRANSPORT_UDP_MULTICAST: {
char url[1024]; char url[1024], namebuf[50];
struct in_addr in; struct sockaddr_storage addr;
int port, ttl; int port, ttl;
if (reply->transports[0].destination) { if (reply->transports[0].destination.ss_family) {
in.s_addr = htonl(reply->transports[0].destination); addr = reply->transports[0].destination;
port = reply->transports[0].port_min; port = reply->transports[0].port_min;
ttl = reply->transports[0].ttl; ttl = reply->transports[0].ttl;
} else { } else {
in = ((struct sockaddr_in*)&rtsp_st->sdp_ip)->sin_addr; addr = rtsp_st->sdp_ip;
port = rtsp_st->sdp_port; port = rtsp_st->sdp_port;
ttl = rtsp_st->sdp_ttl; ttl = rtsp_st->sdp_ttl;
} }
ff_url_join(url, sizeof(url), "rtp", NULL, inet_ntoa(in), getnameinfo((struct sockaddr*) &addr, sizeof(addr),
namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
ff_url_join(url, sizeof(url), "rtp", NULL, namebuf,
port, "?ttl=%d", ttl); port, "?ttl=%d", ttl);
if (url_open(&rtsp_st->rtp_handle, url, URL_RDWR) < 0) { if (url_open(&rtsp_st->rtp_handle, url, URL_RDWR) < 0) {
err = AVERROR_INVALIDDATA; err = AVERROR_INVALIDDATA;
......
...@@ -96,7 +96,7 @@ typedef struct RTSPTransportField { ...@@ -96,7 +96,7 @@ typedef struct RTSPTransportField {
* packets will be allowed to make before being discarded. */ * packets will be allowed to make before being discarded. */
int ttl; int ttl;
uint32_t destination; /**< destination IP address */ struct sockaddr_storage destination; /**< destination IP address */
/** data/packet transport protocol; e.g. RTP or RDT */ /** data/packet transport protocol; e.g. RTP or RDT */
enum RTSPTransport transport; enum RTSPTransport transport;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册