\input texinfo @c -*- texinfo -*-
@documentencoding UTF-8

@settitle ffserver Documentation
@titlepage
@center @titlefont{ffserver Documentation}
@end titlepage

@top

@contents

@chapter Synopsis

ffserver [@var{options}]

@chapter Description
@c man begin DESCRIPTION

@command{ffserver} 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.

@command{ffserver} is configured through a configuration file, which
is read at startup. If not explicitly specified, it will read from
@file{/etc/ffserver.conf}.

@command{ffserver} receives prerecorded files or FFM streams from some
@command{ffmpeg} instance as input, then streams them over
RTP/RTSP/HTTP.

An @command{ffserver} instance will listen on some port as specified
in the configuration file. You can launch one or more instances of
@command{ffmpeg} and send one or more FFM streams to the port where
ffserver is expecting to receive them. Alternately, you can make
@command{ffserver} launch such @command{ffmpeg} instances at startup.

Input streams are called feeds, and each one is specified by a
@code{<Feed>} section in the configuration file.

For each feed you can have different output streams in various
formats, each one specified by a @code{<Stream>} section in the
configuration file.

@chapter Detailed description

@command{ffserver} works by forwarding streams encoded by
@command{ffmpeg}, or pre-recorded streams which are read from disk.

Precisely, @command{ffserver} acts as an HTTP server, accepting POST
requests from @command{ffmpeg} to acquire the stream to publish, and
serving RTSP clients or HTTP clients GET requests with the stream
media content.

A feed is an @ref{FFM} stream created by @command{ffmpeg}, and sent to
a port where @command{ffserver} is listening.

Each feed is identified by a unique name, corresponding to the name
of the resource published on @command{ffserver}, and is configured by
a dedicated @code{Feed} section in the configuration file.

The feed publish URL is given by:
@example
http://@var{ffserver_ip_address}:@var{http_port}/@var{feed_name}
@end example

where @var{ffserver_ip_address} is the IP address of the machine where
@command{ffserver} is installed, @var{http_port} is the port number of
the HTTP server (configured through the @option{HTTPPort} option), and
@var{feed_name} is the name of the corresponding feed defined in the
configuration file.

Each feed is associated to a file which is stored on disk. This stored
file is used to send pre-recorded data to a player as fast as
possible when new content is added in real-time to the stream.

A "live-stream" or "stream" is a resource published by
@command{ffserver}, and made accessible through the HTTP protocol to
clients.

A stream can be connected to a feed, or to a file. In the first case,
the published stream is forwarded from the corresponding feed
generated by a running instance of @command{ffmpeg}, in the second
case the stream is read from a pre-recorded file.

Each stream is identified by a unique name, corresponding to the name
of the resource served by @command{ffserver}, and is configured by
a dedicated @code{Stream} section in the configuration file.

The stream access HTTP URL is given by:
@example
http://@var{ffserver_ip_address}:@var{http_port}/@var{stream_name}[@var{options}]
@end example

The stream access RTSP URL is given by:
@example
http://@var{ffserver_ip_address}:@var{rtsp_port}/@var{stream_name}[@var{options}]
@end example

@var{stream_name} is the name of the corresponding stream defined in
the configuration file. @var{options} is a list of options specified
after the URL which affects how the stream is served by
@command{ffserver}. @var{http_port} and @var{rtsp_port} are the HTTP
and RTSP ports configured with the options @var{HTTPPort} and
@var{RTSPPort} respectively.

In case the stream is associated to a feed, the encoding parameters
must be configured in the stream configuration. They are sent to
@command{ffmpeg} when setting up the encoding. This allows
@command{ffserver} to define the encoding parameters used by
the @command{ffmpeg} encoders.

The @command{ffmpeg} @option{override_ffserver} commandline option
allows one to override the encoding parameters set by the server.

Multiple streams can be connected to the same feed.

For example, you can have a situation described by the following
graph:

@verbatim
               _________       __________
              |         |     |          |
ffmpeg 1 -----| feed 1  |-----| stream 1 |
    \         |_________|\    |__________|
     \                    \
      \                    \   __________
       \                    \ |          |
        \                    \| stream 2 |
         \                    |__________|
          \
           \   _________       __________
            \ |         |     |          |
             \| feed 2  |-----| stream 3 |
              |_________|     |__________|

               _________       __________
              |         |     |          |
ffmpeg 2 -----| feed 3  |-----| stream 4 |
              |_________|     |__________|

               _________       __________
              |         |     |          |
              | file 1  |-----| stream 5 |
              |_________|     |__________|

@end verbatim

@anchor{FFM}
@section FFM, FFM2 formats

FFM and FFM2 are formats used by ffserver. They allow storing a wide variety of
video and audio streams and encoding options, and can store a moving time segment
of an infinite movie or a whole movie.

FFM is version specific, and there is limited compatibility of FFM files
generated by one version of ffmpeg/ffserver and another version of
ffmpeg/ffserver. It may work but it is not guaranteed to work.

FFM2 is extensible while maintaining compatibility and should work between
differing versions of tools. FFM2 is the default.

@section Status stream

@command{ffserver} supports an HTTP interface which exposes the
current status of the server.

Simply point your browser to the address of the special status stream
specified in the configuration file.

For example if you have:
@example
<Stream status.html>
Format status

# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
@end example

then the server will post a page with the status information when
the special stream @file{status.html} is requested.

@section How do I make it work?

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 &
ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm
@end example

At this point you should be able to go to your Windows machine and fire up
Windows Media Player (WMP). Go to Open URL and enter

@example
    http://<linuxbox>:8090/test.asf
@end example

You should (after a short delay) see video and hear audio.

WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to
transfer the entire file before starting to play.
The same is true of AVI files.

You should edit the @file{ffserver.conf} file to suit your needs (in
terms of frame rates etc). Then install @command{ffserver} and
@command{ffmpeg}, write a script to start them up, and off you go.

@section What else can it do?

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.
(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.

It will automatically generate the ASX or RAM files that are often used
in browsers. These files are actually redirections to the underlying ASF
or RM file. The reason for this is that the browser often fetches the
entire file before starting up the external viewer. The redirection files
are very small and can be transferred quickly. [The stream itself is
often 'infinite' and thus the browser tries to download it and never
finishes.]

@section Tips

* 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
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
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
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
is found. This further reduces the startup delay by not transferring data
that will be discarded.

@section Why does the ?buffer / Preroll stop working after a time?

It turns out that (on my machine at least) the number of frames successfully
grabbed is marginally less than the number that ought to be grabbed. This
means that the timestamp in the encoded data stream gets behind realtime.
This means that if you say 'Preroll 10', then when the stream gets 10
or more seconds behind, there is no Preroll left.

Fixing this requires a change in the internals of how timestamps are
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),
thus wiping out what you had recorded before.

The format of the @code{?date=xxxxxx} is fairly flexible. You should use one
of the following formats (the 'T' is literal):

@example
* YYYY-MM-DDTHH:MM:SS     (localtime)
* YYYY-MM-DDTHH:MM:SSZ    (UTC)
@end example

You can omit the YYYY-MM-DD, and then it refers to the current day. However
note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this
may be in the future and so is unlikely to be useful.

You use this by adding the ?date= to the end of the URL for the stream.
For example:   @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
@c man end

@chapter Options
@c man begin OPTIONS

@include fftools-common-opts.texi

@section Main options

@table @option
@item -f @var{configfile}
Read configuration file @file{configfile}. If not specified it will
read by default from @file{/etc/ffserver.conf}.

@item -n
Enable no-launch mode. This option disables all the @code{Launch}
directives within the various @code{<Feed>} sections. Since
@command{ffserver} will not launch any @command{ffmpeg} instances, you
will have to launch them manually.

@item -d
Enable debug mode. This option increases log verbosity, and directs
log messages to stdout. When specified, the @option{CustomLog} option
is ignored.
@end table

@chapter Configuration file syntax

@command{ffserver} reads a configuration file containing global
options and settings for each stream and feed.

The configuration file consists of global options and dedicated
sections, which must be introduced by "<@var{SECTION_NAME}
@var{ARGS}>" on a separate line and must be terminated by a line in
the form "</@var{SECTION_NAME}>". @var{ARGS} is optional.

Currently the following sections are recognized: @samp{Feed},
@samp{Stream}, @samp{Redirect}.

A line starting with @code{#} is ignored and treated as a comment.

Name of options and sections are case-insensitive.

@section ACL syntax
An ACL (Access Control List) specifies the address which are allowed
to access a given stream, or to write a given feed.

It accepts the folling forms
@itemize
@item
Allow/deny access to @var{address}.
@example
ACL ALLOW <address>
ACL DENY <address>
@end example

@item
Allow/deny access to ranges of addresses from @var{first_address} to
@var{last_address}.
@example
ACL ALLOW <first_address> <last_address>
ACL DENY <first_address> <last_address>
@end example
@end itemize

You can repeat the ACL allow/deny as often as you like. It is on a per
stream basis. The first match defines the action. If there are no matches,
then the default is the inverse of the last ACL statement.

Thus 'ACL allow localhost' only allows access from localhost.
'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and
allow everybody else.

@section Global options
@table @option
@item HTTPPort @var{port_number}
@item Port @var{port_number}
@item RTSPPort @var{port_number}

@var{HTTPPort} sets the HTTP server listening TCP port number,
@var{RTSPPort} sets the RTSP server listening TCP port number.

@var{Port} is the equivalent of @var{HTTPPort} and is deprecated.

You must select a different port from your standard HTTP web server if
it is running on the same computer.

If not specified, no corresponding server will be created.

@item HTTPBindAddress @var{ip_address}
@item BindAddress @var{ip_address}
@item RTSPBindAddress @var{ip_address}
Set address on which the HTTP/RTSP server is bound. Only useful if you
have several network interfaces.

@var{BindAddress} is the equivalent of @var{HTTPBindAddress} and is
deprecated.

@item MaxHTTPConnections @var{n}
Set number of simultaneous HTTP connections that can be handled. It
has to be defined @emph{before} the @option{MaxClients} parameter,
since it defines the @option{MaxClients} maximum limit.

Default value is 2000.

@item MaxClients @var{n}
Set number of simultaneous requests that can be handled. Since
@command{ffserver} is very fast, it is more likely that you will want
to leave this high and use @option{MaxBandwidth}.

Default value is 5.

@item MaxBandwidth @var{kbps}
Set the maximum amount of kbit/sec that you are prepared to consume
when streaming to clients.

Default value is 1000.

@item CustomLog @var{filename}
Set access log file (uses standard Apache log file format). '-' is the
standard output.

If not specified @command{ffserver} will produce no log.

In case the commandline option @option{-d} is specified this option is
ignored, and the log is written to standard output.

@item NoDaemon
Set no-daemon mode. This option is currently ignored since now
@command{ffserver} will always work in no-daemon mode, and is
deprecated.

@item UseDefaults
@item NoDefaults
Control whether default codec options are used for the all streams or not.
Each stream may overwrite this setting for its own. Default is @var{UseDefaults}.
The lastest occurrence overrides previous if multiple definitions.
@end table

@section Feed section

A Feed section defines a feed provided to @command{ffserver}.

Each live feed contains one video and/or audio sequence coming from an
@command{ffmpeg} encoder or another @command{ffserver}. This sequence
may be encoded simultaneously with several codecs at several
resolutions.

A feed instance specification is introduced by a line in the form:
@example
<Feed FEED_FILENAME>
@end example

where @var{FEED_FILENAME} specifies the unique name of the FFM stream.

The following options are recognized within a Feed section.

@table @option
@item File @var{filename}
@item ReadOnlyFile @var{filename}
Set the path where the feed file is stored on disk.

If not specified, the @file{/tmp/FEED.ffm} is assumed, where
@var{FEED} is the feed name.

If @option{ReadOnlyFile} is used the file is marked as read-only and
it will not be deleted or updated.

@item Truncate
Truncate the feed file, rather than appending to it. By default
@command{ffserver} will append data to the file, until the maximum
file size value is reached (see @option{FileMaxSize} option).

@item FileMaxSize @var{size}
Set maximum size of the feed file in bytes. 0 means unlimited. The
postfixes @code{K} (2^10), @code{M} (2^20), and @code{G} (2^30) are
recognized.

Default value is 5M.

@item Launch @var{args}
Launch an @command{ffmpeg} command when creating @command{ffserver}.

@var{args} must be a sequence of arguments to be provided to an
@command{ffmpeg} instance. The first provided argument is ignored, and
it is replaced by a path with the same dirname of the @command{ffserver}
instance, followed by the remaining argument and terminated with a
path corresponding to the feed.

When the launched process exits, @command{ffserver} will launch
another program instance.

In case you need a more complex @command{ffmpeg} configuration,
e.g. if you need to generate multiple FFM feeds with a single
@command{ffmpeg} instance, you should launch @command{ffmpeg} by hand.

This option is ignored in case the commandline option @option{-n} is
specified.

@item ACL @var{spec}
Specify the list of IP address which are allowed or denied to write
the feed. Multiple ACL options can be specified.
@end table

@section Stream section

A Stream section defines a stream provided by @command{ffserver}, and
identified by a single name.

The stream is sent when answering a request containing the stream
name.

A stream section must be introduced by the line:
@example
<Stream STREAM_NAME>
@end example

where @var{STREAM_NAME} specifies the unique name of the stream.

The following options are recognized within a Stream section.

Encoding options are marked with the @emph{encoding} tag, and they are
used to set the encoding parameters, and are mapped to libavcodec
encoding options. Not all encoding options are supported, in
particular it is not possible to set encoder private options. In order
to override the encoding options specified by @command{ffserver}, you
can use the @command{ffmpeg} @option{override_ffserver} commandline
option.

Only one of the @option{Feed} and @option{File} options should be set.

@table @option
@item Feed @var{feed_name}
Set the input feed. @var{feed_name} must correspond to an existing
feed defined in a @code{Feed} section.

When this option is set, encoding options are used to setup the
encoding operated by the remote @command{ffmpeg} process.

@item File @var{filename}
Set the filename of the pre-recorded input file to stream.

When this option is set, encoding options are ignored and the input
file content is re-streamed as is.

@item Format @var{format_name}
Set the format of the output stream.

Must be the name of a format recognized by FFmpeg. If set to
@samp{status}, it is treated as a status stream.

@item InputFormat @var{format_name}
Set input format. If not specified, it is automatically guessed.

@item Preroll @var{n}
Set this to the number of seconds backwards in time to start. Note that
most players will buffer 5-10 seconds of video, and also you need to allow
for a keyframe to appear in the data stream.

Default value is 0.

@item StartSendOnKey
Do not send stream until it gets the first key frame. By default
@command{ffserver} will send data immediately.

@item MaxTime @var{n}
Set the number of seconds to run. This value set the maximum duration
of the stream a client will be able to receive.

A value of 0 means that no limit is set on the stream duration.

@item ACL @var{spec}
Set ACL for the stream.

@item DynamicACL @var{spec}

@item RTSPOption @var{option}

@item MulticastAddress @var{address}

@item MulticastPort @var{port}

@item MulticastTTL @var{integer}

@item NoLoop

@item FaviconURL @var{url}
Set favicon (favourite icon) for the server status page. It is ignored
for regular streams.

@item Author @var{value}
@item Comment @var{value}
@item Copyright @var{value}
@item Title @var{value}
Set metadata corresponding to the option. All these options are
deprecated in favor of @option{Metadata}.

@item Metadata @var{key} @var{value}
Set metadata value on the output stream.

@item UseDefaults
@item NoDefaults
Control whether default codec options are used for the stream or not.
Default is @var{UseDefaults} unless disabled globally.

@item NoAudio
@item NoVideo
Suppress audio/video.

@item AudioCodec @var{codec_name} (@emph{encoding,audio})
Set audio codec.

@item AudioBitRate @var{rate} (@emph{encoding,audio})
Set bitrate for the audio stream in kbits per second.

@item AudioChannels @var{n} (@emph{encoding,audio})
Set number of audio channels.

@item AudioSampleRate @var{n} (@emph{encoding,audio})
Set sampling frequency for audio. When using low bitrates, you should
lower this frequency to 22050 or 11025. The supported frequencies
depend on the selected audio codec.

@item AVOptionAudio [@var{codec}:]@var{option} @var{value} (@emph{encoding,audio})
Set generic or private option for audio stream.
Private option must be prefixed with codec name or codec must be defined before.

@item AVPresetAudio @var{preset} (@emph{encoding,audio})
Set preset for audio stream.

@item VideoCodec @var{codec_name} (@emph{encoding,video})
Set video codec.

@item VideoBitRate @var{n} (@emph{encoding,video})
Set bitrate for the video stream in kbits per second.

@item VideoBitRateRange @var{range} (@emph{encoding,video})
Set video bitrate range.

A range must be specified in the form @var{minrate}-@var{maxrate}, and
specifies the @option{minrate} and @option{maxrate} encoding options
expressed in kbits per second.

@item VideoBitRateRangeTolerance @var{n} (@emph{encoding,video})
Set video bitrate tolerance in kbits per second.

@item PixelFormat @var{pixel_format} (@emph{encoding,video})
Set video pixel format.

@item Debug @var{integer} (@emph{encoding,video})
Set video @option{debug} encoding option.

@item Strict @var{integer} (@emph{encoding,video})
Set video @option{strict} encoding option.

@item VideoBufferSize @var{n} (@emph{encoding,video})
Set ratecontrol buffer size, expressed in KB.

@item VideoFrameRate @var{n} (@emph{encoding,video})
Set number of video frames per second.

@item VideoSize (@emph{encoding,video})
Set size of the video frame, must be an abbreviation or in the form
@var{W}x@var{H}.  See @ref{video size syntax,,the Video size section
in the ffmpeg-utils(1) manual,ffmpeg-utils}.

Default value is @code{160x128}.

@item VideoIntraOnly (@emph{encoding,video})
Transmit only intra frames (useful for low bitrates, but kills frame rate).

@item VideoGopSize @var{n} (@emph{encoding,video})
If non-intra only, an intra frame is transmitted every VideoGopSize
frames. Video synchronization can only begin at an intra frame.

@item VideoTag @var{tag} (@emph{encoding,video})
Set video tag.

@item VideoHighQuality (@emph{encoding,video})
@item Video4MotionVector (@emph{encoding,video})

@item BitExact (@emph{encoding,video})
Set bitexact encoding flag.

@item IdctSimple (@emph{encoding,video})
Set simple IDCT algorithm.

@item Qscale @var{n} (@emph{encoding,video})
Enable constant quality encoding, and set video qscale (quantization
scale) value, expressed in @var{n} QP units.

@item VideoQMin @var{n} (@emph{encoding,video})
@item VideoQMax @var{n} (@emph{encoding,video})
Set video qmin/qmax.

@item VideoQDiff @var{integer} (@emph{encoding,video})
Set video @option{qdiff} encoding option.

@item LumiMask @var{float} (@emph{encoding,video})
@item DarkMask @var{float} (@emph{encoding,video})
Set @option{lumi_mask}/@option{dark_mask} encoding options.

@item AVOptionVideo [@var{codec}:]@var{option} @var{value} (@emph{encoding,video})
Set generic or private option for video stream.
Private option must be prefixed with codec name or codec must be defined before.

@item AVPresetVideo @var{preset} (@emph{encoding,video})
Set preset for video stream.

@var{preset} must be the path of a preset file.
@end table

@subsection Server status stream

A server status stream is a special stream which is used to show
statistics about the @command{ffserver} operations.

It must be specified setting the option @option{Format} to
@samp{status}.

@section Redirect section

A redirect section specifies where to redirect the requested URL to
another page.

A redirect section must be introduced by the line:
@example
<Redirect NAME>
@end example

where @var{NAME} is the name of the page which should be redirected.

It only accepts the option @option{URL}, which specify the redirection
URL.

@chapter Stream examples

@itemize
@item
Multipart JPEG
@example
<Stream test.mjpg>
Feed feed1.ffm
Format mpjpeg
VideoFrameRate 2
VideoIntraOnly
NoAudio
Strict -1
</Stream>
@end example

@item
Single JPEG
@example
<Stream test.jpg>
Feed feed1.ffm
Format jpeg
VideoFrameRate 2
VideoIntraOnly
VideoSize 352x240
NoAudio
Strict -1
</Stream>
@end example

@item
Flash
@example
<Stream test.swf>
Feed feed1.ffm
Format swf
VideoFrameRate 2
VideoIntraOnly
NoAudio
</Stream>
@end example

@item
ASF compatible
@example
<Stream test.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
AudioBitRate 64
StartSendOnKey
</Stream>
@end example

@item
MP3 audio
@example
<Stream test.mp3>
Feed feed1.ffm
Format mp2
AudioCodec mp3
AudioBitRate 64
AudioChannels 1
AudioSampleRate 44100
NoVideo
</Stream>
@end example

@item
Ogg Vorbis audio
@example
<Stream test.ogg>
Feed feed1.ffm
Metadata title "Stream title"
AudioBitRate 64
AudioChannels 2
AudioSampleRate 44100
NoVideo
</Stream>
@end example

@item
Real with audio only at 32 kbits
@example
<Stream test.ra>
Feed feed1.ffm
Format rm
AudioBitRate 32
NoVideo
</Stream>
@end example

@item
Real with audio and video at 64 kbits
@example
<Stream test.rm>
Feed feed1.ffm
Format rm
AudioBitRate 32
VideoBitRate 128
VideoFrameRate 25
VideoGopSize 25
</Stream>
@end example

@item
For stream coming from a file: you only need to set the input filename
and optionally a new format.

@example
<Stream file.rm>
File "/usr/local/httpd/htdocs/tlive.rm"
NoAudio
</Stream>
@end example

@example
<Stream file.asf>
File "/usr/local/httpd/htdocs/test.asf"
NoAudio
Metadata author "Me"
Metadata copyright "Super MegaCorp"
Metadata title "Test stream from disk"
Metadata comment "Test comment"
</Stream>
@end example
@end itemize

@c man end

@include config.texi
@ifset config-all
@ifset config-avutil
@include utils.texi
@end ifset
@ifset config-avcodec
@include codecs.texi
@include bitstream_filters.texi
@end ifset
@ifset config-avformat
@include formats.texi
@include protocols.texi
@end ifset
@ifset config-avdevice
@include devices.texi
@end ifset
@ifset config-swresample
@include resampler.texi
@end ifset
@ifset config-swscale
@include scaler.texi
@end ifset
@ifset config-avfilter
@include filters.texi
@end ifset
@end ifset

@chapter See Also

@ifhtml
@ifset config-all
@url{ffserver.html,ffserver},
@end ifset
@ifset config-not-all
@url{ffserver-all.html,ffserver-all},
@end ifset
the @file{doc/ffserver.conf} example,
@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
@url{ffmpeg-utils.html,ffmpeg-utils},
@url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{ffmpeg-resampler.html,ffmpeg-resampler},
@url{ffmpeg-codecs.html,ffmpeg-codecs},
@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters},
@url{ffmpeg-formats.html,ffmpeg-formats},
@url{ffmpeg-devices.html,ffmpeg-devices},
@url{ffmpeg-protocols.html,ffmpeg-protocols},
@url{ffmpeg-filters.html,ffmpeg-filters}
@end ifhtml

@ifnothtml
@ifset config-all
ffserver(1),
@end ifset
@ifset config-not-all
ffserver-all(1),
@end ifset
the @file{doc/ffserver.conf} example, ffmpeg(1), ffplay(1), ffprobe(1),
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
@end ifnothtml

@include authors.texi

@ignore

@setfilename ffserver
@settitle ffserver video server

@end ignore

@bye
