#include "config.h"
#include <string.h>
#include <stdlib.h>
#include "libavformat/avformat.h"
#include "libavformat/ffm.h"
#include "libavformat/network.h"
#include "libavformat/os_support.h"
#include "libavformat/rtpdec.h"
#include "libavformat/rtsp.h"
#include "libavformat/avio_internal.h"
#include "libavutil/avstring.h"
#include "libavutil/lfg.h"
#include "libavutil/dict.h"
#include "libavutil/mathematics.h"
#include "libavutil/random_seed.h"
#include "libavutil/parseutils.h"
#include "libavutil/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"
#include "cmdutils_common_opts.h"
Go to the source code of this file.
Data Structures | |
struct | RTSPActionServerSetup |
struct | DataRateData |
struct | HTTPContext |
struct | IPAddressACL |
struct | FFStream |
struct | FeedData |
Macros | |
#define | closesocket close |
#define | MAX_STREAMS 20 |
#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) |
#define | ERROR(...) report_config_error(filename, line_num, &errors, __VA_ARGS__) |
Typedefs | |
typedef struct RTSPActionServerSetup | RTSPActionServerSetup |
typedef struct HTTPContext | HTTPContext |
typedef struct IPAddressACL | IPAddressACL |
typedef struct FFStream | FFStream |
typedef struct FeedData | FeedData |
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 HTTPContext * | rtp_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) |
void | exit_program (int ret) |
Do all the necessary cleanup and abort. | |
static int | resolve_host (struct in_addr *sin_addr, const char *hostname) |
static char * | ctime1 (char *buf2) |
static void | http_vlog (const char *fmt, va_list vargs) |
static 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 void | http_send_too_busy_reply (int fd) |
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 | skip_spaces (const char **pp) |
static void | get_word (char *buf, int buf_size, const char **pp) |
static void | get_arg (char *buf, int buf_size, const char **pp) |
static void | parse_acl_row (FFStream *stream, FFStream *feed, IPAddressACL *ext_acl, const char *p, const char *filename, int line_num) |
static IPAddressACL * | parse_dynamic_acl (FFStream *stream, HTTPContext *c) |
static void | free_acl_list (IPAddressACL *in_acl) |
static int | validate_acl_list (IPAddressACL *in_acl, HTTPContext *c) |
static int | validate_acl (FFStream *stream, HTTPContext *c) |
static void | compute_real_filename (char *filename, int max_size) |
static void | fmt_bytecount (AVIOContext *pb, int64_t count) |
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 HTTPContext * | find_rtp_session (const char *session_id) |
static RTSPTransportField * | find_transport (RTSPMessageHeader *h, enum RTSPLowerTransport lower_transport) |
static HTTPContext * | find_rtp_session_with_url (const char *url, const char *session_id) |
static AVStream * | add_av_stream1 (FFStream *stream, AVCodecContext *codec, int copy) |
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 | 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 | avserver_opt_default (const char *opt, const char *arg, AVCodecContext *avctx, int type) |
static int | avserver_opt_preset (const char *arg, AVCodecContext *avctx, int type, enum CodecID *audio_id, enum CodecID *video_id) |
static AVOutputFormat * | avserver_guess_format (const char *short_name, const char *filename, const char *mime_type) |
static void | report_config_error (const char *filename, int line_num, int *errors, const char *fmt,...) |
static int | parse_ffconfig (const char *filename) |
static void | handle_child_exit (int sig) |
static void | opt_debug (void) |
static void | show_help (void) |
int | main (int argc, char **argv) |
Variables | |
const char | program_name [] = "avserver" |
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 HTTPContext * | first_http_ctx |
static FFStream * | first_feed |
static FFStream * | first_stream |
static const char * | my_program_name |
static const char * | my_program_dir |
static const char * | config_filename = "/etc/avserver.conf" |
static int | avserver_debug |
static int | avserver_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 AVLFG | random_state |
static FILE * | logfile = NULL |
#define CHECK_CODEC | ( | x | ) | (ccf->x != ccs->x) |
Referenced by build_feed_streams().
#define closesocket close |
Definition at line 24 of file avserver.c.
Referenced by close_connection(), new_connection(), socket_open_listen(), tcp_close(), tcp_open(), udp_close(), udp_open(), and udp_socket_create().
#define ERROR | ( | ... | ) | report_config_error(filename, line_num, &errors, __VA_ARGS__) |
Referenced by parse_ffconfig().
#define HTTP_REQUEST_TIMEOUT (15 * 1000) |
Definition at line 102 of file avserver.c.
Referenced by start_wait_request().
#define IOBUFFER_INIT_SIZE 8192 |
Definition at line 99 of file avserver.c.
Referenced by new_connection(), and rtp_new_connection().
#define MAX_STREAMS 20 |
Definition at line 97 of file avserver.c.
#define RTSP_REQUEST_TIMEOUT (3600 * 24 * 1000) |
Definition at line 103 of file avserver.c.
Referenced by start_wait_request().
#define SYNC_TIMEOUT (10 * 1000) |
Definition at line 105 of file avserver.c.
typedef struct HTTPContext HTTPContext |
typedef struct IPAddressACL IPAddressACL |
typedef struct RTSPActionServerSetup RTSPActionServerSetup |
enum HTTPState |
Definition at line 66 of file avserver.c.
enum IPAddressAction |
Definition at line 189 of file avserver.c.
enum RedirType |
Definition at line 1443 of file avserver.c.
enum StreamType |
Definition at line 183 of file avserver.c.
Definition at line 3477 of file avserver.c.
Referenced by build_feed_streams().
|
static |
Definition at line 3447 of file avserver.c.
Referenced by add_av_stream(), and build_file_streams().
|
static |
Definition at line 3792 of file avserver.c.
Referenced by parse_ffconfig().
|
static |
Definition at line 3966 of file avserver.c.
Referenced by parse_ffconfig().
|
static |
Definition at line 3913 of file avserver.c.
Referenced by avserver_opt_preset(), and parse_ffconfig().
|
static |
Definition at line 3923 of file avserver.c.
Referenced by parse_ffconfig().
Definition at line 3626 of file avserver.c.
Referenced by main().
Definition at line 3579 of file avserver.c.
Referenced by main().
|
static |
Definition at line 818 of file avserver.c.
Referenced by http_server(), and rtsp_cmd_teardown().
Definition at line 3768 of file avserver.c.
Referenced by main().
|
static |
Definition at line 439 of file avserver.c.
Referenced by compute_status().
|
static |
Definition at line 1419 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 1873 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 363 of file avserver.c.
Referenced by http_vlog().
void exit_program | ( | int | ret | ) |
Do all the necessary cleanup and abort.
This function is implemented in the avtools, not cmdutils.
Definition at line 322 of file avserver.c.
|
static |
Definition at line 3530 of file avserver.c.
Referenced by build_file_streams().
|
static |
Definition at line 1082 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 3005 of file avserver.c.
Referenced by find_rtp_session_with_url(), and rtsp_cmd_setup().
|
static |
Definition at line 3175 of file avserver.c.
Referenced by rtsp_cmd_pause(), rtsp_cmd_play(), and rtsp_cmd_teardown().
|
static |
Definition at line 1129 of file avserver.c.
Referenced by modify_current_stream().
|
static |
Definition at line 3019 of file avserver.c.
Referenced by rtsp_cmd_setup().
|
static |
Definition at line 1863 of file avserver.c.
Referenced by compute_status().
|
static |
Definition at line 1368 of file avserver.c.
Referenced by validate_acl().
|
static |
Definition at line 1233 of file avserver.c.
Referenced by parse_acl_row(), parse_dynamic_acl(), and parse_ffconfig().
|
static |
Definition at line 2187 of file avserver.c.
Referenced by http_send_data().
|
static |
Definition at line 2179 of file avserver.c.
Referenced by http_send_data().
|
static |
Definition at line 1215 of file avserver.c.
Referenced by http_parse_request(), and rtsp_parse_request().
|
static |
Definition at line 4598 of file avserver.c.
Referenced by main().
|
static |
Definition at line 905 of file avserver.c.
Referenced by http_server().
Definition at line 403 of file avserver.c.
Referenced by main().
|
static |
Definition at line 395 of file avserver.c.
Referenced by build_feed_streams(), build_file_streams(), http_av_log(), http_parse_request(), http_prepare_data(), http_receive_data(), http_server(), http_start_receive_data(), log_connection(), main(), new_connection(), open_input_stream(), rtp_new_av_stream(), start_children(), and start_multicast().
|
static |
Definition at line 1453 of file avserver.c.
Referenced by handle_connection().
|
static |
Definition at line 2202 of file avserver.c.
Referenced by http_send_data().
|
static |
Definition at line 2595 of file avserver.c.
Referenced by handle_connection().
|
static |
Definition at line 2433 of file avserver.c.
Referenced by handle_connection().
|
static |
Definition at line 753 of file avserver.c.
Referenced by new_connection().
|
static |
Definition at line 599 of file avserver.c.
Referenced by main().
|
static |
Definition at line 2552 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 377 of file avserver.c.
Referenced by http_av_log(), and http_log().
|
static |
Definition at line 415 of file avserver.c.
Referenced by http_server().
int main | ( | int | argc, |
char ** | argv | ||
) |
Definition at line 4646 of file avserver.c.
|
static |
Definition at line 1166 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 769 of file avserver.c.
Referenced by http_server().
|
static |
Definition at line 2115 of file avserver.c.
Referenced by http_parse_request(), http_prepare_data(), rtsp_cmd_setup(), and start_multicast().
|
static |
Definition at line 3867 of file avserver.c.
Referenced by avserver_opt_preset(), and parse_ffconfig().
Definition at line 4623 of file avserver.c.
|
static |
Definition at line 3877 of file avserver.c.
Referenced by avserver_opt_preset(), and parse_ffconfig().
|
static |
Definition at line 1265 of file avserver.c.
Referenced by parse_dynamic_acl(), and parse_ffconfig().
|
static |
Definition at line 1331 of file avserver.c.
Referenced by validate_acl().
|
static |
Definition at line 3996 of file avserver.c.
Referenced by main().
|
static |
Definition at line 2905 of file avserver.c.
Referenced by http_parse_request(), and rtsp_cmd_describe().
Definition at line 3517 of file avserver.c.
Referenced by build_file_streams().
|
static |
Definition at line 3985 of file avserver.c.
|
static |
Definition at line 329 of file avserver.c.
Referenced by parse_acl_row(), and parse_ffconfig().
|
static |
Definition at line 3350 of file avserver.c.
Referenced by rtsp_cmd_setup(), and start_multicast().
|
static |
Definition at line 3284 of file avserver.c.
Referenced by rtsp_cmd_setup(), and start_multicast().
|
static |
Definition at line 2959 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 2950 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 3235 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 3209 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 3032 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 3260 of file avserver.c.
Referenced by rtsp_parse_request().
|
static |
Definition at line 2815 of file avserver.c.
Referenced by handle_connection().
|
static |
Definition at line 2809 of file avserver.c.
Referenced by rtsp_cmd_describe(), rtsp_cmd_pause(), rtsp_cmd_play(), rtsp_cmd_setup(), rtsp_cmd_teardown(), and rtsp_parse_request().
|
static |
Definition at line 2753 of file avserver.c.
Referenced by rtsp_cmd_describe(), rtsp_cmd_pause(), rtsp_cmd_play(), rtsp_cmd_setup(), rtsp_cmd_teardown(), and rtsp_reply_error().
Definition at line 4630 of file avserver.c.
|
static |
Definition at line 1206 of file avserver.c.
Referenced by get_word().
|
static |
Definition at line 511 of file avserver.c.
Referenced by http_server().
Definition at line 448 of file avserver.c.
Referenced by http_server().
Definition at line 544 of file avserver.c.
Referenced by http_server().
|
static |
Definition at line 739 of file avserver.c.
Referenced by handle_connection(), and new_connection().
|
static |
Definition at line 425 of file avserver.c.
Referenced by http_receive_data(), and http_send_data().
|
static |
Definition at line 1397 of file avserver.c.
Referenced by http_parse_request().
|
static |
Definition at line 1380 of file avserver.c.
Referenced by validate_acl().
|
static |
Definition at line 304 of file avserver.c.
Referenced by main(), opt_debug(), and parse_ffconfig().
|
static |
Definition at line 303 of file avserver.c.
Referenced by http_parse_request(), opt_debug(), parse_ffconfig(), and start_children().
|
static |
Definition at line 301 of file avserver.c.
Referenced by main().
|
static |
Definition at line 316 of file avserver.c.
Referenced by audio_read_packet(), compute_datarate(), get_server_clock(), handle_connection(), http_prepare_data(), http_server(), open_input_stream(), print_report(), start_wait_request(), update_datarate(), and video_refresh_timer().
|
static |
Definition at line 314 of file avserver.c.
Referenced by close_connection(), compute_status(), http_parse_request(), and rtp_new_connection().
|
static |
Definition at line 262 of file avserver.c.
Referenced by parse_ffconfig().
|
static |
Definition at line 261 of file avserver.c.
Referenced by close_connection(), compute_status(), http_server(), new_connection(), and rtp_new_connection().
|
static |
Definition at line 263 of file avserver.c.
Referenced by compute_status(), http_parse_request(), parse_ffconfig(), and remove_stream().
|
static |
Definition at line 81 of file avserver.c.
Referenced by compute_status().
|
static |
Definition at line 320 of file avserver.c.
Referenced by http_vlog(), and main().
|
static |
Definition at line 260 of file avserver.c.
Referenced by main(), opt_debug(), parse_ffconfig(), transcode(), and transcode_init().
|
static |
Definition at line 313 of file avserver.c.
Referenced by applehttp_open(), compute_status(), http_parse_request(), and parse_ffconfig().
|
static |
Definition at line 257 of file avserver.c.
Referenced by http_server(), and parse_ffconfig().
|
static |
Definition at line 299 of file avserver.c.
Referenced by main(), and start_children().
|
static |
Definition at line 298 of file avserver.c.
Referenced by main(), and start_children().
|
static |
Definition at line 258 of file avserver.c.
Referenced by http_parse_request(), http_server(), and parse_ffconfig().
|
static |
Definition at line 311 of file avserver.c.
Referenced by close_connection(), compute_status(), http_send_too_busy_reply(), new_connection(), and rtp_new_connection().
|
static |
Definition at line 310 of file avserver.c.
Referenced by compute_status(), http_send_too_busy_reply(), new_connection(), parse_ffconfig(), and rtp_new_connection().
|
static |
Definition at line 309 of file avserver.c.
Referenced by http_server(), and parse_ffconfig().
|
static |
Definition at line 306 of file avserver.c.
Referenced by handle_child_exit(), and http_server().
|
static |
Definition at line 305 of file avserver.c.
Referenced by start_children().
|
static |
Definition at line 64 of file avserver.c.
const int program_birth_year = 2000 |
program birth year, defined by the program for show_banner()
Definition at line 62 of file avserver.c.
const char program_name[] = "avserver" |
program name, defined by the program for show_version().
Definition at line 61 of file avserver.c.
|
static |
Definition at line 318 of file avserver.c.