2 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #ifndef FFSERVER_CONFIG_H
22 #define FFSERVER_CONFIG_H
24 #define FFM_PACKET_SIZE 4096
26 #include "libavutil/dict.h"
27 #include "libavformat/avformat.h"
28 #include "libavformat/network.h"
30 #define FFSERVER_MAX_STREAMS 20
32 /* each generated stream is described here */
33 enum FFServerStreamType {
39 enum FFServerIPAddressAction {
44 typedef struct FFServerIPAddressACL {
45 struct FFServerIPAddressACL *next;
46 enum FFServerIPAddressAction action;
47 /* These are in host order */
50 } FFServerIPAddressACL;
52 /* description of each stream of the ffserver.conf file */
53 typedef struct FFServerStream {
54 enum FFServerStreamType stream_type;
55 char filename[1024]; /* stream filename */
56 struct FFServerStream *feed; /* feed we are using (can be null if coming from file) */
57 AVDictionary *in_opts; /* input parameters */
58 AVDictionary *metadata; /* metadata to set on the stream */
59 AVInputFormat *ifmt; /* if non NULL, force input format */
61 FFServerIPAddressACL *acl;
62 char dynamic_acl[1024];
64 int prebuffer; /* Number of milliseconds early to start */
65 int64_t max_time; /* Number of milliseconds to run */
67 AVStream *streams[FFSERVER_MAX_STREAMS];
68 int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */
69 char feed_filename[1024]; /* file name of the feed storage, or
70 input file name for a stream */
71 pid_t pid; /* Of ffmpeg process */
72 time_t pid_start; /* Of ffmpeg process */
74 struct FFServerStream *next;
75 unsigned bandwidth; /* bandwidth, in kbits/s */
78 /* multicast specific */
80 struct in_addr multicast_ip;
81 int multicast_port; /* first port used for multicast */
83 int loop; /* if true, send the stream in loops (only meaningful if file) */
84 char single_frame; /* only single frame */
87 int feed_opened; /* true if someone is writing to the feed */
88 int is_feed; /* true if it is a feed */
89 int readonly; /* True if writing is prohibited to the file */
90 int truncate; /* True if feeder connection truncate the feed file */
93 int64_t feed_max_size; /* maximum storage size, zero means unlimited */
94 int64_t feed_write_index; /* current write position in feed (it wraps around) */
95 int64_t feed_size; /* current size of feed */
96 struct FFServerStream *next_feed;
99 typedef struct FFServerConfig {
101 FFServerStream *first_feed; /* contains only feeds */
102 FFServerStream *first_stream; /* contains all streams, including feeds */
103 unsigned int nb_max_http_connections;
104 unsigned int nb_max_connections;
105 uint64_t max_bandwidth;
107 char logfilename[1024];
108 struct sockaddr_in http_addr;
109 struct sockaddr_in rtsp_addr;
113 // Following variables MUST NOT be used outside configuration parsing code.
114 enum AVCodecID guessed_audio_codec_id;
115 enum AVCodecID guessed_video_codec_id;
116 AVDictionary *video_opts; /* AVOptions for video encoder */
117 AVDictionary *audio_opts; /* AVOptions for audio encoder */
118 AVCodecContext *dummy_actx; /* Used internally to test audio AVOptions. */
119 AVCodecContext *dummy_vctx; /* Used internally to test video AVOptions. */
123 int stream_use_defaults;
126 void ffserver_get_arg(char *buf, int buf_size, const char **pp);
128 void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream* feed,
129 FFServerIPAddressACL *ext_acl,
130 const char *p, const char *filename, int line_num);
132 int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config);
134 void ffserver_free_child_args(void *argsp);
136 #endif /* FFSERVER_CONFIG_H */