Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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 FFSERVER_CONFIG_H
  22. #define FFSERVER_CONFIG_H
  23.  
  24. #include "libavutil/dict.h"
  25. #include "libavformat/avformat.h"
  26. #include "libavformat/network.h"
  27.  
  28. #define FFSERVER_MAX_STREAMS 20
  29.  
  30. /* each generated stream is described here */
  31. enum FFServerStreamType {
  32.     STREAM_TYPE_LIVE,
  33.     STREAM_TYPE_STATUS,
  34.     STREAM_TYPE_REDIRECT,
  35. };
  36.  
  37. enum FFServerIPAddressAction {
  38.     IP_ALLOW = 1,
  39.     IP_DENY,
  40. };
  41.  
  42. typedef struct FFServerIPAddressACL {
  43.     struct FFServerIPAddressACL *next;
  44.     enum FFServerIPAddressAction action;
  45.     /* These are in host order */
  46.     struct in_addr first;
  47.     struct in_addr last;
  48. } FFServerIPAddressACL;
  49.  
  50. /* description of each stream of the ffserver.conf file */
  51. typedef struct FFServerStream {
  52.     enum FFServerStreamType stream_type;
  53.     char filename[1024];          /* stream filename */
  54.     struct FFServerStream *feed;  /* feed we are using (can be null if coming from file) */
  55.     AVDictionary *in_opts;        /* input parameters */
  56.     AVDictionary *metadata;       /* metadata to set on the stream */
  57.     AVInputFormat *ifmt;          /* if non NULL, force input format */
  58.     AVOutputFormat *fmt;
  59.     FFServerIPAddressACL *acl;
  60.     char dynamic_acl[1024];
  61.     int nb_streams;
  62.     int prebuffer;                /* Number of milliseconds early to start */
  63.     int64_t max_time;             /* Number of milliseconds to run */
  64.     int send_on_key;
  65.     AVStream *streams[FFSERVER_MAX_STREAMS];
  66.     int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */
  67.     char feed_filename[1024];     /* file name of the feed storage, or
  68.                                      input file name for a stream */
  69.     pid_t pid;                    /* Of ffmpeg process */
  70.     time_t pid_start;             /* Of ffmpeg process */
  71.     char **child_argv;
  72.     struct FFServerStream *next;
  73.     unsigned bandwidth;           /* bandwidth, in kbits/s */
  74.     /* RTSP options */
  75.     char *rtsp_option;
  76.     /* multicast specific */
  77.     int is_multicast;
  78.     struct in_addr multicast_ip;
  79.     int multicast_port;           /* first port used for multicast */
  80.     int multicast_ttl;
  81.     int loop;                     /* if true, send the stream in loops (only meaningful if file) */
  82.     char single_frame;            /* only single frame */
  83.  
  84.     /* feed specific */
  85.     int feed_opened;              /* true if someone is writing to the feed */
  86.     int is_feed;                  /* true if it is a feed */
  87.     int readonly;                 /* True if writing is prohibited to the file */
  88.     int truncate;                 /* True if feeder connection truncate the feed file */
  89.     int conns_served;
  90.     int64_t bytes_served;
  91.     int64_t feed_max_size;        /* maximum storage size, zero means unlimited */
  92.     int64_t feed_write_index;     /* current write position in feed (it wraps around) */
  93.     int64_t feed_size;            /* current size of feed */
  94.     struct FFServerStream *next_feed;
  95. } FFServerStream;
  96.  
  97. typedef struct FFServerConfig {
  98.     char *filename;
  99.     FFServerStream *first_feed;   /* contains only feeds */
  100.     FFServerStream *first_stream; /* contains all streams, including feeds */
  101.     unsigned int nb_max_http_connections;
  102.     unsigned int nb_max_connections;
  103.     uint64_t max_bandwidth;
  104.     int debug;
  105.     char logfilename[1024];
  106.     struct sockaddr_in http_addr;
  107.     struct sockaddr_in rtsp_addr;
  108.     int errors;
  109.     int warnings;
  110.     int use_defaults;
  111.     // Following variables MUST NOT be used outside configuration parsing code.
  112.     enum AVCodecID guessed_audio_codec_id;
  113.     enum AVCodecID guessed_video_codec_id;
  114.     AVDictionary *video_opts;     /* AVOptions for video encoder */
  115.     AVDictionary *audio_opts;     /* AVOptions for audio encoder */
  116.     AVCodecContext *dummy_actx;   /* Used internally to test audio AVOptions. */
  117.     AVCodecContext *dummy_vctx;   /* Used internally to test video AVOptions. */
  118.     int no_audio;
  119.     int no_video;
  120.     int line_num;
  121.     int stream_use_defaults;
  122. } FFServerConfig;
  123.  
  124. void ffserver_get_arg(char *buf, int buf_size, const char **pp);
  125.  
  126. void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream* feed,
  127.                             FFServerIPAddressACL *ext_acl,
  128.                             const char *p, const char *filename, int line_num);
  129.  
  130. int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config);
  131.  
  132. void ffserver_free_child_args(void *argsp);
  133.  
  134. #endif /* FFSERVER_CONFIG_H */
  135.