mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-29 11:42:02 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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;
 | |
|     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 */
 | 
