| Index: patched-ffmpeg-mt/libavformat/rtpproto.c
|
| ===================================================================
|
| --- patched-ffmpeg-mt/libavformat/rtpproto.c (revision 41250)
|
| +++ patched-ffmpeg-mt/libavformat/rtpproto.c (working copy)
|
| @@ -26,6 +26,7 @@
|
|
|
| #include "libavutil/avstring.h"
|
| #include "avformat.h"
|
| +#include "rtpdec.h"
|
|
|
| #include <unistd.h>
|
| #include <stdarg.h>
|
| @@ -63,13 +64,13 @@
|
| char buf[1024];
|
| char path[1024];
|
|
|
| - url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
|
| - path, sizeof(path), uri);
|
| + ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
|
| + path, sizeof(path), uri);
|
|
|
| - snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port, path);
|
| + ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port, "%s", path);
|
| udp_set_remote_url(s->rtp_hd, buf);
|
|
|
| - snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port + 1, path);
|
| + ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port + 1, "%s", path);
|
| udp_set_remote_url(s->rtcp_hd, buf);
|
| return 0;
|
| }
|
| @@ -100,7 +101,7 @@
|
| int local_port, int ttl,
|
| int max_packet_size)
|
| {
|
| - snprintf(buf, buf_size, "udp://%s:%d", hostname, port);
|
| + ff_url_join(buf, buf_size, "udp", NULL, hostname, port, NULL);
|
| if (local_port >= 0)
|
| url_add_option(buf, buf_size, "localport=%d", local_port);
|
| if (ttl >= 0)
|
| @@ -133,8 +134,8 @@
|
| return AVERROR(ENOMEM);
|
| h->priv_data = s;
|
|
|
| - url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
|
| - path, sizeof(path), uri);
|
| + ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
|
| + path, sizeof(path), uri);
|
| /* extract parameters */
|
| ttl = -1;
|
| local_port = -1;
|
| @@ -192,6 +193,7 @@
|
| socklen_t from_len;
|
| int len, fd_max, n;
|
| fd_set rfds;
|
| + struct timeval tv;
|
| #if 0
|
| for(;;) {
|
| from_len = sizeof(from);
|
| @@ -207,6 +209,8 @@
|
| }
|
| #else
|
| for(;;) {
|
| + if (url_interrupt_cb())
|
| + return AVERROR(EINTR);
|
| /* build fdset to listen to RTP and RTCP packets */
|
| FD_ZERO(&rfds);
|
| fd_max = s->rtp_fd;
|
| @@ -214,7 +218,9 @@
|
| if (s->rtcp_fd > fd_max)
|
| fd_max = s->rtcp_fd;
|
| FD_SET(s->rtcp_fd, &rfds);
|
| - n = select(fd_max + 1, &rfds, NULL, NULL, NULL);
|
| + tv.tv_sec = 0;
|
| + tv.tv_usec = 100 * 1000;
|
| + n = select(fd_max + 1, &rfds, NULL, NULL, &tv);
|
| if (n > 0) {
|
| /* first try RTCP */
|
| if (FD_ISSET(s->rtcp_fd, &rfds)) {
|
| @@ -242,6 +248,8 @@
|
| }
|
| break;
|
| }
|
| + } else if (n < 0) {
|
| + return AVERROR(EIO);
|
| }
|
| }
|
| #endif
|
|
|