FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ffserver_config.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
3  *
4  * This file is part of FFmpeg.
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #ifndef FFTOOLS_FFSERVER_CONFIG_H
22 #define FFTOOLS_FFSERVER_CONFIG_H
23 
24 #define FFM_PACKET_SIZE 4096
25 
26 #include "libavutil/dict.h"
27 #include "libavformat/avformat.h"
28 #include "libavformat/network.h"
29 
30 #define FFSERVER_MAX_STREAMS 20
31 
32 /* each generated stream is described here */
37 };
38 
40  IP_ALLOW = 1,
42 };
43 
44 typedef struct FFServerIPAddressACL {
47  /* These are in host order */
48  struct in_addr first;
49  struct in_addr last;
51 
52 /**
53  * This holds the stream parameters for an AVStream, it cannot be a AVStream
54  * because AVStreams cannot be instanciated without a AVFormatContext, especially
55  * not outside libavformat.
56  *
57  * The fields of this struct have the same semantics as the fields of an AVStream.
58  */
59 typedef struct LayeredAVStream {
60  int index;
61  int id;
69 
70 /* description of each stream of the ffserver.conf file */
71 typedef struct FFServerStream {
73  char filename[1024]; /* stream filename */
74  struct FFServerStream *feed; /* feed we are using (can be null if coming from file) */
75  AVDictionary *in_opts; /* input parameters */
76  AVDictionary *metadata; /* metadata to set on the stream */
77  AVInputFormat *ifmt; /* if non NULL, force input format */
80  char dynamic_acl[1024];
82  int prebuffer; /* Number of milliseconds early to start */
83  int64_t max_time; /* Number of milliseconds to run */
86  int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */
87  char feed_filename[1024]; /* file name of the feed storage, or
88  input file name for a stream */
89  pid_t pid; /* Of ffmpeg process */
90  time_t pid_start; /* Of ffmpeg process */
91  char **child_argv;
93  unsigned bandwidth; /* bandwidth, in kbits/s */
94  /* RTSP options */
95  char *rtsp_option;
96  /* multicast specific */
98  struct in_addr multicast_ip;
99  int multicast_port; /* first port used for multicast */
101  int loop; /* if true, send the stream in loops (only meaningful if file) */
102  char single_frame; /* only single frame */
103 
104  /* feed specific */
105  int feed_opened; /* true if someone is writing to the feed */
106  int is_feed; /* true if it is a feed */
107  int readonly; /* True if writing is prohibited to the file */
108  int truncate; /* True if feeder connection truncate the feed file */
110  int64_t bytes_served;
111  int64_t feed_max_size; /* maximum storage size, zero means unlimited */
112  int64_t feed_write_index; /* current write position in feed (it wraps around) */
113  int64_t feed_size; /* current size of feed */
116 
117 typedef struct FFServerConfig {
118  char *filename;
119  FFServerStream *first_feed; /* contains only feeds */
120  FFServerStream *first_stream; /* contains all streams, including feeds */
122  unsigned int nb_max_connections;
123  uint64_t max_bandwidth;
124  int debug;
125  int bitexact;
126  char logfilename[1024];
127  struct sockaddr_in http_addr;
128  struct sockaddr_in rtsp_addr;
129  int errors;
130  int warnings;
132  // Following variables MUST NOT be used outside configuration parsing code.
135  AVDictionary *video_opts; /* AVOptions for video encoder */
136  AVDictionary *audio_opts; /* AVOptions for audio encoder */
137  AVCodecContext *dummy_actx; /* Used internally to test audio AVOptions. */
138  AVCodecContext *dummy_vctx; /* Used internally to test video AVOptions. */
139  int no_audio;
140  int no_video;
141  int line_num;
144 
145 void ffserver_get_arg(char *buf, int buf_size, const char **pp);
146 
148  FFServerIPAddressACL *ext_acl,
149  const char *p, const char *filename, int line_num);
150 
151 int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config);
152 
153 void ffserver_free_child_args(void *argsp);
154 
155 #endif /* FFTOOLS_FFSERVER_CONFIG_H */
struct in_addr last
struct sockaddr_in http_addr
FFServerIPAddressACL * acl
FFServerStreamType
unsigned int nb_max_connections
static FFServerConfig config
Definition: ffserver.c:193
FFServerIPAddressAction
AVInputFormat * ifmt
This struct describes the properties of an encoded stream.
Definition: avcodec.h:3830
AVCodecContext * dummy_vctx
AVCodecContext * dummy_actx
struct FFServerStream * next
Public dictionary API.
AVOutputFormat * fmt
enum AVCodecID guessed_video_codec_id
AVRational sample_aspect_ratio
uint64_t max_bandwidth
enum AVCodecID guessed_audio_codec_id
AVCodecParameters * codecpar
char logfilename[1024]
int feed_streams[FFSERVER_MAX_STREAMS]
AVDictionary * metadata
void ffserver_free_child_args(void *argsp)
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:215
#define FFSERVER_MAX_STREAMS
enum FFServerStreamType stream_type
char dynamic_acl[1024]
char feed_filename[1024]
struct FFServerStream * next_feed
AVCodecContext * codec
struct FFServerIPAddressACL * next
AVDictionary * video_opts
int64_t feed_write_index
void ffserver_get_arg(char *buf, int buf_size, const char **pp)
char filename[1024]
main external API structure.
Definition: avcodec.h:1502
AVDictionary * audio_opts
struct sockaddr_in rtsp_addr
void * buf
Definition: avisynth_c.h:690
AVRational time_base
Rational number (pair of numerator and denominator).
Definition: rational.h:58
This holds the stream parameters for an AVStream, it cannot be a AVStream because AVStreams cannot be...
LayeredAVStream * streams[FFSERVER_MAX_STREAMS]
unsigned bandwidth
FFServerStream * first_feed
AVDictionary * in_opts
struct FFServerStream * feed
Main libavformat public API header.
char * recommended_encoder_configuration
struct in_addr multicast_ip
FFServerStream * first_stream
void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream *feed, FFServerIPAddressACL *ext_acl, const char *p, const char *filename, int line_num)
unsigned int nb_max_http_connections
int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config)
struct in_addr first
enum FFServerIPAddressAction action