Libav
url.h
Go to the documentation of this file.
1 /*
2  * This file is part of Libav.
3  *
4  * Libav 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  * Libav 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 Libav; 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;
44  const struct URLProtocol **protocols;
45  void *priv_data;
46  char *filename;
47  int flags;
52  int64_t rw_timeout;
53 } URLContext;
54 
55 typedef struct URLProtocol {
56  const char *name;
57  int (*url_open)( URLContext *h, const char *url, int flags);
63  int (*url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options);
64 
77  int (*url_read)( URLContext *h, unsigned char *buf, int size);
78  int (*url_write)(URLContext *h, const unsigned char *buf, int size);
79  int64_t (*url_seek)( URLContext *h, int64_t pos, int whence);
80  int (*url_close)(URLContext *h);
81  int (*url_read_pause)(URLContext *h, int pause);
82  int64_t (*url_read_seek)(URLContext *h, int stream_index,
83  int64_t timestamp, int flags);
84  int (*url_get_file_handle)(URLContext *h);
85  int (*url_get_multi_file_handle)(URLContext *h, int **handles,
86  int *numhandles);
87  int (*url_shutdown)(URLContext *h, int flags);
90  int flags;
91  int (*url_check)(URLContext *h, int mask);
92 } URLProtocol;
93 
110 int ffurl_alloc(URLContext **puc, const char *filename, int flags,
111  const AVIOInterruptCB *int_cb,
112  const URLProtocol **protocols);
113 
123 
145 int ffurl_open(URLContext **puc, const char *filename, int flags,
147  const URLProtocol **protocols, URLContext *parent);
148 
158 int ffurl_read(URLContext *h, unsigned char *buf, int size);
159 
167 int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
168 
175 int ffurl_write(URLContext *h, const unsigned char *buf, int size);
176 
191 int64_t ffurl_seek(URLContext *h, int64_t pos, int whence);
192 
200 int ffurl_close(URLContext *h);
201 
207 int64_t ffurl_size(URLContext *h);
208 
216 
222 int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles);
223 
234 int ffurl_shutdown(URLContext *h, int flags);
235 
241 
242 /* udp.c */
243 int ff_udp_set_remote_url(URLContext *h, const char *uri);
245 
267 int ff_url_join(char *str, int size, const char *proto,
268  const char *authorization, const char *hostname,
269  int port, const char *fmt, ...) av_printf_format(7, 8);
270 
271 /*
272  * Convert a relative url into an absolute url, given a base url.
273  *
274  * @param buf the buffer where output absolute url is written
275  * @param size the size of buf
276  * @param base the base url, may be equal to buf.
277  * @param rel the new url, which is interpreted relative to base
278  */
279 void ff_make_absolute_url(char *buf, int size, const char *base,
280  const char *rel);
281 
283 
297 const URLProtocol **ffurl_get_protocols(const char *whitelist,
298  const char *blacklist);
299 
300 #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:367
Buffered I/O operations.
int size
int flags
Definition: url.h:90
const AVClass ffurl_context_class
Definition: avio.c:56
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:330
int is_streamed
true if streamed (no seek possible), default = false
Definition: url.h:49
AVIOInterruptCB interrupt_callback
Definition: url.h:51
int64_t rw_timeout
maximum time to wait for (network) read/write operation completion, in microseconds ...
Definition: url.h:52
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:98
int flags
Definition: url.h:47
int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
Return the file descriptors associated with this URL.
Definition: avio.c:352
const AVClass * priv_data_class
Definition: url.h:89
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:257
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.
const OptionDef options[]
Definition: avconv_opt.c:2447
Callback for checking whether to abort blocking functions.
Definition: avio.h:51
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:250
static const uint16_t mask[17]
Definition: lzw.c:38
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
Definition: avio.c:374
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:362
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:243
#define av_printf_format(fmtpos, attrpos)
Definition: attributes.h:117
const AVIOInterruptCB int_cb
Definition: avconv.c:140
int ffurl_connect(URLContext *uc, AVDictionary **options)
Connect an URLContext that has been allocated by ffurl_alloc.
Definition: avio.c:119
Libavformat version macros.
int ffurl_alloc(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, const URLProtocol **protocols)
Create a URLContext for accessing to the resource indicated by url, but do not initiate the connectio...
Definition: avio.c:143
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
Definition: avio.c:345
int is_connected
Definition: url.h:50
int ff_udp_get_local_port(URLContext *h)
Return the local port used by the UDP connection.
Definition: udp.c:401
Definition: url.h:38
Describe the class of an AVClass context structure.
Definition: log.h:34
void * priv_data
Definition: url.h:45
const char * name
Definition: url.h:56
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:270
const AVClass * av_class
information for av_log().
Definition: url.h:39
int ffurl_close(URLContext *h)
Close the resource accessed by the URLContext h, and free the memory used by it.
Definition: avio.c:280
const struct URLProtocol ** protocols
A NULL-terminated list of protocols usable by the child contexts.
Definition: url.h:44
const struct URLProtocol * prot
Definition: url.h:40
char * filename
specified URL
Definition: url.h:46
int void ff_make_absolute_url(char *buf, int size, const char *base, const char *rel)
Definition: url.c:80
int ffurl_open(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const URLProtocol **protocols, URLContext *parent)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
Definition: avio.c:175
int max_packet_size
if non zero, the stream is packetized with this max packet size
Definition: url.h:48
int priv_data_size
Definition: url.h:88
const AVClass * ff_urlcontext_child_class_next(const AVClass *prev)
Definition: protocols.c:63