annotate rtpproto.c @ 6455:3f50c7effad1 libavformat

rtsp: 10l, try to update the correct rtp stream This fixes a bug from rev 22917. Now RTSP streams where the individual RTCP sender reports aren't sent at the same time actually are synced properly.
author mstorsjo
date Fri, 03 Sep 2010 07:10:21 +0000
parents 179ddd49895f
children 7406dd71c060
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
4251
77e0c7511d41 cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 4206
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard
0
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 */
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
21
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
22 /**
5969
178de7695c6c Remove explicit filename from Doxygen @file commands.
diego
parents: 5964
diff changeset
23 * @file
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
24 * RTP protocol
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
25 */
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
26
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3229
diff changeset
27 #include "libavutil/avstring.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
28 #include "avformat.h"
5725
334f223fc455 Include rtpdec.h, it contains prototypes for the following functions:
cehoyos
parents: 4640
diff changeset
29 #include "rtpdec.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
30
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
31 #include <unistd.h>
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
32 #include <stdarg.h>
5837
d605f589f0be move ff_url_split() and ff_url_join() declarations to internal.h
aurel
parents: 5801
diff changeset
33 #include "internal.h"
1754
1f7a6dc01100 move networking #includes into separate file
mru
parents: 1670
diff changeset
34 #include "network.h"
2782
419e121ce80a Add #include "os_support.h" to restore OS/2 support.
diego
parents: 2274
diff changeset
35 #include "os_support.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
36 #include <fcntl.h>
4206
c3102b189cb6 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 3720
diff changeset
37 #if HAVE_SYS_SELECT_H
3712
30d4d95e068f Add needed include, make it compile without -D_BSD_SOURCE.
michael
parents: 3286
diff changeset
38 #include <sys/select.h>
3720
1968303c7566 Surround '#include <sys/select>' by HAVE_SYS_SELECT_H.
diego
parents: 3712
diff changeset
39 #endif
5801
1851c2275530 Using struct timeval requires sys/time.h, fixes compilation on some OSes
mstorsjo
parents: 5776
diff changeset
40 #include <sys/time.h>
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
41
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
42 #define RTP_TX_BUF_SIZE (64 * 1024)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
43 #define RTP_RX_BUF_SIZE (128 * 1024)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
44
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
45 typedef struct RTPContext {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
46 URLContext *rtp_hd, *rtcp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
47 int rtp_fd, rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
48 } RTPContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
49
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
50 /**
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
51 * If no filename is given to av_open_input_file because you want to
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
52 * get the local port first, then you must call this function to set
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
53 * the remote server address.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
54 *
6215
ccb05424c391 Fix misspelled parameter names in Doxygen documentation.
diego
parents: 6182
diff changeset
55 * @param h media file context
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56 * @param uri of the remote server
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
57 * @return zero if no error.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
58 */
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
59
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
60 int rtp_set_remote_url(URLContext *h, const char *uri)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
62 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
63 char hostname[256];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
64 int port;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
65
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
66 char buf[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
67 char path[1024];
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
68
6182
4fc5e0e4e1cd Make ff_url_split() public
mru
parents: 6068
diff changeset
69 av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
5776
d34f985d6e8f Reindent
mstorsjo
parents: 5775
diff changeset
70 path, sizeof(path), uri);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
71
5756
7c7fe75728dd Use ff_url_join for assembling URLs, instead of snprintf
mstorsjo
parents: 5752
diff changeset
72 ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port, "%s", path);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
73 udp_set_remote_url(s->rtp_hd, buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
74
5756
7c7fe75728dd Use ff_url_join for assembling URLs, instead of snprintf
mstorsjo
parents: 5752
diff changeset
75 ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port + 1, "%s", path);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
76 udp_set_remote_url(s->rtcp_hd, buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
77 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
80
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
81 /**
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
82 * add option to url of the form:
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
83 * "http://host:port/path?option1=val1&option2=val2...
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
84 */
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
85
64
b0e0eb595e29 * static,const,compiler warning cleanup
kabi
parents: 0
diff changeset
86 static void url_add_option(char *buf, int buf_size, const char *fmt, ...)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
87 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
88 char buf1[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
89 va_list ap;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
90
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
91 va_start(ap, fmt);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
92 if (strchr(buf, '?'))
2193
5ce5fad0dfac replace the uses of old string functions that Reimar missed
mru
parents: 2079
diff changeset
93 av_strlcat(buf, "&", buf_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
94 else
2193
5ce5fad0dfac replace the uses of old string functions that Reimar missed
mru
parents: 2079
diff changeset
95 av_strlcat(buf, "?", buf_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96 vsnprintf(buf1, sizeof(buf1), fmt, ap);
2193
5ce5fad0dfac replace the uses of old string functions that Reimar missed
mru
parents: 2079
diff changeset
97 av_strlcat(buf, buf1, buf_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
98 va_end(ap);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
99 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100
64
b0e0eb595e29 * static,const,compiler warning cleanup
kabi
parents: 0
diff changeset
101 static void build_udp_url(char *buf, int buf_size,
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
102 const char *hostname, int port,
3228
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
103 int local_port, int ttl,
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
104 int max_packet_size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 {
5756
7c7fe75728dd Use ff_url_join for assembling URLs, instead of snprintf
mstorsjo
parents: 5752
diff changeset
106 ff_url_join(buf, buf_size, "udp", NULL, hostname, port, NULL);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107 if (local_port >= 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108 url_add_option(buf, buf_size, "localport=%d", local_port);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109 if (ttl >= 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 url_add_option(buf, buf_size, "ttl=%d", ttl);
3228
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
111 if (max_packet_size >=0)
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
112 url_add_option(buf, buf_size, "pkt_size=%d", max_packet_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
113 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
114
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
115 /**
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
116 * url syntax: rtp://host:port[?option=val...]
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
117 * option: 'ttl=n' : set the ttl value (for multicast only)
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
118 * 'rtcpport=n' : set the remote rtcp port to n
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
119 * 'localrtpport=n' : set the local rtp port to n
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
120 * 'localrtcpport=n' : set the local rtcp port to n
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
121 * 'pkt_size=n' : set max packet size
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
122 * deprecated option:
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
123 * 'localport=n' : set the local port to n
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 *
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
125 * if rtcpport isn't set the rtcp port will be the rtp port + 1
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
126 * if local rtp port isn't set any available port will be used for the local
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
127 * rtp and rtcp ports
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
128 * if the local rtcp port is not set it will be the local rtp port + 1
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
129 */
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
130
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
131 static int rtp_open(URLContext *h, const char *uri, int flags)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
133 RTPContext *s;
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
134 int rtp_port, rtcp_port,
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
135 is_output, ttl,
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
136 local_rtp_port, local_rtcp_port, max_packet_size;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137 char hostname[256];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
138 char buf[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 char path[1024];
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
140 const char *p;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
141
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142 is_output = (flags & URL_WRONLY);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
144 s = av_mallocz(sizeof(RTPContext));
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 if (!s)
1787
eb16c64144ee This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents: 1754
diff changeset
146 return AVERROR(ENOMEM);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 h->priv_data = s;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
148
6182
4fc5e0e4e1cd Make ff_url_split() public
mru
parents: 6068
diff changeset
149 av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port,
5776
d34f985d6e8f Reindent
mstorsjo
parents: 5775
diff changeset
150 path, sizeof(path), uri);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
151 /* extract parameters */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 ttl = -1;
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
153 rtcp_port = rtp_port+1;
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
154 local_rtp_port = -1;
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
155 local_rtcp_port = -1;
3228
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
156 max_packet_size = -1;
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
157
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
158 p = strchr(uri, '?');
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
159 if (p) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160 if (find_info_tag(buf, sizeof(buf), "ttl", p)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
161 ttl = strtol(buf, NULL, 10);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
162 }
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
163 if (find_info_tag(buf, sizeof(buf), "rtcpport", p)) {
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
164 rtcp_port = strtol(buf, NULL, 10);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
165 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166 if (find_info_tag(buf, sizeof(buf), "localport", p)) {
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
167 local_rtp_port = strtol(buf, NULL, 10);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
168 }
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
169 if (find_info_tag(buf, sizeof(buf), "localrtpport", p)) {
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
170 local_rtp_port = strtol(buf, NULL, 10);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
171 }
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
172 if (find_info_tag(buf, sizeof(buf), "localrtcpport", p)) {
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
173 local_rtcp_port = strtol(buf, NULL, 10);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 }
3228
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
175 if (find_info_tag(buf, sizeof(buf), "pkt_size", p)) {
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
176 max_packet_size = strtol(buf, NULL, 10);
697a11d7e3cf Expose max_packet_size from the rtp protocol
lu_zero
parents: 3221
diff changeset
177 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
178 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
179
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
180 build_udp_url(buf, sizeof(buf),
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
181 hostname, rtp_port, local_rtp_port, ttl, max_packet_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
182 if (url_open(&s->rtp_hd, buf, flags) < 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
183 goto fail;
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
184 if (local_rtp_port>=0 && local_rtcp_port<0)
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
185 local_rtcp_port = udp_get_local_port(s->rtp_hd) + 1;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
186
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
187 build_udp_url(buf, sizeof(buf),
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
188 hostname, rtcp_port, local_rtcp_port, ttl, max_packet_size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
189 if (url_open(&s->rtcp_hd, buf, flags) < 0)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
190 goto fail;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
191
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
192 /* just to ease handle access. XXX: need to suppress direct handle
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
193 access */
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
194 s->rtp_fd = url_get_file_handle(s->rtp_hd);
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
195 s->rtcp_fd = url_get_file_handle(s->rtcp_hd);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
196
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
197 h->max_packet_size = url_get_max_packet_size(s->rtp_hd);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
198 h->is_streamed = 1;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
199 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
200
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
201 fail:
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
202 if (s->rtp_hd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
203 url_close(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
204 if (s->rtcp_hd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
205 url_close(s->rtcp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
206 av_free(s);
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2200
diff changeset
207 return AVERROR(EIO);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
208 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
209
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 64
diff changeset
210 static int rtp_read(URLContext *h, uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
211 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
212 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
213 struct sockaddr_in from;
1332
7474cc6383d4 fix some signedness warnings
mru
parents: 896
diff changeset
214 socklen_t from_len;
7474cc6383d4 fix some signedness warnings
mru
parents: 896
diff changeset
215 int len, fd_max, n;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
216 fd_set rfds;
5750
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
217 struct timeval tv;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
218 #if 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
219 for(;;) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
220 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
221 len = recvfrom (s->rtp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
222 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
223 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
224 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
225 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
226 continue;
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2200
diff changeset
227 return AVERROR(EIO);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
228 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
229 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
230 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
231 #else
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
232 for(;;) {
5750
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
233 if (url_interrupt_cb())
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
234 return AVERROR(EINTR);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
235 /* build fdset to listen to RTP and RTCP packets */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
236 FD_ZERO(&rfds);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
237 fd_max = s->rtp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
238 FD_SET(s->rtp_fd, &rfds);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
239 if (s->rtcp_fd > fd_max)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
240 fd_max = s->rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
241 FD_SET(s->rtcp_fd, &rfds);
5750
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
242 tv.tv_sec = 0;
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
243 tv.tv_usec = 100 * 1000;
0f9c0db923e5 Check url_interrupt_cb in rtp_read, wait in select for max 100 ms before rechecking url_interrupt_cb
mstorsjo
parents: 5725
diff changeset
244 n = select(fd_max + 1, &rfds, NULL, NULL, &tv);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
245 if (n > 0) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
246 /* first try RTCP */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
247 if (FD_ISSET(s->rtcp_fd, &rfds)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
248 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
249 len = recvfrom (s->rtcp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
250 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
251 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
252 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
253 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
254 continue;
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2200
diff changeset
255 return AVERROR(EIO);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
256 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
257 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
258 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
259 /* then RTP */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
260 if (FD_ISSET(s->rtp_fd, &rfds)) {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
261 from_len = sizeof(from);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
262 len = recvfrom (s->rtp_fd, buf, size, 0,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
263 (struct sockaddr *)&from, &from_len);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
264 if (len < 0) {
2056
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
265 if (ff_neterrno() == FF_NETERROR(EAGAIN) ||
eeea52739ff3 use ff_neterrno() and FF_NETERROR() for networking error handling
alex
parents: 1930
diff changeset
266 ff_neterrno() == FF_NETERROR(EINTR))
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
267 continue;
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2200
diff changeset
268 return AVERROR(EIO);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
269 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
270 break;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
271 }
5752
cb840f900fef Return from rtp_read when select returns an error
mstorsjo
parents: 5750
diff changeset
272 } else if (n < 0) {
5896
395592984ef0 Don't report EINTR from select as an error, retry select instead
mstorsjo
parents: 5837
diff changeset
273 if (ff_neterrno() == FF_NETERROR(EINTR))
395592984ef0 Don't report EINTR from select as an error, retry select instead
mstorsjo
parents: 5837
diff changeset
274 continue;
5752
cb840f900fef Return from rtp_read when select returns an error
mstorsjo
parents: 5750
diff changeset
275 return AVERROR(EIO);
0
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 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
279 return len;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
280 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
281
6068
7fdda2416684 Declare the url_write buffer parameter as const
mstorsjo
parents: 5969
diff changeset
282 static int rtp_write(URLContext *h, const uint8_t *buf, int size)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
283 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
284 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
285 int ret;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
286 URLContext *hd;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 511
diff changeset
287
6404
37944ce385a0 rtp: Replace hardcoded RTCP packet types with defines
mstorsjo
parents: 6215
diff changeset
288 if (buf[1] >= RTCP_SR && buf[1] <= RTCP_APP) {
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
289 /* RTCP payload type */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
290 hd = s->rtcp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
291 } else {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
292 /* RTP payload type */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
293 hd = s->rtp_hd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
294 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
295
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
296 ret = url_write(hd, buf, size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
297 #if 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
298 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
299 struct timespec ts;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
300 ts.tv_sec = 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
301 ts.tv_nsec = 10 * 1000000;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
302 nanosleep(&ts, NULL);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
303 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
304 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
305 return ret;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
306 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
307
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
308 static int rtp_close(URLContext *h)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
309 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
310 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
311
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
312 url_close(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
313 url_close(s->rtcp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
314 av_free(s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
315 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
316 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
317
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
318 /**
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
319 * Return the local rtp port used by the RTP connection
6215
ccb05424c391 Fix misspelled parameter names in Doxygen documentation.
diego
parents: 6182
diff changeset
320 * @param h media file context
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
321 * @return the local port number
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
322 */
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
323
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
324 int rtp_get_local_rtp_port(URLContext *h)
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
325 {
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
326 RTPContext *s = h->priv_data;
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
327 return udp_get_local_port(s->rtp_hd);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
328 }
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
329
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
330 /**
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
331 * Return the local rtp port used by the RTP connection
6215
ccb05424c391 Fix misspelled parameter names in Doxygen documentation.
diego
parents: 6182
diff changeset
332 * @param h media file context
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
333 * @return the local port number
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
334 */
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
335
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
336 int rtp_get_local_port(URLContext *h)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
337 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
338 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
339 return udp_get_local_port(s->rtp_hd);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
340 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
341
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
342 /**
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
343 * Return the local rtcp port used by the RTP connection
6215
ccb05424c391 Fix misspelled parameter names in Doxygen documentation.
diego
parents: 6182
diff changeset
344 * @param h media file context
5964
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
345 * @return the local port number
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
346 */
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
347
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
348 int rtp_get_local_rtcp_port(URLContext *h)
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
349 {
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
350 RTPContext *s = h->priv_data;
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
351 return udp_get_local_port(s->rtcp_hd);
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
352 }
2d2273c246ce Make rtp protocol obey rfc3550
lu_zero
parents: 5896
diff changeset
353
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
354 #if (LIBAVFORMAT_VERSION_MAJOR <= 52)
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
355 /**
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
356 * Return the rtp and rtcp file handles for select() usage to wait for
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
357 * several RTP streams at the same time.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
358 * @param h media file context
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
359 */
3229
510fab17efc3 Cleanup comments and make them doxygen parsable.
lu_zero
parents: 3228
diff changeset
360
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
361 void rtp_get_file_handles(URLContext *h, int *prtp_fd, int *prtcp_fd)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
362 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
363 RTPContext *s = h->priv_data;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
364
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
365 *prtp_fd = s->rtp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
366 *prtcp_fd = s->rtcp_fd;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
367 }
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
368 #endif
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
369
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
370 static int rtp_get_file_handle(URLContext *h)
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
371 {
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
372 RTPContext *s = h->priv_data;
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
373 return s->rtp_fd;
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
374 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
375
6413
179ddd49895f Add rtp_get_rtcp_file_handle function
mstorsjo
parents: 6404
diff changeset
376 int rtp_get_rtcp_file_handle(URLContext *h) {
179ddd49895f Add rtp_get_rtcp_file_handle function
mstorsjo
parents: 6404
diff changeset
377 RTPContext *s = h->priv_data;
179ddd49895f Add rtp_get_rtcp_file_handle function
mstorsjo
parents: 6404
diff changeset
378 return s->rtcp_fd;
179ddd49895f Add rtp_get_rtcp_file_handle function
mstorsjo
parents: 6404
diff changeset
379 }
179ddd49895f Add rtp_get_rtcp_file_handle function
mstorsjo
parents: 6404
diff changeset
380
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
381 URLProtocol rtp_protocol = {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
382 "rtp",
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
383 rtp_open,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
384 rtp_read,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
385 rtp_write,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
386 NULL, /* seek */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
387 rtp_close,
4640
b34d9614b887 Add url_get_file_handle(), which is used to get the file descriptor
rbultje
parents: 4331
diff changeset
388 .url_get_file_handle = rtp_get_file_handle,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
389 };