You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
doc/ffserver: document configuration syntax
While still incomplete, this is better than nothing at all.
This commit is contained in:
@@ -244,6 +244,404 @@ any ffmpeg instances, you will have to launch them manually.
|
|||||||
Enable debug mode. This option increases log verbosity, directs log
|
Enable debug mode. This option increases log verbosity, directs log
|
||||||
messages to stdout.
|
messages to stdout.
|
||||||
@end table
|
@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.
|
||||||
|
|
||||||
|
@section Global options
|
||||||
|
@table @option
|
||||||
|
@item Port @var{port_number}
|
||||||
|
@item RTSPPort @var{port_number}
|
||||||
|
|
||||||
|
Set TCP port number on which the HTTP/RTSP server is listening. 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 BindAddress @var{ip_address}
|
||||||
|
@item RTSPBindAddress @var{ip_address}
|
||||||
|
Set address on which the HTTP/RTPS server is bound. Only useful if you
|
||||||
|
have several network interfaces.
|
||||||
|
|
||||||
|
@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.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@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 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}
|
||||||
|
Set the path where the file is stored on disk.
|
||||||
|
|
||||||
|
@item FileMaxSize @var{size}
|
||||||
|
Set maximum size of the feed. 0 means unlimited.
|
||||||
|
|
||||||
|
@item ReadOnlyFile @var{filename}
|
||||||
|
Mark the file as readonly and it will not be deleted or updated.
|
||||||
|
|
||||||
|
@item Launch
|
||||||
|
|
||||||
|
@item ACL
|
||||||
|
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.
|
||||||
|
|
||||||
|
@table @option
|
||||||
|
@item Feed @var{feed_name}
|
||||||
|
Set the input feed.
|
||||||
|
|
||||||
|
Must be specified.
|
||||||
|
|
||||||
|
@item Format @var{format_name}
|
||||||
|
Set the format of the stream.
|
||||||
|
|
||||||
|
Must be the name of a format recognized by FFmpeg.
|
||||||
|
|
||||||
|
@item AudioBitRate @var{rate}
|
||||||
|
Set bitrate for the audio stream in KB per second.
|
||||||
|
|
||||||
|
@item AudioChannels @var{n}
|
||||||
|
Set number of audio channels.
|
||||||
|
|
||||||
|
@item AudioSampleRate @var{n}
|
||||||
|
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 VideoBitRate @var{n}
|
||||||
|
Set bitrate for the video stream in KB per second.
|
||||||
|
|
||||||
|
@item VideoBitRateRange @var{range}
|
||||||
|
Set video bitrate range.
|
||||||
|
|
||||||
|
@item VideoBitRateRangeTolerance @var{n}
|
||||||
|
|
||||||
|
@item PixelFormat
|
||||||
|
Set video pixel format.
|
||||||
|
|
||||||
|
@item VideoBufferSize @var{n}
|
||||||
|
Set ratecontrol buffer size.
|
||||||
|
|
||||||
|
@item VideoFrameRate @var{n}
|
||||||
|
Set number of video frames per second.
|
||||||
|
|
||||||
|
@item VideoSize
|
||||||
|
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
|
||||||
|
Transmit only intra frames (useful for low bitrates, but kills frame rate).
|
||||||
|
|
||||||
|
@item VideoGopSize @var{n}
|
||||||
|
If non-intra only, an intra frame is transmitted every VideoGopSize
|
||||||
|
frames. Video synchronization can only begin at an intra frame.
|
||||||
|
|
||||||
|
@item VideoHighQuality
|
||||||
|
@item Video4MotionVector
|
||||||
|
|
||||||
|
@item AudioCodec @var{codec_name}
|
||||||
|
@item VideoCodec @var{codec_name}
|
||||||
|
Set audio/video codec.
|
||||||
|
|
||||||
|
@item NoAudio
|
||||||
|
@item NoVideo
|
||||||
|
Suppress audio/video.
|
||||||
|
|
||||||
|
@item VideoQMin @var{n}
|
||||||
|
@item VideoQMax @var{n}
|
||||||
|
Set video qmin/qmax.
|
||||||
|
|
||||||
|
@item AVOptionAudio @var{option} @var{value}
|
||||||
|
@item AVOptionVideo @var{option} @var{value}
|
||||||
|
Set generic option for audio/video stream.
|
||||||
|
|
||||||
|
@item AVPresetAudio @var{preset}
|
||||||
|
@item AVOptionVideo @var{preset}
|
||||||
|
Set preset for audio/video stream.
|
||||||
|
|
||||||
|
@var{preset} must be the path of a preset file.
|
||||||
|
|
||||||
|
@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.
|
||||||
|
|
||||||
|
@item ACL @var{spec}
|
||||||
|
Set ACL for the stream.
|
||||||
|
|
||||||
|
@item Author @var{value}
|
||||||
|
@item Comment @var{value}
|
||||||
|
@item Copyright @var{value}
|
||||||
|
@item Title @var{value}
|
||||||
|
Set metadata corresponding to the option.
|
||||||
|
|
||||||
|
@item StartSendOnKey
|
||||||
|
Do not send stream until it gets the first key frame. By default
|
||||||
|
@command{ffserver} will send data immediately.
|
||||||
|
|
||||||
|
@item FaviconURL @var{url}
|
||||||
|
Set favicon (favourite icon) for the server status page. It is ignored
|
||||||
|
for regular streams.
|
||||||
|
@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
|
||||||
|
@code{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
|
||||||
|
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
|
||||||
|
NoAudio
|
||||||
|
</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
|
||||||
|
NoAudio
|
||||||
|
</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
|
||||||
|
Author "Me"
|
||||||
|
Copyright "Super MegaCorp"
|
||||||
|
Title "Test stream from disk"
|
||||||
|
Comment "Test comment"
|
||||||
|
</Stream>
|
||||||
|
@end example
|
||||||
|
@end itemize
|
||||||
|
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
@include config.texi
|
@include config.texi
|
||||||
|
Reference in New Issue
Block a user