FFmpeg
url.h
Go to the documentation of this file.
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 
24 #ifndef AVFORMAT_URL_H
25 #define AVFORMAT_URL_H
26 
27 #include "avio.h"
28 #include "libavformat/version.h"
29 
30 #include "libavutil/dict.h"
31 #include "libavutil/log.h"
32 
33 #define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */
34 #define URL_PROTOCOL_FLAG_NETWORK 2 /*< The protocol uses network */
35 
36 extern const AVClass ffurl_context_class;
37 
38 typedef struct URLContext {
39  const AVClass *av_class;
40  const struct URLProtocol *prot;
41  void *priv_data;
42  char *filename;
43  int flags;
46  int is_connected;
47  AVIOInterruptCB interrupt_callback;
48  int64_t rw_timeout;
49  const char *protocol_whitelist;
50  const char *protocol_blacklist;
52 } URLContext;
53 
54 typedef struct URLProtocol {
55  const char *name;
56  int (*url_open)( URLContext *h, const char *url, int flags);
62  int (*url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options);
63  int (*url_accept)(URLContext *s, URLContext **c);
64  int (*url_handshake)(URLContext *c);
65 
78  int (*url_read)( URLContext *h, unsigned char *buf, int size);
79  int (*url_write)(URLContext *h, const unsigned char *buf, int size);
80  int64_t (*url_seek)( URLContext *h, int64_t pos, int whence);
81  int (*url_close)(URLContext *h);
82  int (*url_read_pause)(URLContext *h, int pause);
83  int64_t (*url_read_seek)(URLContext *h, int stream_index,
84  int64_t timestamp, int flags);
85  int (*url_get_file_handle)(URLContext *h);
86  int (*url_get_multi_file_handle)(URLContext *h, int **handles,
87  int *numhandles);
88  int (*url_get_short_seek)(URLContext *h);
89  int (*url_shutdown)(URLContext *h, int flags);
90  int priv_data_size;
91  const AVClass *priv_data_class;
92  int flags;
93  int (*url_check)(URLContext *h, int mask);
94  int (*url_open_dir)(URLContext *h);
95  int (*url_read_dir)(URLContext *h, AVIODirEntry **next);
96  int (*url_close_dir)(URLContext *h);
97  int (*url_delete)(URLContext *h);
98  int (*url_move)(URLContext *h_src, URLContext *h_dst);
99  const char *default_whitelist;
100 } URLProtocol;
101 
115 int ffurl_alloc(URLContext **puc, const char *filename, int flags,
116  const AVIOInterruptCB *int_cb);
117 
126 int ffurl_connect(URLContext *uc, AVDictionary **options);
127 
146 int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags,
147  const AVIOInterruptCB *int_cb, AVDictionary **options,
148  const char *whitelist, const char* blacklist,
149  URLContext *parent);
150 
151 int ffurl_open(URLContext **puc, const char *filename, int flags,
152  const AVIOInterruptCB *int_cb, AVDictionary **options);
153 
161 int ffurl_accept(URLContext *s, URLContext **c);
162 
176 
186 int ffurl_read(URLContext *h, unsigned char *buf, int size);
187 
195 int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
196 
203 int ffurl_write(URLContext *h, const unsigned char *buf, int size);
204 
219 int64_t ffurl_seek(URLContext *h, int64_t pos, int whence);
220 
228 int ffurl_closep(URLContext **h);
229 int ffurl_close(URLContext *h);
230 
236 int64_t ffurl_size(URLContext *h);
237 
245 
251 int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles);
252 
259 
270 int ffurl_shutdown(URLContext *h, int flags);
271 
277 
278 /* udp.c */
279 int ff_udp_set_remote_url(URLContext *h, const char *uri);
281 
303 int ff_url_join(char *str, int size, const char *proto,
304  const char *authorization, const char *hostname,
305  int port, const char *fmt, ...) av_printf_format(7, 8);
306 
315 void ff_make_absolute_url(char *buf, int size, const char *base,
316  const char *rel);
317 
324 
325 const AVClass *ff_urlcontext_child_class_next(const AVClass *prev);
326 
340 const URLProtocol **ffurl_get_protocols(const char *whitelist,
341  const char *blacklist);
342 
343 #endif /* AVFORMAT_URL_H */
int ffurl_shutdown(URLContext *h, int flags)
Signal the URLContext that we are done reading or writing the stream.
Definition: avio.c:657
Buffered I/O operations.
int64_t ffurl_size(URLContext *h)
Return the filesize of the resource accessed by h, AVERROR(ENOSYS) if the operation is not supported ...
Definition: avio.c:611
int is_streamed
true if streamed (no seek possible), default = false
Definition: url.h:45
Describes single entry of the directory.
Definition: avio.h:86
int64_t rw_timeout
maximum time to wait for (network) read/write operation completion, in mcs
Definition: url.h:48
const URLProtocol ** ffurl_get_protocols(const char *whitelist, const char *blacklist)
Construct a list of protocols matching a given whitelist and/or blacklist.
Definition: protocols.c:109
int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
Return the file descriptors associated with this URL.
Definition: avio.c:633
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
Write size bytes from buf to the resource accessed by h.
Definition: avio.c:421
Public dictionary API.
int ff_url_join(char *str, int size, const char *proto, const char *authorization, const char *hostname, int port, const char *fmt,...) av_printf_format(7
Assemble a URL string from components.
Callback for checking whether to abort blocking functions.
Definition: avio.h:58
Definition: dict.c:30
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
Read as many bytes as possible (up to size), calling the read function multiple times if necessary...
Definition: avio.c:414
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
Definition: avio.c:664
int ff_udp_set_remote_url(URLContext *h, const char *uri)
If no filename is given to av_open_input_file because you want to get the local port first...
Definition: udp.c:438
int ffurl_read(URLContext *h, unsigned char *buf, int size)
Read up to size bytes from the resource accessed by h, and store the read bytes in buf...
Definition: avio.c:407
AVIODirEntry * ff_alloc_dir_entry(void)
Allocate directory entry with default values.
Definition: url.c:149
int ffurl_connect(URLContext *uc, AVDictionary **options)
Connect an URLContext that has been allocated by ffurl_alloc.
Definition: avio.c:166
Libavformat version macros.
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
Definition: avio.c:626
int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist, URLContext *parent)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
Definition: avio.c:307
int ffurl_get_short_seek(URLContext *h)
Return the current short seek threshold value for this URL.
Definition: avio.c:650
int ff_udp_get_local_port(URLContext *h)
Return the local port used by the UDP connection.
Definition: udp.c:477
Definition: url.h:54
Definition: url.h:38
Describe the class of an AVClass context structure.
Definition: log.h:67
int ffurl_alloc(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb)
Create a URLContext for accessing to the resource indicated by url, but do not initiate the connectio...
Definition: avio.c:290
int64_t ffurl_seek(URLContext *h, int64_t pos, int whence)
Change the position that will be used by the next read/write operation on the resource accessed by h...
Definition: avio.c:434
const AVClass * av_class
information for av_log().
Definition: url.h:39
char * filename
specified URL
Definition: url.h:42
int ffurl_handshake(URLContext *c)
Perform one step of the protocol handshake to accept a new client.
Definition: avio.c:234
int void ff_make_absolute_url(char *buf, int size, const char *base, const char *rel)
Convert a relative url into an absolute url, given a base url.
Definition: url.c:80
int ffurl_accept(URLContext *s, URLContext **c)
Accept an URLContext c on an URLContext s.
Definition: avio.c:226
int max_packet_size
if non zero, the stream is packetized with this max packet size
Definition: url.h:44
int min_packet_size
if non zero, the stream is packetized with this min packet size
Definition: url.h:51
int ffurl_closep(URLContext **h)
Close the resource accessed by the URLContext h, and free the memory used by it.
Definition: avio.c:444