|
|
@ -1924,7 +1924,6 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, |
|
|
|
RTSPState *rt = s->priv_data; |
|
|
|
RTSPState *rt = s->priv_data; |
|
|
|
RTSPStream *rtsp_st; |
|
|
|
RTSPStream *rtsp_st; |
|
|
|
int n, i, ret, tcp_fd, timeout_cnt = 0; |
|
|
|
int n, i, ret, tcp_fd, timeout_cnt = 0; |
|
|
|
int max_p = 0; |
|
|
|
|
|
|
|
struct pollfd *p = rt->p; |
|
|
|
struct pollfd *p = rt->p; |
|
|
|
int *fds = NULL, fdsnum, fdsidx; |
|
|
|
int *fds = NULL, fdsnum, fdsidx; |
|
|
|
|
|
|
|
|
|
|
@ -1932,33 +1931,33 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, |
|
|
|
p = rt->p = av_malloc_array(2 * (rt->nb_rtsp_streams + 1), sizeof(struct pollfd)); |
|
|
|
p = rt->p = av_malloc_array(2 * (rt->nb_rtsp_streams + 1), sizeof(struct pollfd)); |
|
|
|
if (!p) |
|
|
|
if (!p) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rt->rtsp_hd) { |
|
|
|
if (rt->rtsp_hd) { |
|
|
|
tcp_fd = ffurl_get_file_handle(rt->rtsp_hd); |
|
|
|
tcp_fd = ffurl_get_file_handle(rt->rtsp_hd); |
|
|
|
p[max_p].fd = tcp_fd; |
|
|
|
p[rt->max_p].fd = tcp_fd; |
|
|
|
p[max_p++].events = POLLIN; |
|
|
|
p[rt->max_p++].events = POLLIN; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
tcp_fd = -1; |
|
|
|
tcp_fd = -1; |
|
|
|
} |
|
|
|
} |
|
|
|
for (i = 0; i < rt->nb_rtsp_streams; i++) { |
|
|
|
for (i = 0; i < rt->nb_rtsp_streams; i++) { |
|
|
|
rtsp_st = rt->rtsp_streams[i]; |
|
|
|
rtsp_st = rt->rtsp_streams[i]; |
|
|
|
if (rtsp_st->rtp_handle) { |
|
|
|
if (rtsp_st->rtp_handle) { |
|
|
|
if (ret = ffurl_get_multi_file_handle(rtsp_st->rtp_handle, |
|
|
|
if (ret = ffurl_get_multi_file_handle(rtsp_st->rtp_handle, |
|
|
|
&fds, &fdsnum)) { |
|
|
|
&fds, &fdsnum)) { |
|
|
|
av_log(s, AV_LOG_ERROR, "Unable to recover rtp ports\n"); |
|
|
|
av_log(s, AV_LOG_ERROR, "Unable to recover rtp ports\n"); |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
if (fdsnum != 2) { |
|
|
|
if (fdsnum != 2) { |
|
|
|
av_log(s, AV_LOG_ERROR, |
|
|
|
av_log(s, AV_LOG_ERROR, |
|
|
|
"Number of fds %d not supported\n", fdsnum); |
|
|
|
"Number of fds %d not supported\n", fdsnum); |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
} |
|
|
|
for (fdsidx = 0; fdsidx < fdsnum; fdsidx++) { |
|
|
|
for (fdsidx = 0; fdsidx < fdsnum; fdsidx++) { |
|
|
|
p[max_p].fd = fds[fdsidx]; |
|
|
|
p[rt->max_p].fd = fds[fdsidx]; |
|
|
|
p[max_p++].events = POLLIN; |
|
|
|
p[rt->max_p++].events = POLLIN; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
av_freep(&fds); |
|
|
|
} |
|
|
|
} |
|
|
|
av_freep(&fds); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1967,7 +1966,7 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, |
|
|
|
return AVERROR_EXIT; |
|
|
|
return AVERROR_EXIT; |
|
|
|
if (wait_end && wait_end - av_gettime_relative() < 0) |
|
|
|
if (wait_end && wait_end - av_gettime_relative() < 0) |
|
|
|
return AVERROR(EAGAIN); |
|
|
|
return AVERROR(EAGAIN); |
|
|
|
n = poll(p, max_p, POLL_TIMEOUT_MS); |
|
|
|
n = poll(p, rt->max_p, POLL_TIMEOUT_MS); |
|
|
|
if (n > 0) { |
|
|
|
if (n > 0) { |
|
|
|
int j = 1 - (tcp_fd == -1); |
|
|
|
int j = 1 - (tcp_fd == -1); |
|
|
|
timeout_cnt = 0; |
|
|
|
timeout_cnt = 0; |
|
|
|