/* * 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) */ char single_frame; /* only single frame */ /* 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; int errors; int warnings; int use_defaults; // Following variables MUST NOT be used outside configuration parsing code. enum AVCodecID guessed_audio_codec_id; enum AVCodecID guessed_video_codec_id; AVDictionary *video_opts; /* AVOptions for video encoder */ AVDictionary *audio_opts; /* AVOptions for audio encoder */ AVCodecContext *dummy_actx; /* Used internally to test audio AVOptions. */ AVCodecContext *dummy_vctx; /* Used internally to test video AVOptions. */ int no_audio; int no_video; int line_num; int stream_use_defaults; } 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); void ffserver_free_child_args(void *argsp); #endif /* FFSERVER_CONFIG_H */