diff options
author | Lukasz Marek | 2014-10-19 15:39:06 +0200 |
---|---|---|
committer | Lukasz Marek | 2014-10-22 22:37:40 +0200 |
commit | f524d2e47c055ce304d76bc87da9efb72e376eac (patch) | |
tree | 1a23f208333868e3a0c9a595860e2b88c9536647 /ffserver_config.h | |
parent | 0e8bfd3c934768f9812dd20d71fa4709de54186d (diff) |
ffserver: move configuration code to separate file
This commit doesn't change any existing logic.
It moves ffserver configuration related code to separate file.
It intends to make maintaining easier.
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
Diffstat (limited to 'ffserver_config.h')
-rw-r--r-- | ffserver_config.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/ffserver_config.h b/ffserver_config.h new file mode 100644 index 0000000000..b19b3fe95a --- /dev/null +++ b/ffserver_config.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef FFSERVER_CONFIG_H +#define FFSERVER_CONFIG_H + +#include "libavutil/dict.h" +#include "libavformat/avformat.h" +#include "libavformat/network.h" + +#define FFSERVER_MAX_STREAMS 20 + +/* each generated stream is described here */ +enum FFServerStreamType { + STREAM_TYPE_LIVE, + STREAM_TYPE_STATUS, + STREAM_TYPE_REDIRECT, +}; + +enum FFServerIPAddressAction { + IP_ALLOW = 1, + IP_DENY, +}; + +typedef struct FFServerIPAddressACL { + struct FFServerIPAddressACL *next; + enum FFServerIPAddressAction action; + /* These are in host order */ + struct in_addr first; + struct in_addr last; +} FFServerIPAddressACL; + +/* description of each stream of the ffserver.conf file */ +typedef struct FFServerStream { + enum FFServerStreamType stream_type; + char filename[1024]; /* stream filename */ + struct FFServerStream *feed; /* feed we are using (can be null if coming from file) */ + AVDictionary *in_opts; /* input parameters */ + AVDictionary *metadata; /* metadata to set on the stream */ + AVInputFormat *ifmt; /* if non NULL, force input format */ + AVOutputFormat *fmt; + FFServerIPAddressACL *acl; + char dynamic_acl[1024]; + int nb_streams; + int prebuffer; /* Number of milliseconds early to start */ + int64_t max_time; /* Number of milliseconds to run */ + int send_on_key; + AVStream *streams[FFSERVER_MAX_STREAMS]; + int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */ + char feed_filename[1024]; /* file name of the feed storage, or + input file name for a stream */ + pid_t pid; /* Of ffmpeg process */ + time_t pid_start; /* Of ffmpeg process */ + char **child_argv; + struct FFServerStream *next; + unsigned bandwidth; /* bandwidth, in kbits/s */ + /* RTSP options */ + char *rtsp_option; + /* multicast specific */ + int is_multicast; + struct in_addr multicast_ip; + int multicast_port; /* first port used for multicast */ + int multicast_ttl; + int loop; /* if true, send the stream in loops (only meaningful if file) */ + + /* feed specific */ + int feed_opened; /* true if someone is writing to the feed */ + int is_feed; /* true if it is a feed */ + int readonly; /* True if writing is prohibited to the file */ + int truncate; /* True if feeder connection truncate the feed file */ + int conns_served; + int64_t bytes_served; + int64_t feed_max_size; /* maximum storage size, zero means unlimited */ + int64_t feed_write_index; /* current write position in feed (it wraps around) */ + int64_t feed_size; /* current size of feed */ + struct FFServerStream *next_feed; +} FFServerStream; + +typedef struct FFServerConfig { + char *filename; + FFServerStream *first_feed; /* contains only feeds */ + FFServerStream *first_stream; /* contains all streams, including feeds */ + unsigned int nb_max_http_connections; + unsigned int nb_max_connections; + uint64_t max_bandwidth; + int debug; + char logfilename[1024]; + struct sockaddr_in http_addr; + struct sockaddr_in rtsp_addr; + +} FFServerConfig; + +void ffserver_get_arg(char *buf, int buf_size, const char **pp); + +void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream* feed, + FFServerIPAddressACL *ext_acl, + const char *p, const char *filename, int line_num); + +int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config); + +#endif /* FFSERVER_CONFIG_H */ |