mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-26 17:32:06 +00:00
Rename ffserver to avserver.
This commit is contained in:
parent
9e12f0bf5f
commit
4d58e4cb4c
2
.gitignore
vendored
2
.gitignore
vendored
@ -14,7 +14,7 @@ doxy
|
||||
ffmpeg
|
||||
avplay
|
||||
avprobe
|
||||
ffserver
|
||||
avserver
|
||||
libavcodec/*_tablegen
|
||||
libavcodec/*_tables.c
|
||||
libavcodec/*_tables.h
|
||||
|
@ -5,7 +5,7 @@ releases are sorted from youngest to oldest.
|
||||
version <next>:
|
||||
- BWF muxer
|
||||
- Flash Screen Video 2 decoder
|
||||
- ffplay/ffprobe renamed to avplay/avprobe
|
||||
- ffplay/ffprobe/ffserver renamed to avplay/avprobe/avserver
|
||||
|
||||
|
||||
version 0.7:
|
||||
|
6
Makefile
6
Makefile
@ -55,7 +55,7 @@ COMPILE_S = $(call COMPILE,AS)
|
||||
PROGS-$(CONFIG_FFMPEG) += ffmpeg
|
||||
PROGS-$(CONFIG_AVPLAY) += avplay
|
||||
PROGS-$(CONFIG_AVPROBE) += avprobe
|
||||
PROGS-$(CONFIG_FFSERVER) += ffserver
|
||||
PROGS-$(CONFIG_AVSERVER) += avserver
|
||||
|
||||
PROGS := $(PROGS-yes:%=%$(EXESUF))
|
||||
OBJS = $(PROGS-yes:%=%.o) cmdutils.o
|
||||
@ -64,7 +64,7 @@ HOSTPROGS := $(TESTTOOLS:%=tests/%)
|
||||
TOOLS = qt-faststart trasher
|
||||
TOOLS-$(CONFIG_ZLIB) += cws2fws
|
||||
|
||||
BASENAMES = ffmpeg avplay avprobe ffserver
|
||||
BASENAMES = ffmpeg avplay avprobe avserver
|
||||
ALLPROGS = $(BASENAMES:%=%$(EXESUF))
|
||||
ALLMANPAGES = $(BASENAMES:%=%.1)
|
||||
|
||||
@ -118,7 +118,7 @@ $(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
|
||||
|
||||
avplay.o: CFLAGS += $(SDL_CFLAGS)
|
||||
avplay$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
|
||||
ffserver$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
|
||||
avserver$(EXESUF): LDFLAGS += $(AVSERVERLDFLAGS)
|
||||
|
||||
$(PROGS): %$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
|
||||
$(LD) $(LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
|
||||
|
@ -59,7 +59,7 @@
|
||||
|
||||
#include "cmdutils.h"
|
||||
|
||||
const char program_name[] = "ffserver";
|
||||
const char program_name[] = "avserver";
|
||||
const int program_birth_year = 2000;
|
||||
|
||||
static const OptionDef options[];
|
||||
@ -200,7 +200,7 @@ typedef struct IPAddressACL {
|
||||
struct in_addr last;
|
||||
} IPAddressACL;
|
||||
|
||||
/* description of each stream of the ffserver.conf file */
|
||||
/* description of each stream of the avserver.conf file */
|
||||
typedef struct FFStream {
|
||||
enum StreamType stream_type;
|
||||
char filename[1024]; /* stream filename */
|
||||
@ -299,10 +299,10 @@ static int rtp_new_av_stream(HTTPContext *c,
|
||||
static const char *my_program_name;
|
||||
static const char *my_program_dir;
|
||||
|
||||
static const char *config_filename = "/etc/ffserver.conf";
|
||||
static const char *config_filename = "/etc/avserver.conf";
|
||||
|
||||
static int ffserver_debug;
|
||||
static int ffserver_daemon;
|
||||
static int avserver_debug;
|
||||
static int avserver_daemon;
|
||||
static int no_launch;
|
||||
static int need_to_start_children;
|
||||
|
||||
@ -320,7 +320,7 @@ static AVLFG random_state;
|
||||
|
||||
static FILE *logfile = NULL;
|
||||
|
||||
/* FIXME: make ffserver work with IPv6 */
|
||||
/* FIXME: make avserver work with IPv6 */
|
||||
/* resolve host with also IP address parsing */
|
||||
static int resolve_host(struct in_addr *sin_addr, const char *hostname)
|
||||
{
|
||||
@ -480,7 +480,7 @@ static void start_children(FFStream *feed)
|
||||
for (i = 3; i < 256; i++)
|
||||
close(i);
|
||||
|
||||
if (!ffserver_debug) {
|
||||
if (!avserver_debug) {
|
||||
i = open("/dev/null", O_RDWR);
|
||||
if (i != -1) {
|
||||
dup2(i, 0);
|
||||
@ -620,7 +620,7 @@ static int http_server(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
http_log("FFserver started.\n");
|
||||
http_log("AVserver started.\n");
|
||||
|
||||
start_children(first_feed);
|
||||
|
||||
@ -664,7 +664,7 @@ static int http_server(void)
|
||||
poll_entry->events = POLLOUT;
|
||||
poll_entry++;
|
||||
} else {
|
||||
/* when ffserver is doing the timing, we work by
|
||||
/* when avserver is doing the timing, we work by
|
||||
looking at which packet need to be sent every
|
||||
10 ms */
|
||||
delay1 = 10; /* one tick wait XXX: 10 ms assumed */
|
||||
@ -1480,7 +1480,7 @@ static int http_parse_request(HTTPContext *c)
|
||||
|
||||
av_strlcpy(c->protocol, protocol, sizeof(c->protocol));
|
||||
|
||||
if (ffserver_debug)
|
||||
if (avserver_debug)
|
||||
http_log("%s - - New connection: %s %s\n", inet_ntoa(c->from_addr.sin_addr), cmd, url);
|
||||
|
||||
/* find the filename and the optional info string in the request */
|
||||
@ -1643,7 +1643,7 @@ static int http_parse_request(HTTPContext *c)
|
||||
"Content-type: video/x-ms-asf\r\n"
|
||||
"\r\n"
|
||||
"<ASX Version=\"3\">\r\n"
|
||||
//"<!-- Autogenerated by ffserver -->\r\n"
|
||||
//"<!-- Autogenerated by avserver -->\r\n"
|
||||
"<ENTRY><REF HREF=\"http://%s/%s%s\"/></ENTRY>\r\n"
|
||||
"</ASX>\r\n", hostbuf, filename, info);
|
||||
break;
|
||||
@ -1652,7 +1652,7 @@ static int http_parse_request(HTTPContext *c)
|
||||
"HTTP/1.0 200 RAM Follows\r\n"
|
||||
"Content-type: audio/x-pn-realaudio\r\n"
|
||||
"\r\n"
|
||||
"# Autogenerated by ffserver\r\n"
|
||||
"# Autogenerated by avserver\r\n"
|
||||
"http://%s/%s%s\r\n", hostbuf, filename, info);
|
||||
break;
|
||||
case REDIR_ASF:
|
||||
@ -3458,7 +3458,7 @@ static int rtp_new_av_stream(HTTPContext *c,
|
||||
}
|
||||
|
||||
/********************************************************************/
|
||||
/* ffserver initialization */
|
||||
/* avserver initialization */
|
||||
|
||||
static AVStream *add_av_stream1(FFStream *stream, AVCodecContext *codec, int copy)
|
||||
{
|
||||
@ -3914,10 +3914,10 @@ static void load_module(const char *filename)
|
||||
return;
|
||||
}
|
||||
|
||||
init_func = dlsym(dll, "ffserver_module_init");
|
||||
init_func = dlsym(dll, "avserver_module_init");
|
||||
if (!init_func) {
|
||||
fprintf(stderr,
|
||||
"%s: init function 'ffserver_module_init()' not found\n",
|
||||
"%s: init function 'avserver_module_init()' not found\n",
|
||||
filename);
|
||||
dlclose(dll);
|
||||
}
|
||||
@ -3926,7 +3926,7 @@ static void load_module(const char *filename)
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ffserver_opt_default(const char *opt, const char *arg,
|
||||
static int avserver_opt_default(const char *opt, const char *arg,
|
||||
AVCodecContext *avctx, int type)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -3936,7 +3936,7 @@ static int ffserver_opt_default(const char *opt, const char *arg,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ffserver_opt_preset(const char *arg,
|
||||
static int avserver_opt_preset(const char *arg,
|
||||
AVCodecContext *avctx, int type,
|
||||
enum CodecID *audio_id, enum CodecID *video_id)
|
||||
{
|
||||
@ -3967,7 +3967,7 @@ static int ffserver_opt_preset(const char *arg,
|
||||
*video_id = opt_video_codec(tmp2);
|
||||
}else if(!strcmp(tmp, "scodec")){
|
||||
/* opt_subtitle_codec(tmp2); */
|
||||
}else if(ffserver_opt_default(tmp, tmp2, avctx, type) < 0){
|
||||
}else if(avserver_opt_default(tmp, tmp2, avctx, type) < 0){
|
||||
fprintf(stderr, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n", filename, line, tmp, tmp2);
|
||||
ret = 1;
|
||||
break;
|
||||
@ -3979,7 +3979,7 @@ static int ffserver_opt_preset(const char *arg,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static AVOutputFormat *ffserver_guess_format(const char *short_name, const char *filename,
|
||||
static AVOutputFormat *avserver_guess_format(const char *short_name, const char *filename,
|
||||
const char *mime_type)
|
||||
{
|
||||
AVOutputFormat *fmt = av_guess_format(short_name, filename, mime_type);
|
||||
@ -4066,7 +4066,7 @@ static int parse_ffconfig(const char *filename)
|
||||
ERROR("%s:%d: Invalid host/IP address: %s\n", arg);
|
||||
}
|
||||
} else if (!strcasecmp(cmd, "NoDaemon")) {
|
||||
ffserver_daemon = 0;
|
||||
avserver_daemon = 0;
|
||||
} else if (!strcasecmp(cmd, "RTSPPort")) {
|
||||
get_arg(arg, sizeof(arg), &p);
|
||||
val = atoi(arg);
|
||||
@ -4103,7 +4103,7 @@ static int parse_ffconfig(const char *filename)
|
||||
} else
|
||||
max_bandwidth = llval;
|
||||
} else if (!strcasecmp(cmd, "CustomLog")) {
|
||||
if (!ffserver_debug)
|
||||
if (!avserver_debug)
|
||||
get_arg(logfilename, sizeof(logfilename), &p);
|
||||
} else if (!strcasecmp(cmd, "<Feed")) {
|
||||
/*********************************************/
|
||||
@ -4227,7 +4227,7 @@ static int parse_ffconfig(const char *filename)
|
||||
}
|
||||
}
|
||||
|
||||
stream->fmt = ffserver_guess_format(NULL, stream->filename, NULL);
|
||||
stream->fmt = avserver_guess_format(NULL, stream->filename, NULL);
|
||||
avcodec_get_context_defaults2(&video_enc, AVMEDIA_TYPE_VIDEO);
|
||||
avcodec_get_context_defaults2(&audio_enc, AVMEDIA_TYPE_AUDIO);
|
||||
audio_id = CODEC_ID_NONE;
|
||||
@ -4267,7 +4267,7 @@ static int parse_ffconfig(const char *filename)
|
||||
/* jpeg cannot be used here, so use single frame jpeg */
|
||||
if (!strcmp(arg, "jpeg"))
|
||||
strcpy(arg, "mjpeg");
|
||||
stream->fmt = ffserver_guess_format(arg, NULL, NULL);
|
||||
stream->fmt = avserver_guess_format(arg, NULL, NULL);
|
||||
if (!stream->fmt) {
|
||||
ERROR("Unknown Format: %s\n", arg);
|
||||
}
|
||||
@ -4430,7 +4430,7 @@ static int parse_ffconfig(const char *filename)
|
||||
avctx = &audio_enc;
|
||||
type = AV_OPT_FLAG_AUDIO_PARAM;
|
||||
}
|
||||
if (ffserver_opt_default(arg, arg2, avctx, type|AV_OPT_FLAG_ENCODING_PARAM)) {
|
||||
if (avserver_opt_default(arg, arg2, avctx, type|AV_OPT_FLAG_ENCODING_PARAM)) {
|
||||
ERROR("AVOption error: %s %s\n", arg, arg2);
|
||||
}
|
||||
} else if (!strcasecmp(cmd, "AVPresetVideo") ||
|
||||
@ -4447,7 +4447,7 @@ static int parse_ffconfig(const char *filename)
|
||||
audio_enc.codec_id = audio_id;
|
||||
type = AV_OPT_FLAG_AUDIO_PARAM;
|
||||
}
|
||||
if (ffserver_opt_preset(arg, avctx, type|AV_OPT_FLAG_ENCODING_PARAM, &audio_id, &video_id)) {
|
||||
if (avserver_opt_preset(arg, avctx, type|AV_OPT_FLAG_ENCODING_PARAM, &audio_id, &video_id)) {
|
||||
ERROR("AVPreset error: %s\n", arg);
|
||||
}
|
||||
} else if (!strcasecmp(cmd, "VideoTag")) {
|
||||
@ -4638,14 +4638,14 @@ static void handle_child_exit(int sig)
|
||||
|
||||
static void opt_debug(void)
|
||||
{
|
||||
ffserver_debug = 1;
|
||||
ffserver_daemon = 0;
|
||||
avserver_debug = 1;
|
||||
avserver_daemon = 0;
|
||||
logfilename[0] = '-';
|
||||
}
|
||||
|
||||
static void show_help(void)
|
||||
{
|
||||
printf("usage: ffserver [options]\n"
|
||||
printf("usage: avserver [options]\n"
|
||||
"Hyper fast multi format Audio/Video streaming server\n");
|
||||
printf("\n");
|
||||
show_help_options(options, "Main options:\n", 0, 0);
|
||||
@ -4655,7 +4655,7 @@ static const OptionDef options[] = {
|
||||
#include "cmdutils_common_opts.h"
|
||||
{ "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" },
|
||||
{ "f", HAS_ARG | OPT_STRING, {(void*)&config_filename }, "use configfile instead of /etc/avserver.conf", "configfile" },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
@ -4669,7 +4669,7 @@ int main(int argc, char **argv)
|
||||
|
||||
my_program_name = argv[0];
|
||||
my_program_dir = getcwd(0, 0);
|
||||
ffserver_daemon = 1;
|
||||
avserver_daemon = 1;
|
||||
|
||||
parse_options(argc, argv, options, NULL);
|
||||
|
||||
@ -4703,7 +4703,7 @@ int main(int argc, char **argv)
|
||||
compute_bandwidth();
|
||||
|
||||
/* put the process in background and detach it from its TTY */
|
||||
if (ffserver_daemon) {
|
||||
if (avserver_daemon) {
|
||||
int pid;
|
||||
|
||||
pid = fork();
|
||||
@ -4730,7 +4730,7 @@ int main(int argc, char **argv)
|
||||
/* signal init */
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
if (ffserver_daemon)
|
||||
if (avserver_daemon)
|
||||
chdir("/");
|
||||
|
||||
if (http_server() < 0) {
|
20
configure
vendored
20
configure
vendored
@ -83,7 +83,7 @@ Configuration options:
|
||||
--disable-ffmpeg disable ffmpeg build
|
||||
--disable-avplay disable avplay build
|
||||
--disable-avprobe disable avprobe build
|
||||
--disable-ffserver disable ffserver build
|
||||
--disable-avserver disable avserver build
|
||||
--disable-avdevice disable libavdevice build
|
||||
--disable-avcodec disable libavcodec build
|
||||
--disable-avformat disable libavformat build
|
||||
@ -915,7 +915,7 @@ CONFIG_LIST="
|
||||
ffmpeg
|
||||
avplay
|
||||
avprobe
|
||||
ffserver
|
||||
avserver
|
||||
fft
|
||||
frei0r
|
||||
golomb
|
||||
@ -1492,8 +1492,8 @@ ffmpeg_select="buffer_filter"
|
||||
avplay_deps="avcodec avformat swscale sdl"
|
||||
avplay_select="rdft"
|
||||
avprobe_deps="avcodec avformat"
|
||||
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
|
||||
ffserver_extralibs='$ldl'
|
||||
avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
|
||||
avserver_extralibs='$ldl'
|
||||
|
||||
doc_deps="texi2html"
|
||||
|
||||
@ -1637,7 +1637,7 @@ enable fastdiv
|
||||
enable ffmpeg
|
||||
enable avplay
|
||||
enable avprobe
|
||||
enable ffserver
|
||||
enable avserver
|
||||
enable network
|
||||
enable optimizations
|
||||
enable postproc
|
||||
@ -1648,7 +1648,7 @@ enable swscale_alpha
|
||||
|
||||
# build settings
|
||||
SHFLAGS='-shared -Wl,-soname,$$(@F)'
|
||||
FFSERVERLDFLAGS=-Wl,-E
|
||||
AVSERVERLDFLAGS=-Wl,-E
|
||||
LIBPREF="lib"
|
||||
LIBSUF=".a"
|
||||
FULLNAME='$(NAME)$(BUILDSUF)'
|
||||
@ -2355,7 +2355,7 @@ case $target_os in
|
||||
host_libs=
|
||||
;;
|
||||
sunos)
|
||||
FFSERVERLDFLAGS=""
|
||||
AVSERVERLDFLAGS=""
|
||||
SHFLAGS='-shared -Wl,-h,$$(@F)'
|
||||
enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
|
||||
network_extralibs="-lsocket -lnsl"
|
||||
@ -2400,7 +2400,7 @@ case $target_os in
|
||||
SLIBSUF=".dylib"
|
||||
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
|
||||
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
|
||||
FFSERVERLDFLAGS=-Wl,-bind_at_load
|
||||
AVSERVERLDFLAGS=-Wl,-bind_at_load
|
||||
objformat="macho"
|
||||
enabled x86_64 && objformat="macho64"
|
||||
enabled_any pic shared ||
|
||||
@ -2472,7 +2472,7 @@ case $target_os in
|
||||
add_cppflags -D_GNU_SOURCE
|
||||
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
|
||||
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
|
||||
FFSERVERLDFLAGS=""
|
||||
AVSERVERLDFLAGS=""
|
||||
LIBSUF="_s.a"
|
||||
SLIBPREF=""
|
||||
SLIBSUF=".dll"
|
||||
@ -3218,7 +3218,7 @@ AS_O=$CC_O
|
||||
CC_O=$CC_O
|
||||
DLLTOOL=$dlltool
|
||||
LDFLAGS=$LDFLAGS
|
||||
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
|
||||
AVSERVERLDFLAGS=$AVSERVERLDFLAGS
|
||||
SHFLAGS=$SHFLAGS
|
||||
YASMFLAGS=$YASMFLAGS
|
||||
BUILDSUF=$build_suffix
|
||||
|
@ -170,7 +170,7 @@ Seek to percentage in file corresponding to fraction of width.
|
||||
@settitle AVplay media player
|
||||
|
||||
@c man begin SEEALSO
|
||||
ffmpeg(1), avprobe(1), ffserver(1) and the Libav HTML documentation
|
||||
ffmpeg(1), avprobe(1), avserver(1) and the Libav HTML documentation
|
||||
@c man end
|
||||
|
||||
@c man begin AUTHORS
|
||||
|
@ -122,7 +122,7 @@ with name "STREAM".
|
||||
@settitle avprobe media prober
|
||||
|
||||
@c man begin SEEALSO
|
||||
ffmpeg(1), avplay(1), ffserver(1) and the Libav HTML documentation
|
||||
ffmpeg(1), avplay(1), avserver(1) and the Libav HTML documentation
|
||||
@c man end
|
||||
|
||||
@c man begin AUTHORS
|
||||
|
@ -12,7 +12,7 @@ BindAddress 0.0.0.0
|
||||
# MaxClients maximum limit.
|
||||
MaxHTTPConnections 2000
|
||||
|
||||
# Number of simultaneous requests that can be handled. Since FFServer
|
||||
# Number of simultaneous requests that can be handled. Since AVServer
|
||||
# is very fast, it is more likely that you will want to leave this high
|
||||
# and use MaxBandwidth, below.
|
||||
MaxClients 1000
|
||||
@ -25,24 +25,24 @@ MaxBandwidth 1000
|
||||
# '-' is the standard output.
|
||||
CustomLog -
|
||||
|
||||
# Suppress that if you want to launch ffserver as a daemon.
|
||||
# Suppress that if you want to launch avserver as a daemon.
|
||||
NoDaemon
|
||||
|
||||
|
||||
##################################################################
|
||||
# Definition of the live feeds. Each live feed contains one video
|
||||
# and/or audio sequence coming from an ffmpeg encoder or another
|
||||
# ffserver. This sequence may be encoded simultaneously with several
|
||||
# avserver. This sequence may be encoded simultaneously with several
|
||||
# codecs at several resolutions.
|
||||
|
||||
<Feed feed1.ffm>
|
||||
|
||||
# You must use 'ffmpeg' to send a live feed to ffserver. In this
|
||||
# You must use 'ffmpeg' to send a live feed to avserver. In this
|
||||
# example, you can type:
|
||||
#
|
||||
# ffmpeg http://localhost:8090/feed1.ffm
|
||||
|
||||
# ffserver can also do time shifting. It means that it can stream any
|
||||
# avserver can also do time shifting. It means that it can stream any
|
||||
# previously recorded live stream. The request should contain:
|
||||
# "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify
|
||||
# a path where the feed is stored on disk. You also specify the
|
||||
@ -69,7 +69,7 @@ ACL allow 127.0.0.1
|
||||
##################################################################
|
||||
# Now you can define each stream which will be generated from the
|
||||
# original audio and video stream. Each format has a filename (here
|
||||
# 'test1.mpg'). FFServer will send this stream when answering a
|
||||
# 'test1.mpg'). AVServer will send this stream when answering a
|
||||
# request containing this filename.
|
||||
|
||||
<Stream test1.mpg>
|
||||
@ -334,7 +334,7 @@ StartSendOnKey
|
||||
# multicast address with MulticastAddress. The port and the TTL can
|
||||
# also be set.
|
||||
#
|
||||
# An SDP file is automatically generated by ffserver by adding the
|
||||
# An SDP file is automatically generated by avserver by adding the
|
||||
# 'sdp' extension to the stream name (here
|
||||
# http://localhost:8090/test1-sdp.sdp). You should usually give this
|
||||
# file to your player to play the stream.
|
@ -1,8 +1,8 @@
|
||||
\input texinfo @c -*- texinfo -*-
|
||||
|
||||
@settitle ffserver Documentation
|
||||
@settitle avserver Documentation
|
||||
@titlepage
|
||||
@center @titlefont{ffserver Documentation}
|
||||
@center @titlefont{avserver Documentation}
|
||||
@end titlepage
|
||||
|
||||
@top
|
||||
@ -15,37 +15,37 @@ The generic syntax is:
|
||||
|
||||
@example
|
||||
@c man begin SYNOPSIS
|
||||
ffserver [options]
|
||||
avserver [options]
|
||||
@c man end
|
||||
@end example
|
||||
|
||||
@chapter Description
|
||||
@c man begin DESCRIPTION
|
||||
|
||||
ffserver is a streaming server for both audio and video. It supports
|
||||
avserver is a streaming server for both audio and video. It supports
|
||||
several live feeds, streaming from files and time shifting on live feeds
|
||||
(you can seek to positions in the past on each live feed, provided you
|
||||
specify a big enough feed storage in ffserver.conf).
|
||||
specify a big enough feed storage in avserver.conf).
|
||||
|
||||
ffserver runs in daemon mode by default; that is, it puts itself in
|
||||
avserver runs in daemon mode by default; that is, it puts itself in
|
||||
the background and detaches from its TTY, unless it is launched in
|
||||
debug mode or a NoDaemon option is specified in the configuration
|
||||
file.
|
||||
|
||||
This documentation covers only the streaming aspects of ffserver /
|
||||
This documentation covers only the streaming aspects of avserver /
|
||||
ffmpeg. All questions about parameters for ffmpeg, codec questions,
|
||||
etc. are not covered here. Read @file{ffmpeg-doc.html} for more
|
||||
information.
|
||||
|
||||
@section How does it work?
|
||||
|
||||
ffserver receives prerecorded files or FFM streams from some ffmpeg
|
||||
avserver receives prerecorded files or FFM streams from some ffmpeg
|
||||
instance as input, then streams them over RTP/RTSP/HTTP.
|
||||
|
||||
An ffserver instance will listen on some port as specified in the
|
||||
An avserver instance will listen on some port as specified in the
|
||||
configuration file. You can launch one or more instances of ffmpeg and
|
||||
send one or more FFM streams to the port where ffserver is expecting
|
||||
to receive them. Alternately, you can make ffserver launch such ffmpeg
|
||||
send one or more FFM streams to the port where avserver is expecting
|
||||
to receive them. Alternately, you can make avserver launch such ffmpeg
|
||||
instances at startup.
|
||||
|
||||
Input streams are called feeds, and each one is specified by a <Feed>
|
||||
@ -57,7 +57,7 @@ file.
|
||||
|
||||
@section Status stream
|
||||
|
||||
ffserver supports an HTTP interface which exposes the current status
|
||||
avserver supports an HTTP interface which exposes the current status
|
||||
of the server.
|
||||
|
||||
Simply point your browser to the address of the special status stream
|
||||
@ -100,7 +100,7 @@ I understand that FreeBSD systems work just fine as well.
|
||||
@section How do I make it work?
|
||||
|
||||
First, build the kit. It *really* helps to have installed LAME first. Then when
|
||||
you run the ffserver ./configure, make sure that you have the
|
||||
you run the avserver ./configure, make sure that you have the
|
||||
@code{--enable-libmp3lame} flag turned on.
|
||||
|
||||
LAME is important as it allows for streaming audio to Windows Media Player.
|
||||
@ -110,7 +110,7 @@ As a simple test, just run the following two command lines where INPUTFILE
|
||||
is some file which you can decode with ffmpeg:
|
||||
|
||||
@example
|
||||
./ffserver -f doc/ffserver.conf &
|
||||
./avserver -f doc/avserver.conf &
|
||||
./ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm
|
||||
@end example
|
||||
|
||||
@ -129,8 +129,8 @@ The same is true of AVI files.
|
||||
|
||||
@section What happens next?
|
||||
|
||||
You should edit the ffserver.conf file to suit your needs (in terms of
|
||||
frame rates etc). Then install ffserver and ffmpeg, write a script to start
|
||||
You should edit the avserver.conf file to suit your needs (in terms of
|
||||
frame rates etc). Then install avserver and ffmpeg, write a script to start
|
||||
them up, and off you go.
|
||||
|
||||
@section Troubleshooting
|
||||
@ -166,14 +166,14 @@ I suspect that the new one is not available unless you have installed WMP 7].
|
||||
|
||||
You can replay video from .ffm files that was recorded earlier.
|
||||
However, there are a number of caveats, including the fact that the
|
||||
ffserver parameters must match the original parameters used to record the
|
||||
file. If they do not, then ffserver deletes the file before recording into it.
|
||||
avserver parameters must match the original parameters used to record the
|
||||
file. If they do not, then avserver deletes the file before recording into it.
|
||||
(Now that I write this, it seems broken).
|
||||
|
||||
You can fiddle with many of the codec choices and encoding parameters, and
|
||||
there are a bunch more parameters that you cannot control. Post a message
|
||||
to the mailing list if there are some 'must have' parameters. Look in
|
||||
ffserver.conf for a list of the currently available controls.
|
||||
avserver.conf for a list of the currently available controls.
|
||||
|
||||
It will automatically generate the ASX or RAM files that are often used
|
||||
in browsers. These files are actually redirections to the underlying ASF
|
||||
@ -187,7 +187,7 @@ finishes.]
|
||||
|
||||
* When you connect to a live stream, most players (WMP, RA, etc) want to
|
||||
buffer a certain number of seconds of material so that they can display the
|
||||
signal continuously. However, ffserver (by default) starts sending data
|
||||
signal continuously. However, avserver (by default) starts sending data
|
||||
in realtime. This means that there is a pause of a few seconds while the
|
||||
buffering is being done by the player. The good news is that this can be
|
||||
cured by adding a '?buffer=5' to the end of the URL. This means that the
|
||||
@ -195,13 +195,13 @@ stream should start 5 seconds in the past -- and so the first 5 seconds
|
||||
of the stream are sent as fast as the network will allow. It will then
|
||||
slow down to real time. This noticeably improves the startup experience.
|
||||
|
||||
You can also add a 'Preroll 15' statement into the ffserver.conf that will
|
||||
You can also add a 'Preroll 15' statement into the avserver.conf that will
|
||||
add the 15 second prebuffering on all requests that do not otherwise
|
||||
specify a time. In addition, ffserver will skip frames until a key_frame
|
||||
specify a time. In addition, avserver will skip frames until a key_frame
|
||||
is found. This further reduces the startup delay by not transferring data
|
||||
that will be discarded.
|
||||
|
||||
* You may want to adjust the MaxBandwidth in the ffserver.conf to limit
|
||||
* You may want to adjust the MaxBandwidth in the avserver.conf to limit
|
||||
the amount of bandwidth consumed by live streams.
|
||||
|
||||
@section Why does the ?buffer / Preroll stop working after a time?
|
||||
@ -218,7 +218,7 @@ handled.
|
||||
@section Does the @code{?date=} stuff work.
|
||||
|
||||
Yes (subject to the limitation outlined above). Also note that whenever you
|
||||
start ffserver, it deletes the ffm file (if any parameters have changed),
|
||||
start avserver, it deletes the ffm file (if any parameters have changed),
|
||||
thus wiping out what you had recorded before.
|
||||
|
||||
The format of the @code{?date=xxxxxx} is fairly flexible. You should use one
|
||||
@ -246,26 +246,26 @@ For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
|
||||
|
||||
@table @option
|
||||
@item -f @var{configfile}
|
||||
Use @file{configfile} instead of @file{/etc/ffserver.conf}.
|
||||
Use @file{configfile} instead of @file{/etc/avserver.conf}.
|
||||
@item -n
|
||||
Enable no-launch mode. This option disables all the Launch directives
|
||||
within the various <Stream> sections. Since ffserver will not launch
|
||||
within the various <Stream> sections. Since avserver will not launch
|
||||
any ffmpeg instances, you will have to launch them manually.
|
||||
@item -d
|
||||
Enable debug mode. This option increases log verbosity, directs log
|
||||
messages to stdout and causes ffserver to run in the foreground
|
||||
messages to stdout and causes avserver to run in the foreground
|
||||
rather than as a daemon.
|
||||
@end table
|
||||
@c man end
|
||||
|
||||
@ignore
|
||||
|
||||
@setfilename ffserver
|
||||
@settitle ffserver video server
|
||||
@setfilename avserver
|
||||
@settitle avserver video server
|
||||
|
||||
@c man begin SEEALSO
|
||||
|
||||
ffmpeg(1), avplay(1), avprobe(1), the @file{ffmpeg/doc/ffserver.conf}
|
||||
ffmpeg(1), avplay(1), avprobe(1), the @file{ffmpeg/doc/avserver.conf}
|
||||
example and the Libav HTML documentation
|
||||
@c man end
|
||||
|
@ -164,7 +164,7 @@ Set the number of video frames to record.
|
||||
@item -r @var{fps}
|
||||
Set frame rate (Hz value, fraction or abbreviation), (default = 25).
|
||||
@item -s @var{size}
|
||||
Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source).
|
||||
Set frame size. The format is @samp{wxh} (avserver default = 160x128, ffmpeg default = same as source).
|
||||
The following abbreviations are recognized:
|
||||
@table @samp
|
||||
@item sqcif
|
||||
@ -726,7 +726,7 @@ Set RTP payload size in bytes.
|
||||
Read input at native frame rate. Mainly used to simulate a grab device.
|
||||
@item -loop_input
|
||||
Loop over the input stream. Currently it works only for image
|
||||
streams. This option is used for automatic FFserver testing.
|
||||
streams. This option is used for automatic AVserver testing.
|
||||
This option is deprecated, use -loop.
|
||||
@item -loop_output @var{number_of_times}
|
||||
Repeatedly loop output for formats that support looping such as animated GIF
|
||||
@ -1079,7 +1079,7 @@ file to which you want to add them.
|
||||
@settitle ffmpeg video converter
|
||||
|
||||
@c man begin SEEALSO
|
||||
avplay(1), avprobe(1), ffserver(1) and the Libav HTML documentation
|
||||
avplay(1), avprobe(1), avserver(1) and the Libav HTML documentation
|
||||
@c man end
|
||||
|
||||
@c man begin AUTHORS
|
||||
|
@ -91,7 +91,7 @@ library:
|
||||
@item Electronic Arts cdata @tab @tab X
|
||||
@item Electronic Arts Multimedia @tab @tab X
|
||||
@tab Used in various EA games; files have extensions like WVE and UV2.
|
||||
@item FFM (FFserver live feed) @tab X @tab X
|
||||
@item FFM (AVserver live feed) @tab X @tab X
|
||||
@item Flash (SWF) @tab X @tab X
|
||||
@item Flash 9 (AVM2) @tab X @tab X
|
||||
@tab Only embedded audio is decoded.
|
||||
|
8
ffmpeg.c
8
ffmpeg.c
@ -691,7 +691,7 @@ static OutputStream *new_output_stream(AVFormatContext *oc, int file_idx, AVCode
|
||||
return ost;
|
||||
}
|
||||
|
||||
static int read_ffserver_streams(AVFormatContext *s, const char *filename)
|
||||
static int read_avserver_streams(AVFormatContext *s, const char *filename)
|
||||
{
|
||||
int i, err;
|
||||
AVFormatContext *ic = NULL;
|
||||
@ -3766,9 +3766,9 @@ static void opt_output_file(const char *filename)
|
||||
|
||||
if (!strcmp(file_oformat->name, "ffm") &&
|
||||
av_strstart(filename, "http:", NULL)) {
|
||||
/* special case for files sent to ffserver: we get the stream
|
||||
parameters from ffserver */
|
||||
int err = read_ffserver_streams(oc, filename);
|
||||
/* special case for files sent to avserver: we get the stream
|
||||
parameters from avserver */
|
||||
int err = read_avserver_streams(oc, filename);
|
||||
if (err < 0) {
|
||||
print_error(filename, err);
|
||||
ffmpeg_exit(1);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* FFM (ffserver live feed) common header
|
||||
* FFM (avserver live feed) common header
|
||||
* Copyright (c) 2001 Fabrice Bellard
|
||||
*
|
||||
* This file is part of Libav.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* FFM (ffserver live feed) demuxer
|
||||
* FFM (avserver live feed) demuxer
|
||||
* Copyright (c) 2001 Fabrice Bellard
|
||||
*
|
||||
* This file is part of Libav.
|
||||
@ -23,7 +23,7 @@
|
||||
#include "libavutil/intfloat_readwrite.h"
|
||||
#include "avformat.h"
|
||||
#include "ffm.h"
|
||||
#if CONFIG_FFSERVER
|
||||
#if CONFIG_AVSERVER
|
||||
#include <unistd.h>
|
||||
|
||||
int64_t ffm_read_write_index(int fd)
|
||||
@ -55,7 +55,7 @@ void ffm_set_write_index(AVFormatContext *s, int64_t pos, int64_t file_size)
|
||||
ffm->write_index = pos;
|
||||
ffm->file_size = file_size;
|
||||
}
|
||||
#endif // CONFIG_FFSERVER
|
||||
#endif // CONFIG_AVSERVER
|
||||
|
||||
static int ffm_is_avail_data(AVFormatContext *s, int size)
|
||||
{
|
||||
@ -510,7 +510,7 @@ static int ffm_probe(AVProbeData *p)
|
||||
|
||||
AVInputFormat ff_ffm_demuxer = {
|
||||
.name = "ffm",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FFM (FFserver live feed) format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FFM (AVserver live feed) format"),
|
||||
.priv_data_size = sizeof(FFMContext),
|
||||
.read_probe = ffm_probe,
|
||||
.read_header = ffm_read_header,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* FFM (ffserver live feed) muxer
|
||||
* FFM (avserver live feed) muxer
|
||||
* Copyright (c) 2001 Fabrice Bellard
|
||||
*
|
||||
* This file is part of Libav.
|
||||
@ -242,7 +242,7 @@ static int ffm_write_trailer(AVFormatContext *s)
|
||||
|
||||
AVOutputFormat ff_ffm_muxer = {
|
||||
.name = "ffm",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FFM (FFserver live feed) format"),
|
||||
.long_name = NULL_IF_CONFIG_SMALL("FFM (AVserver live feed) format"),
|
||||
.mime_type = "",
|
||||
.extensions = "ffm",
|
||||
.priv_data_size = sizeof(FFMContext),
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
/* Multipart JPEG */
|
||||
|
||||
#define BOUNDARY_TAG "ffserver"
|
||||
#define BOUNDARY_TAG "avserver"
|
||||
|
||||
static int mpjpeg_write_header(AVFormatContext *s)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user