]> git.sesse.net Git - ffmpeg/blob - libavformat/protocols.c
Merge commit '0fa00d05911aa8043ecad8dead4a73cab7faadf6'
[ffmpeg] / libavformat / protocols.c
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #include "config.h"
20
21 #include "url.h"
22
23 extern const URLProtocol ff_async_protocol;
24 extern const URLProtocol ff_bluray_protocol;
25 extern const URLProtocol ff_cache_protocol;
26 extern const URLProtocol ff_concat_protocol;
27 extern const URLProtocol ff_crypto_protocol;
28 extern const URLProtocol ff_data_protocol;
29 extern const URLProtocol ff_ffrtmpcrypt_protocol;
30 extern const URLProtocol ff_ffrtmphttp_protocol;
31 extern const URLProtocol ff_file_protocol;
32 extern const URLProtocol ff_ftp_protocol;
33 extern const URLProtocol ff_gopher_protocol;
34 extern const URLProtocol ff_hls_protocol;
35 extern const URLProtocol ff_http_protocol;
36 extern const URLProtocol ff_httpproxy_protocol;
37 extern const URLProtocol ff_https_protocol;
38 extern const URLProtocol ff_icecast_protocol;
39 extern const URLProtocol ff_mmsh_protocol;
40 extern const URLProtocol ff_mmst_protocol;
41 extern const URLProtocol ff_md5_protocol;
42 extern const URLProtocol ff_pipe_protocol;
43 extern const URLProtocol ff_rtmp_protocol;
44 extern const URLProtocol ff_rtmpe_protocol;
45 extern const URLProtocol ff_rtmps_protocol;
46 extern const URLProtocol ff_rtmpt_protocol;
47 extern const URLProtocol ff_rtmpte_protocol;
48 extern const URLProtocol ff_rtmpts_protocol;
49 extern const URLProtocol ff_rtp_protocol;
50 extern const URLProtocol ff_sctp_protocol;
51 extern const URLProtocol ff_srtp_protocol;
52 extern const URLProtocol ff_subfile_protocol;
53 extern const URLProtocol ff_tcp_protocol;
54 extern const URLProtocol ff_tls_gnutls_protocol;
55 extern const URLProtocol ff_tls_schannel_protocol;
56 extern const URLProtocol ff_tls_securetransport_protocol;
57 extern const URLProtocol ff_tls_openssl_protocol;
58 extern const URLProtocol ff_udp_protocol;
59 extern const URLProtocol ff_udplite_protocol;
60 extern const URLProtocol ff_unix_protocol;
61 extern const URLProtocol ff_librtmp_protocol;
62 extern const URLProtocol ff_librtmpe_protocol;
63 extern const URLProtocol ff_librtmps_protocol;
64 extern const URLProtocol ff_librtmpt_protocol;
65 extern const URLProtocol ff_librtmpte_protocol;
66 extern const URLProtocol ff_libssh_protocol;
67 extern const URLProtocol ff_libsmbclient_protocol;
68
69 const URLProtocol *ff_url_protocols[] = {
70 #if CONFIG_ASYNC_PROTOCOL
71     &ff_async_protocol,
72 #endif
73 #if CONFIG_BLURAY_PROTOCOL
74     &ff_bluray_protocol,
75 #endif
76 #if CONFIG_CACHE_PROTOCOL
77     &ff_cache_protocol,
78 #endif
79 #if CONFIG_CONCAT_PROTOCOL
80     &ff_concat_protocol,
81 #endif
82 #if CONFIG_CRYPTO_PROTOCOL
83     &ff_crypto_protocol,
84 #endif
85 #if CONFIG_DATA_PROTOCOL
86     &ff_data_protocol,
87 #endif
88 #if CONFIG_FFRTMPCRYPT_PROTOCOL
89     &ff_ffrtmpcrypt_protocol,
90 #endif
91 #if CONFIG_FFRTMPHTTP_PROTOCOL
92     &ff_ffrtmphttp_protocol,
93 #endif
94 #if CONFIG_FILE_PROTOCOL
95     &ff_file_protocol,
96 #endif
97 #if CONFIG_FTP_PROTOCOL
98     &ff_ftp_protocol,
99 #endif
100 #if CONFIG_GOPHER_PROTOCOL
101     &ff_gopher_protocol,
102 #endif
103 #if CONFIG_HLS_PROTOCOL
104     &ff_hls_protocol,
105 #endif
106 #if CONFIG_HTTP_PROTOCOL
107     &ff_http_protocol,
108 #endif
109 #if CONFIG_HTTPPROXY_PROTOCOL
110     &ff_httpproxy_protocol,
111 #endif
112 #if CONFIG_HTTPS_PROTOCOL
113     &ff_https_protocol,
114 #endif
115 #if CONFIG_ICECAST_PROTOCOL
116     &ff_icecast_protocol,
117 #endif
118 #if CONFIG_MMSH_PROTOCOL
119     &ff_mmsh_protocol,
120 #endif
121 #if CONFIG_MMST_PROTOCOL
122     &ff_mmst_protocol,
123 #endif
124 #if CONFIG_MD5_PROTOCOL
125     &ff_md5_protocol,
126 #endif
127 #if CONFIG_PIPE_PROTOCOL
128     &ff_pipe_protocol,
129 #endif
130 #if CONFIG_RTMP_PROTOCOL
131     &ff_rtmp_protocol,
132 #endif
133 #if CONFIG_RTMPE_PROTOCOL
134     &ff_rtmpe_protocol,
135 #endif
136 #if CONFIG_RTMPS_PROTOCOL
137     &ff_rtmps_protocol,
138 #endif
139 #if CONFIG_RTMPT_PROTOCOL
140     &ff_rtmpt_protocol,
141 #endif
142 #if CONFIG_RTMPTE_PROTOCOL
143     &ff_rtmpte_protocol,
144 #endif
145 #if CONFIG_RTMPTS_PROTOCOL
146     &ff_rtmpts_protocol,
147 #endif
148 #if CONFIG_RTP_PROTOCOL
149     &ff_rtp_protocol,
150 #endif
151 #if CONFIG_SCTP_PROTOCOL
152     &ff_sctp_protocol,
153 #endif
154 #if CONFIG_SRTP_PROTOCOL
155     &ff_srtp_protocol,
156 #endif
157 #if CONFIG_SUBFILE_PROTOCOL
158     &ff_subfile_protocol,
159 #endif
160 #if CONFIG_TCP_PROTOCOL
161     &ff_tcp_protocol,
162 #endif
163 #if CONFIG_TLS_GNUTLS_PROTOCOL
164     &ff_tls_gnutls_protocol,
165 #endif
166 #if CONFIG_TLS_SCHANNEL_PROTOCOL
167     &ff_tls_schannel_protocol,
168 #endif
169 #if CONFIG_TLS_SECURETRANSPORT_PROTOCOL
170     &ff_tls_securetransport_protocol,
171 #endif
172 #if CONFIG_TLS_OPENSSL_PROTOCOL
173     &ff_tls_openssl_protocol,
174 #endif
175 #if CONFIG_UDP_PROTOCOL
176     &ff_udp_protocol,
177 #endif
178 #if CONFIG_UDPLITE_PROTOCOL
179     &ff_udplite_protocol,
180 #endif
181 #if CONFIG_UNIX_PROTOCOL
182     &ff_unix_protocol,
183 #endif
184
185     /* external libraries */
186 #if CONFIG_LIBRTMP_PROTOCOL
187     &ff_librtmp_protocol,
188 #endif
189 #if CONFIG_LIBRTMPE_PROTOCOL
190     &ff_librtmpe_protocol,
191 #endif
192 #if CONFIG_LIBRTMPS_PROTOCOL
193     &ff_librtmps_protocol,
194 #endif
195 #if CONFIG_LIBRTMPT_PROTOCOL
196     &ff_librtmpt_protocol,
197 #endif
198 #if CONFIG_LIBRTMPTE_PROTOCOL
199     &ff_librtmpte_protocol,
200 #endif
201 #if CONFIG_LIBSSH_PROTOCOL
202     &ff_libssh_protocol,
203 #endif
204 #if CONFIG_LIBSMBCLIENT_PROTOCOL
205     &ff_libsmbclient_protocol,
206 #endif
207     NULL,
208 };
209
210 const char *avio_enum_protocols(void **opaque, int output)
211 {
212     const URLProtocol **p = *opaque;
213
214     p = p ? p + 1 : ff_url_protocols;
215     *opaque = p;
216     if (!*p) {
217         *opaque = NULL;
218         return NULL;
219     }
220     if ((output && (*p)->url_write) || (!output && (*p)->url_read))
221         return (*p)->name;
222     return avio_enum_protocols(opaque, output);
223 }