Use sdp c= line if the rtsp Transport line doesn't have a destination

Transport:destination in rtsp is optional, c= line in sdp is compulsory

Patch from Armand Bendanan (name.surnameATfreeDOTfr)

Originally committed as revision 20362 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Luca Barbato 2009-10-24 15:10:58 +00:00
parent 76e6e9c330
commit 224b44957b

View File

@ -1125,12 +1125,19 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
{ {
char url[1024]; char url[1024];
struct in_addr in; struct in_addr in;
int port, ttl;
in.s_addr = htonl(reply->transports[0].destination); if (reply->transports[0].destination) {
in.s_addr = htonl(reply->transports[0].destination);
port = reply->transports[0].port_min;
ttl = reply->transports[0].ttl;
} else {
in = rtsp_st->sdp_ip;
port = rtsp_st->sdp_port;
ttl = rtsp_st->sdp_ttl;
}
snprintf(url, sizeof(url), "rtp://%s:%d?ttl=%d", snprintf(url, sizeof(url), "rtp://%s:%d?ttl=%d",
inet_ntoa(in), inet_ntoa(in), port, ttl);
reply->transports[0].port_min,
reply->transports[0].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;
goto fail; goto fail;