ffserver.c File Reference

#include "config.h"
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include "libavformat/avformat.h"
#include "libavformat/network.h"
#include "libavformat/os_support.h"
#include "libavformat/rtpdec.h"
#include "libavformat/rtsp.h"
#include "libavutil/avstring.h"
#include "libavutil/random.h"
#include "libavutil/intreadwrite.h"
#include "libavcodec/opt.h"
#include <stdarg.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>
#include <sys/wait.h>
#include <signal.h>
#include "cmdutils.h"

Go to the source code of this file.

Data Structures

struct  RTSPActionServerSetup
struct  DataRateData
struct  HTTPContext
struct  IPAddressACL
struct  FFStream
struct  FeedData

Defines

#define _XOPEN_SOURCE   600
#define closesocket   close
#define IOBUFFER_INIT_SIZE   8192
#define HTTP_REQUEST_TIMEOUT   (15 * 1000)
#define RTSP_REQUEST_TIMEOUT   (3600 * 24 * 1000)
#define SYNC_TIMEOUT   (10 * 1000)
#define CHECK_CODEC(x)   (ccf->x != ccs->x)

Enumerations

enum  HTTPState {
  HTTPSTATE_WAIT_REQUEST, HTTPSTATE_SEND_HEADER, HTTPSTATE_SEND_DATA_HEADER, HTTPSTATE_SEND_DATA,
  HTTPSTATE_SEND_DATA_TRAILER, HTTPSTATE_RECEIVE_DATA, HTTPSTATE_WAIT_FEED, HTTPSTATE_READY,
  RTSPSTATE_WAIT_REQUEST, RTSPSTATE_SEND_REPLY, RTSPSTATE_SEND_PACKET
}
enum  StreamType { STREAM_TYPE_LIVE, STREAM_TYPE_STATUS, STREAM_TYPE_REDIRECT }
enum  IPAddressAction { IP_ALLOW = 1, IP_DENY }
enum  RedirType {
  REDIR_NONE, REDIR_ASX, REDIR_RAM, REDIR_ASF,
  REDIR_RTSP, REDIR_SDP
}

Functions

static void new_connection (int server_fd, int is_rtsp)
static void close_connection (HTTPContext *c)
static int handle_connection (HTTPContext *c)
static int http_parse_request (HTTPContext *c)
static int http_send_data (HTTPContext *c)
static void compute_status (HTTPContext *c)
static int open_input_stream (HTTPContext *c, const char *info)
static int http_start_receive_data (HTTPContext *c)
static int http_receive_data (HTTPContext *c)
static int rtsp_parse_request (HTTPContext *c)
static void rtsp_cmd_describe (HTTPContext *c, const char *url)
static void rtsp_cmd_options (HTTPContext *c, const char *url)
static void rtsp_cmd_setup (HTTPContext *c, const char *url, RTSPMessageHeader *h)
static void rtsp_cmd_play (HTTPContext *c, const char *url, RTSPMessageHeader *h)
static void rtsp_cmd_pause (HTTPContext *c, const char *url, RTSPMessageHeader *h)
static void rtsp_cmd_teardown (HTTPContext *c, const char *url, RTSPMessageHeader *h)
static int prepare_sdp_description (FFStream *stream, uint8_t **pbuffer, struct in_addr my_ip)
static HTTPContextrtp_new_connection (struct sockaddr_in *from_addr, FFStream *stream, const char *session_id, enum RTSPLowerTransport rtp_protocol)
static int rtp_new_av_stream (HTTPContext *c, int stream_index, struct sockaddr_in *dest_addr, HTTPContext *rtsp_c)
static char * ctime1 (char *buf2)
static void http_vlog (const char *fmt, va_list vargs)
void http_log (const char *fmt,...)
static void http_av_log (void *ptr, int level, const char *fmt, va_list vargs)
static void log_connection (HTTPContext *c)
static void update_datarate (DataRateData *drd, int64_t count)
static int compute_datarate (DataRateData *drd, int64_t count)
static void start_children (FFStream *feed)
static int socket_open_listen (struct sockaddr_in *my_addr)
static void start_multicast (void)
static int http_server (void)
static void start_wait_request (HTTPContext *c, int is_rtsp)
static int extract_rates (char *rates, int ratelen, const char *request)
static int find_stream_in_feed (FFStream *feed, AVCodecContext *codec, int bit_rate)
static int modify_current_stream (HTTPContext *c, char *rates)
static void do_switch_stream (HTTPContext *c, int i)
static void skip_spaces (const char **pp)
static void get_word (char *buf, int buf_size, const char **pp)
static int validate_acl (FFStream *stream, HTTPContext *c)
static void compute_real_filename (char *filename, int max_size)
static void fmt_bytecount (ByteIOContext *pb, int64_t count)
static void open_parser (AVFormatContext *s, int i)
static int64_t get_server_clock (HTTPContext *c)
static int64_t get_packet_send_clock (HTTPContext *c)
static int http_prepare_data (HTTPContext *c)
static void rtsp_reply_header (HTTPContext *c, enum RTSPStatusCode error_number)
static void rtsp_reply_error (HTTPContext *c, enum RTSPStatusCode error_number)
static HTTPContextfind_rtp_session (const char *session_id)
static RTSPTransportFieldfind_transport (RTSPMessageHeader *h, enum RTSPLowerTransport lower_transport)
static HTTPContextfind_rtp_session_with_url (const char *url, const char *session_id)
static AVStreamadd_av_stream1 (FFStream *stream, AVCodecContext *codec)
static int add_av_stream (FFStream *feed, AVStream *st)
static void remove_stream (FFStream *stream)
static void extract_mpeg4_header (AVFormatContext *infile)
static void build_file_streams (void)
static void build_feed_streams (void)
static void compute_bandwidth (void)
static void get_arg (char *buf, int buf_size, const char **pp)
static void add_codec (FFStream *stream, AVCodecContext *av)
static enum CodecID opt_audio_codec (const char *arg)
static enum CodecID opt_video_codec (const char *arg)
static int ffserver_opt_default (const char *opt, const char *arg, AVCodecContext *avctx, int type)
static int parse_ffconfig (const char *filename)
static void handle_child_exit (int sig)
static void opt_debug (void)
static void opt_show_help (void)
int main (int argc, char **argv)

Variables

const char program_name [] = "FFserver"
 program name, defined by the program for show_version().
const int program_birth_year = 2000
 program birth year, defined by the program for show_banner()
static const OptionDef options []
static const char * http_state []
static struct sockaddr_in my_http_addr
static struct sockaddr_in my_rtsp_addr
static char logfilename [1024]
static HTTPContextfirst_http_ctx
static FFStreamfirst_feed
static FFStreamfirst_stream
static const char * my_program_name
static const char * my_program_dir
static const char * config_filename
static int ffserver_debug
static int ffserver_daemon
static int no_launch
static int need_to_start_children
static unsigned int nb_max_http_connections = 2000
static unsigned int nb_max_connections = 5
static unsigned int nb_connections
static uint64_t max_bandwidth = 1000
static uint64_t current_bandwidth
static int64_t cur_time
static AVRandomState random_state
static FILE * logfile = NULL


Define Documentation

#define _XOPEN_SOURCE   600

Definition at line 22 of file ffserver.c.

#define CHECK_CODEC (  )     (ccf->x != ccs->x)

Referenced by build_feed_streams().

#define closesocket   close

#define HTTP_REQUEST_TIMEOUT   (15 * 1000)

Definition at line 101 of file ffserver.c.

Referenced by start_wait_request().

#define IOBUFFER_INIT_SIZE   8192

Definition at line 98 of file ffserver.c.

Referenced by new_connection(), and rtp_new_connection().

#define RTSP_REQUEST_TIMEOUT   (3600 * 24 * 1000)

Definition at line 102 of file ffserver.c.

Referenced by start_wait_request().

#define SYNC_TIMEOUT   (10 * 1000)

Definition at line 104 of file ffserver.c.


Enumeration Type Documentation

enum HTTPState

Enumerator:
HTTPSTATE_WAIT_REQUEST 
HTTPSTATE_SEND_HEADER 
HTTPSTATE_SEND_DATA_HEADER 
HTTPSTATE_SEND_DATA 
HTTPSTATE_SEND_DATA_TRAILER 
HTTPSTATE_RECEIVE_DATA 
HTTPSTATE_WAIT_FEED 
HTTPSTATE_READY 
RTSPSTATE_WAIT_REQUEST 
RTSPSTATE_SEND_REPLY 
RTSPSTATE_SEND_PACKET 

Definition at line 67 of file ffserver.c.

Enumerator:
IP_ALLOW 
IP_DENY 

Definition at line 186 of file ffserver.c.

enum RedirType

Enumerator:
REDIR_NONE 
REDIR_ASX 
REDIR_RAM 
REDIR_ASF 
REDIR_RTSP 
REDIR_SDP 

Definition at line 1220 of file ffserver.c.

enum StreamType

Enumerator:
STREAM_TYPE_LIVE 
STREAM_TYPE_STATUS 
STREAM_TYPE_REDIRECT 

Definition at line 180 of file ffserver.c.


Function Documentation

static int add_av_stream ( FFStream feed,
AVStream st 
) [static]

Definition at line 3257 of file ffserver.c.

Referenced by build_feed_streams().

static AVStream* add_av_stream1 ( FFStream stream,
AVCodecContext codec 
) [static]

Definition at line 3240 of file ffserver.c.

Referenced by add_av_stream(), and build_file_streams().

static void add_codec ( FFStream stream,
AVCodecContext av 
) [static]

Definition at line 3621 of file ffserver.c.

Referenced by parse_ffconfig().

static void build_feed_streams ( void   )  [static]

Definition at line 3410 of file ffserver.c.

Referenced by main().

static void build_file_streams ( void   )  [static]

Definition at line 3361 of file ffserver.c.

Referenced by main().

static void close_connection ( HTTPContext c  )  [static]

Definition at line 751 of file ffserver.c.

Referenced by http_server(), and rtsp_cmd_teardown().

static void compute_bandwidth ( void   )  [static]

Definition at line 3565 of file ffserver.c.

Referenced by main().

static int compute_datarate ( DataRateData drd,
int64_t  count 
) [static]

Definition at line 389 of file ffserver.c.

Referenced by compute_status().

static void compute_real_filename ( char *  filename,
int  max_size 
) [static]

Definition at line 1196 of file ffserver.c.

Referenced by http_parse_request().

static void compute_status ( HTTPContext c  )  [static]

Definition at line 1649 of file ffserver.c.

Referenced by http_parse_request().

static char* ctime1 ( char *  buf2  )  [static]

Definition at line 316 of file ffserver.c.

Referenced by http_vlog().

static void do_switch_stream ( HTTPContext c,
int  i 
) [static]

Definition at line 1136 of file ffserver.c.

Referenced by http_parse_request(), and http_prepare_data().

static void extract_mpeg4_header ( AVFormatContext infile  )  [static]

Definition at line 3312 of file ffserver.c.

Referenced by build_file_streams().

static int extract_rates ( char *  rates,
int  ratelen,
const char *  request 
) [static]

Definition at line 1013 of file ffserver.c.

Referenced by http_parse_request().

static int ffserver_opt_default ( const char *  opt,
const char *  arg,
AVCodecContext avctx,
int  type 
) [static]

Definition at line 3741 of file ffserver.c.

Referenced by parse_ffconfig().

static HTTPContext* find_rtp_session ( const char *  session_id  )  [static]

Definition at line 2793 of file ffserver.c.

Referenced by find_rtp_session_with_url(), and rtsp_cmd_setup().

static HTTPContext* find_rtp_session_with_url ( const char *  url,
const char *  session_id 
) [static]

Definition at line 2962 of file ffserver.c.

Referenced by rtsp_cmd_pause(), rtsp_cmd_play(), and rtsp_cmd_teardown().

static int find_stream_in_feed ( FFStream feed,
AVCodecContext codec,
int  bit_rate 
) [static]

Definition at line 1060 of file ffserver.c.

Referenced by modify_current_stream().

static RTSPTransportField* find_transport ( RTSPMessageHeader h,
enum RTSPLowerTransport  lower_transport 
) [static]

Definition at line 2807 of file ffserver.c.

Referenced by rtsp_cmd_setup().

static void fmt_bytecount ( ByteIOContext pb,
int64_t  count 
) [static]

Definition at line 1639 of file ffserver.c.

Referenced by compute_status().

static void get_arg ( char *  buf,
int  buf_size,
const char **  pp 
) [static]

Definition at line 3588 of file ffserver.c.

Referenced by parse_ffconfig().

static int64_t get_packet_send_clock ( HTTPContext c  )  [static]

Definition at line 2022 of file ffserver.c.

Referenced by http_send_data().

static int64_t get_server_clock ( HTTPContext c  )  [static]

Definition at line 2014 of file ffserver.c.

Referenced by http_send_data().

static void get_word ( char *  buf,
int  buf_size,
const char **  pp 
) [static]

Definition at line 1159 of file ffserver.c.

Referenced by http_parse_request(), rtsp_parse_request(), rtsp_send_cmd(), and sdp_parse_line().

static void handle_child_exit ( int  sig  )  [static]

Definition at line 4422 of file ffserver.c.

Referenced by main().

static int handle_connection ( HTTPContext c  )  [static]

Definition at line 836 of file ffserver.c.

Referenced by http_server().

static void http_av_log ( void *  ptr,
int  level,
const char *  fmt,
va_list  vargs 
) [static]

Definition at line 353 of file ffserver.c.

Referenced by main().

void http_log ( const char *  fmt,
  ... 
)

static int http_parse_request ( HTTPContext c  )  [static]

Definition at line 1230 of file ffserver.c.

Referenced by handle_connection().

static int http_prepare_data ( HTTPContext c  )  [static]

Definition at line 2037 of file ffserver.c.

Referenced by http_send_data().

static int http_receive_data ( HTTPContext c  )  [static]

Definition at line 2426 of file ffserver.c.

Referenced by handle_connection().

static int http_send_data ( HTTPContext c  )  [static]

Definition at line 2274 of file ffserver.c.

Referenced by handle_connection().

static int http_server ( void   )  [static]

Definition at line 548 of file ffserver.c.

Referenced by main().

static int http_start_receive_data ( HTTPContext c  )  [static]

Definition at line 2393 of file ffserver.c.

Referenced by http_parse_request().

static void http_vlog ( const char *  fmt,
va_list  vargs 
) [static]

Definition at line 330 of file ffserver.c.

Referenced by http_av_log(), and http_log().

static void log_connection ( HTTPContext c  )  [static]

Definition at line 365 of file ffserver.c.

Referenced by http_server().

int main ( int  argc,
char **  argv 
)

Definition at line 4473 of file ffserver.c.

static int modify_current_stream ( HTTPContext c,
char *  rates 
) [static]

Definition at line 1097 of file ffserver.c.

Referenced by http_parse_request().

static void new_connection ( int  server_fd,
int  is_rtsp 
) [static]

Definition at line 702 of file ffserver.c.

Referenced by http_server().

static int open_input_stream ( HTTPContext c,
const char *  info 
) [static]

static void open_parser ( AVFormatContext s,
int  i 
) [static]

Definition at line 1922 of file ffserver.c.

Referenced by open_input_stream().

static enum CodecID opt_audio_codec ( const char *  arg  )  [static]

Definition at line 3695 of file ffserver.c.

static void opt_debug ( void   )  [static]

Definition at line 4447 of file ffserver.c.

static void opt_show_help ( void   )  [static]

Definition at line 4454 of file ffserver.c.

static enum CodecID opt_video_codec ( const char *  arg  )  [static]

Definition at line 3705 of file ffserver.c.

static int parse_ffconfig ( const char *  filename  )  [static]

Definition at line 3751 of file ffserver.c.

Referenced by main().

static int prepare_sdp_description ( FFStream stream,
uint8_t **  pbuffer,
struct in_addr  my_ip 
) [static]

Definition at line 2709 of file ffserver.c.

Referenced by http_parse_request(), and rtsp_cmd_describe().

static void remove_stream ( FFStream stream  )  [static]

Definition at line 3299 of file ffserver.c.

Referenced by build_file_streams().

static int rtp_new_av_stream ( HTTPContext c,
int  stream_index,
struct sockaddr_in *  dest_addr,
HTTPContext rtsp_c 
) [static]

Definition at line 3144 of file ffserver.c.

Referenced by rtsp_cmd_setup(), and start_multicast().

static HTTPContext * rtp_new_connection ( struct sockaddr_in *  from_addr,
FFStream stream,
const char *  session_id,
enum RTSPLowerTransport  rtp_protocol 
) [static]

Definition at line 3078 of file ffserver.c.

Referenced by rtsp_cmd_setup(), and start_multicast().

static void rtsp_cmd_describe ( HTTPContext c,
const char *  url 
) [static]

Definition at line 2749 of file ffserver.c.

Referenced by rtsp_parse_request().

static void rtsp_cmd_options ( HTTPContext c,
const char *  url 
) [static]

Definition at line 2740 of file ffserver.c.

Referenced by rtsp_parse_request().

static void rtsp_cmd_pause ( HTTPContext c,
const char *  url,
RTSPMessageHeader h 
) [static]

Definition at line 3026 of file ffserver.c.

Referenced by rtsp_parse_request().

static void rtsp_cmd_play ( HTTPContext c,
const char *  url,
RTSPMessageHeader h 
) [static]

Definition at line 2992 of file ffserver.c.

Referenced by rtsp_parse_request().

static void rtsp_cmd_setup ( HTTPContext c,
const char *  url,
RTSPMessageHeader h 
) [static]

Definition at line 2820 of file ffserver.c.

Referenced by rtsp_parse_request().

static void rtsp_cmd_teardown ( HTTPContext c,
const char *  url,
RTSPMessageHeader h 
) [static]

Definition at line 3051 of file ffserver.c.

Referenced by rtsp_parse_request().

static int rtsp_parse_request ( HTTPContext c  )  [static]

Definition at line 2619 of file ffserver.c.

Referenced by handle_connection().

static void rtsp_reply_error ( HTTPContext c,
enum RTSPStatusCode  error_number 
) [static]

static void rtsp_reply_header ( HTTPContext c,
enum RTSPStatusCode  error_number 
) [static]

static void skip_spaces ( const char **  pp  )  [static]

static int socket_open_listen ( struct sockaddr_in *  my_addr  )  [static]

Definition at line 461 of file ffserver.c.

Referenced by http_server().

static void start_children ( FFStream feed  )  [static]

Definition at line 398 of file ffserver.c.

Referenced by http_server().

static void start_multicast ( void   )  [static]

Definition at line 493 of file ffserver.c.

Referenced by http_server().

static void start_wait_request ( HTTPContext c,
int  is_rtsp 
) [static]

Definition at line 688 of file ffserver.c.

Referenced by handle_connection(), and new_connection().

static void update_datarate ( DataRateData drd,
int64_t  count 
) [static]

Definition at line 375 of file ffserver.c.

Referenced by http_receive_data(), and http_send_data().

static int validate_acl ( FFStream stream,
HTTPContext c 
) [static]

Definition at line 1177 of file ffserver.c.

Referenced by http_parse_request().


Variable Documentation

const char* config_filename [static]

Definition at line 296 of file ffserver.c.

Referenced by main().

int64_t cur_time [static]

uint64_t current_bandwidth [static]

int ffserver_daemon [static]

Definition at line 298 of file ffserver.c.

Referenced by main(), opt_debug(), and parse_ffconfig().

int ffserver_debug [static]

Definition at line 297 of file ffserver.c.

Referenced by http_parse_request(), opt_debug(), parse_ffconfig(), and start_children().

FFStream* first_feed [static]

Definition at line 257 of file ffserver.c.

Definition at line 256 of file ffserver.c.

Definition at line 258 of file ffserver.c.

const char* http_state[] [static]

Initial value:

 {
    "HTTP_WAIT_REQUEST",
    "HTTP_SEND_HEADER",

    "SEND_DATA_HEADER",
    "SEND_DATA",
    "SEND_DATA_TRAILER",
    "RECEIVE_DATA",
    "WAIT_FEED",
    "READY",

    "RTSP_WAIT_REQUEST",
    "RTSP_SEND_REPLY",
    "RTSP_SEND_PACKET",
}

Definition at line 82 of file ffserver.c.

Referenced by compute_status().

FILE* logfile = NULL [static]

Definition at line 314 of file ffserver.c.

Referenced by http_vlog(), and main().

char logfilename[1024] [static]

Definition at line 255 of file ffserver.c.

Referenced by av_encode(), main(), opt_debug(), and parse_ffconfig().

uint64_t max_bandwidth = 1000 [static]

Definition at line 307 of file ffserver.c.

Referenced by compute_status(), http_parse_request(), and parse_ffconfig().

struct sockaddr_in my_http_addr [static]

Definition at line 252 of file ffserver.c.

Referenced by http_server(), and parse_ffconfig().

const char* my_program_dir [static]

Definition at line 294 of file ffserver.c.

Referenced by main(), and start_children().

const char* my_program_name [static]

Definition at line 293 of file ffserver.c.

Referenced by main(), and start_children().

struct sockaddr_in my_rtsp_addr [static]

Definition at line 253 of file ffserver.c.

Referenced by http_parse_request(), http_server(), and parse_ffconfig().

unsigned int nb_connections [static]

Definition at line 305 of file ffserver.c.

Referenced by close_connection(), compute_status(), new_connection(), and rtp_new_connection().

unsigned int nb_max_connections = 5 [static]

Definition at line 304 of file ffserver.c.

Referenced by compute_status(), new_connection(), parse_ffconfig(), and rtp_new_connection().

unsigned int nb_max_http_connections = 2000 [static]

Definition at line 303 of file ffserver.c.

Referenced by http_server(), and parse_ffconfig().

int need_to_start_children [static]

Definition at line 300 of file ffserver.c.

Referenced by handle_child_exit(), and http_server().

int no_launch [static]

Definition at line 299 of file ffserver.c.

Referenced by start_children().

static const OptionDef options [static]

Initial value:

 {
    { "h", OPT_EXIT, {(void*)opt_show_help}, "show help" },
    { "version", OPT_EXIT, {(void*)show_version}, "show version" },
    { "L", OPT_EXIT, {(void*)show_license}, "show license" },
    { "formats", OPT_EXIT, {(void*)show_formats}, "show available formats, codecs, protocols, ..." },
    { "n", OPT_BOOL, {(void *)&no_launch }, "enable no-launch mode" },
    { "d", 0, {(void*)opt_debug}, "enable debug mode" },
    { "f", HAS_ARG | OPT_STRING, {(void*)&config_filename }, "use configfile instead of /etc/ffserver.conf", "configfile" },
    { NULL },
}

Definition at line 65 of file ffserver.c.

const int program_birth_year = 2000

program birth year, defined by the program for show_banner()

Definition at line 63 of file ffserver.c.

Referenced by show_banner().

const char program_name[] = "FFserver"

program name, defined by the program for show_version().

Definition at line 62 of file ffserver.c.

Referenced by compute_status(), show_banner(), show_license(), and show_version().

Definition at line 312 of file ffserver.c.


Generated on Fri Oct 26 02:35:42 2012 for FFmpeg by  doxygen 1.5.8