annotate rtpproto.c @ 2065:64bd1b09cef2 libavformat

patch so that the deprecated items show up correctly when building doxygen docs patch by mark cox melbournemark plus ffmpeg minus devel chez gmail dot com
author benoit
date Wed, 02 May 2007 09:13:47 +0000
parents eeea52739ff3
children c5a3a1f884a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1 /*
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
2 * RTP network protocol
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
4 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
11 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 * Lesser General Public License for more details.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
16 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 887
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
20 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 #include "avformat.h"
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
22
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
23 #include <unistd.h>
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
24 #include <stdarg.h>
1754
1f7a6dc01100 move networking #includes into separate file
mru
parents: 1670
diff changeset
25 #include "network.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
26 #include <fcntl.h>
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
27
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
28 #define RTP_TX_BUF_SIZE (64 * 1024)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
29 #define RTP_RX_BUF_SIZE (128 * 1024)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
30
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
31 typedef struct RTPContext {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
32 URLContext *rtp_hd, *rtcp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33 int rtp_fd, rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 } RTPContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
36 /**
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
37 * If no filename is given to av_open_input_file because you want to
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
38 * get the local port first, then you must call this function to set
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
39 * the remote server address.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
40 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
41 * @param s1 media file context
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
42 * @param uri of the remote server
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
43 * @return zero if no error.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
44 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
45 int rtp_set_remote_url(URLContext *h, const char *uri)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
46 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
47 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
48 char hostname[256];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
49 int port;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
50
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
51 char buf[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
52 char path[1024];
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
53
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
54 url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
55 path, sizeof(path), uri);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
57 snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port, path);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
58 udp_set_remote_url(s->rtp_hd, buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
59
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
60 snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port + 1, path);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61 udp_set_remote_url(s->rtcp_hd, buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
62 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
63 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
64
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
65
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
66 /* add option to url of the form:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
67 "http://host:port/path?option1=val1&option2=val2... */
64
b0e0eb595e29 * static,const,compiler warning cleanup
kabi
parents: 0
diff changeset
68 static void url_add_option(char *buf, int buf_size, const char *fmt, ...)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
69 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
70 char buf1[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
71 va_list ap;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
72
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
73 va_start(ap, fmt);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
74 if (strchr(buf, '?'))
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
75 pstrcat(buf, buf_size, "&");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
76 else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
77 pstrcat(buf, buf_size, "?");
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 vsnprintf(buf1, sizeof(buf1), fmt, ap);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79 pstrcat(buf, buf_size, buf1);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
80 va_end(ap);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
81 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
82
64
b0e0eb595e29 * static,const,compiler warning cleanup
kabi
parents: 0
diff changeset
83 static void build_udp_url(char *buf, int buf_size,
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
84 const char *hostname, int port,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
85 int local_port, int multicast, int ttl)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
86 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
87 snprintf(buf, buf_size, "udp://%s:%d", hostname, port);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
88 if (local_port >= 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
89 url_add_option(buf, buf_size, "localport=%d", local_port);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
90 if (multicast)
1930
f67a8d12053d Remove parameter unused in format string.
reimar
parents: 1787
diff changeset
91 url_add_option(buf, buf_size, "multicast=1");
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
92 if (ttl >= 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
93 url_add_option(buf, buf_size, "ttl=%d", ttl);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
94 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
95
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96 /*
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
97 * url syntax: rtp://host:port[?option=val...]
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
98 * option: 'multicast=1' : enable multicast
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
99 * 'ttl=n' : set the ttl value (for multicast only)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100 * 'localport=n' : set the local port to n
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
101 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
102 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
103 static int rtp_open(URLContext *h, const char *uri, int flags)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
104 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 RTPContext *s;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
106 int port, is_output, is_multicast, ttl, local_port;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107 char hostname[256];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108 char buf[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109 char path[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 const char *p;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
111
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
112 is_output = (flags & URL_WRONLY);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
113
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
114 s = av_mallocz(sizeof(RTPContext));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
115 if (!s)
1787
eb16c64144ee This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents: 1754
diff changeset
116 return AVERROR(ENOMEM);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
117 h->priv_data = s;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
118
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
119 url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
120 path, sizeof(path), uri);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
121 /* extract parameters */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
122 is_multicast = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
123 ttl = -1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 local_port = -1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
125 p = strchr(uri, '?');
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
126 if (p) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
127 is_multicast = find_info_tag(buf, sizeof(buf), "multicast", p);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
128 if (find_info_tag(buf, sizeof(buf), "ttl", p)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
129 ttl = strtol(buf, NULL, 10);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
130 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
131 if (find_info_tag(buf, sizeof(buf), "localport", p)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 local_port = strtol(buf, NULL, 10);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
133 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
134 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
135
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
136 build_udp_url(buf, sizeof(buf),
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137 hostname, port, local_port, is_multicast, ttl);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
138 if (url_open(&s->rtp_hd, buf, flags) < 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 goto fail;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
140 local_port = udp_get_local_port(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
141 /* XXX: need to open another connexion if the port is not even */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143 /* well, should suppress localport in path */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
144
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 build_udp_url(buf, sizeof(buf),
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
146 hostname, port + 1, local_port + 1, is_multicast, ttl);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 if (url_open(&s->rtcp_hd, buf, flags) < 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
148 goto fail;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
149
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
150 /* just to ease handle access. XXX: need to suppress direct handle
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
151 access */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 s->rtp_fd = udp_get_file_handle(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
153 s->rtcp_fd = udp_get_file_handle(s->rtcp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
154
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
155 h->max_packet_size = url_get_max_packet_size(s->rtp_hd);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
156 h->is_streamed = 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
157 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
158
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
159 fail:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160 if (s->rtp_hd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
161 url_close(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
162 if (s->rtcp_hd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
163 url_close(s->rtcp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
164 av_free(s);
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 65
diff changeset
165 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
167
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 64
diff changeset
168 static int rtp_read(URLContext *h, uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
169 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
170 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
171 struct sockaddr_in from;
1332
7474cc6383d4 fix some signedness warnings
mru
parents: 896
diff changeset
172 socklen_t from_len;
7474cc6383d4 fix some signedness warnings
mru
parents: 896
diff changeset
173 int len, fd_max, n;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 fd_set rfds;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
175 #if 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
176 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
177 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
178 len = recvfrom (s->rtp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
179 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
180 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
181 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
182 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
183 continue;
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 65
diff changeset
184 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
185 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
186 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
187 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
188 #else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
189 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
190 /* build fdset to listen to RTP and RTCP packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
191 FD_ZERO(&rfds);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
192 fd_max = s->rtp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
193 FD_SET(s->rtp_fd, &rfds);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
194 if (s->rtcp_fd > fd_max)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
195 fd_max = s->rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
196 FD_SET(s->rtcp_fd, &rfds);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
197 n = select(fd_max + 1, &rfds, NULL, NULL, NULL);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
198 if (n > 0) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
199 /* first try RTCP */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
200 if (FD_ISSET(s->rtcp_fd, &rfds)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
201 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
202 len = recvfrom (s->rtcp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
203 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
204 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
205 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
206 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
207 continue;
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 65
diff changeset
208 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
209 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
210 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
211 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
212 /* then RTP */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
213 if (FD_ISSET(s->rtp_fd, &rfds)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
214 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
215 len = recvfrom (s->rtp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
216 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
217 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
218 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
219 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
220 continue;
482
0fdc96c2f2fe sweeping change from -EIO -> AVERROR_IO
melanson
parents: 65
diff changeset
221 return AVERROR_IO;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
222 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
223 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
224 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
225 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
226 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
227 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
228 return len;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
229 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
230
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 64
diff changeset
231 static int rtp_write(URLContext *h, uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
232 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
233 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
234 int ret;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
235 URLContext *hd;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
236
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
237 if (buf[1] >= 200 && buf[1] <= 204) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
238 /* RTCP payload type */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
239 hd = s->rtcp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
240 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
241 /* RTP payload type */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
242 hd = s->rtp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
243 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
244
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
245 ret = url_write(hd, buf, size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
246 #if 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
247 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
248 struct timespec ts;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
249 ts.tv_sec = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
250 ts.tv_nsec = 10 * 1000000;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
251 nanosleep(&ts, NULL);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
252 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
253 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
254 return ret;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
255 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
256
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
257 static int rtp_close(URLContext *h)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
258 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
259 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
260
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
261 url_close(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
262 url_close(s->rtcp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
263 av_free(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
264 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
265 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
266
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
267 /**
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
268 * Return the local port used by the RTP connexion
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
269 * @param s1 media file context
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
270 * @return the local port number
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
271 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
272 int rtp_get_local_port(URLContext *h)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
273 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
274 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
275 return udp_get_local_port(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
276 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
277
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
278 /**
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
279 * Return the rtp and rtcp file handles for select() usage to wait for several RTP
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
280 * streams at the same time.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
281 * @param h media file context
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
282 */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
283 void rtp_get_file_handles(URLContext *h, int *prtp_fd, int *prtcp_fd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
284 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
285 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
286
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
287 *prtp_fd = s->rtp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
288 *prtcp_fd = s->rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
289 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
290
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
291 URLProtocol rtp_protocol = {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
292 "rtp",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
293 rtp_open,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
294 rtp_read,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
295 rtp_write,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
296 NULL, /* seek */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
297 rtp_close,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
298 };