Merge commit '489e6add4478b0f5717dbf644234c6f3a3baf02c'
[ffmpeg.git] / doc / ffserver.texi
index 9c4703a..ad48f47 100644 (file)
@@ -1,4 +1,5 @@
 \input texinfo @c -*- texinfo -*-
+@documentencoding UTF-8
 
 @settitle ffserver Documentation
 @titlepage
@@ -16,11 +17,14 @@ 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 in
-@file{ffserver.conf}).
+@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
@@ -39,10 +43,128 @@ 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
 
-ffserver supports an HTTP interface which exposes the current status
-of the server.
+@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.
@@ -61,27 +183,8 @@ ACL allow 192.168.0.0 192.168.255.255
 then the server will post a page with the status information when
 the special stream @file{status.html} is requested.
 
-@section What can this do?
-
-When properly configured and running, you can capture video and audio in real
-time from a suitable capture card, and stream it out over the Internet to
-either Windows Media Player or RealAudio player (with some restrictions).
-
-It can also stream from files, though that is currently broken. Very often, a
-web server can be used to serve up the files just as well.
-
-It can stream prerecorded video from .ffm files, though it is somewhat tricky
-to make it work correctly.
-
 @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
-@code{--enable-libmp3lame} flag turned on.
-
-LAME is important as it allows for streaming audio to Windows Media Player.
-Don't ask why the other audio types do not work.
-
 As a simple test, just run the following two command lines where INPUTFILE
 is some file which you can decode with ffmpeg:
 
@@ -103,29 +206,9 @@ 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.
 
-@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
-them up, and off you go.
-
-@section Troubleshooting
-
-@subsection The audio and video lose sync after a while.
-
-Yes, they do.
-
-@subsection After a long while, the video update rate goes way down in WMP.
-
-Yes, it does. Who knows why?
-
-@subsection WMP 6.4 behaves differently to WMP 7.
-
-Yes, it does. Any thoughts on this would be gratefully received. These
-differences extend to embedding WMP into a web page. [There are two
-object IDs that you can use: The old one, which does not play well, and
-the new one, which does (both tested on the same system). However,
-I suspect that the new one is not available unless you have installed WMP 7].
+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?
 
@@ -166,9 +249,6 @@ 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.
 
-* You may want to adjust the MaxBandwidth in the ffserver.conf to limit
-the amount of bandwidth consumed by live streams.
-
 @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
@@ -202,19 +282,6 @@ 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
 
-@section What is FFM, FFM2
-
-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.
-
 @chapter Options
 @c man begin OPTIONS
 
@@ -224,14 +291,19 @@ differing versions of tools. FFM2 is the default.
 
 @table @option
 @item -f @var{configfile}
-Use @file{configfile} instead of @file{/etc/ffserver.conf}.
+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 Launch directives
-within the various <Stream> sections. Since ffserver will not launch
-any ffmpeg instances, you will have to launch them manually.
+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, directs log
-messages to stdout.
+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
@@ -249,22 +321,63 @@ Currently the following sections are recognized: @samp{Feed},
 
 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}
 
-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.
+@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/RTPS server is bound. Only useful if you
+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,
@@ -286,40 +399,25 @@ when streaming to clients.
 Default value is 1000.
 
 @item CustomLog @var{filename}
-Set access log file (uses standard Apache log file format).
+Set access log file (uses standard Apache log file format). '-' is the
+standard output.
 
-'-' is the standard output.
-@end table
+If not specified @command{ffserver} will produce no log.
 
-@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.
+In case the commandline option @option{-d} is specified this option is
+ignored, and the log is written to standard output.
 
-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
+@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.
 
-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.
+@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
 
@@ -341,17 +439,47 @@ 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 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. 0 means unlimited.
+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.
 
-@item ReadOnlyFile @var{filename}
-Mark the file as readonly and it will not be deleted or updated.
+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.
 
-@item Launch
+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.
 
-@item ACL
+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
@@ -373,105 +501,195 @@ 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.
+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.
 
-Must be specified.
+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 stream.
+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}
 
-Must be the name of a format recognized by FFmpeg.
+@item MulticastAddress @var{address}
 
-@item AudioBitRate @var{rate}
-Set bitrate for the audio stream in KB per second.
+@item MulticastPort @var{port}
 
-@item AudioChannels @var{n}
+@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}
+@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 VideoBitRate @var{n}
-Set bitrate for the video stream in KB per second.
+@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 VideoBitRateRange @var{range}
+@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.
 
-@item VideoBitRateRangeTolerance @var{n}
+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
+@item PixelFormat @var{pixel_format} (@emph{encoding,video})
 Set video pixel format.
 
-@item VideoBufferSize @var{n}
-Set ratecontrol buffer size.
+@item Debug @var{integer} (@emph{encoding,video})
+Set video @option{debug} encoding option.
 
-@item VideoFrameRate @var{n}
+@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
+@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
+@item VideoIntraOnly (@emph{encoding,video})
 Transmit only intra frames (useful for low bitrates, but kills frame rate).
 
-@item VideoGopSize @var{n}
+@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 VideoHighQuality
-@item Video4MotionVector
-
-@item AudioCodec @var{codec_name}
-@item VideoCodec @var{codec_name}
-Set audio/video codec.
+@item VideoTag @var{tag} (@emph{encoding,video})
+Set video tag.
 
-@item NoAudio
-@item NoVideo
-Suppress audio/video.
+@item VideoHighQuality (@emph{encoding,video})
+@item Video4MotionVector (@emph{encoding,video})
 
-@item VideoQMin @var{n}
-@item VideoQMax @var{n}
-Set video qmin/qmax.
+@item BitExact (@emph{encoding,video})
+Set bitexact encoding flag.
 
-@item AVOptionAudio @var{option} @var{value}
-@item AVOptionVideo @var{option} @var{value}
-Set generic option for audio/video stream.
+@item IdctSimple (@emph{encoding,video})
+Set simple IDCT algorithm.
 
-@item AVPresetAudio @var{preset}
-@item AVOptionVideo @var{preset}
-Set preset for audio/video stream.
+@item Qscale @var{n} (@emph{encoding,video})
+Enable constant quality encoding, and set video qscale (quantization
+scale) value, expressed in @var{n} QP units.
 
-@var{preset} must be the path of a preset file.
+@item VideoQMin @var{n} (@emph{encoding,video})
+@item VideoQMax @var{n} (@emph{encoding,video})
+Set video qmin/qmax.
 
-@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 VideoQDiff @var{integer} (@emph{encoding,video})
+Set video @option{qdiff} encoding option.
 
-@item ACL @var{spec}
-Set ACL for the stream.
+@item LumiMask @var{float} (@emph{encoding,video})
+@item DarkMask @var{float} (@emph{encoding,video})
+Set @option{lumi_mask}/@option{dark_mask} encoding options.
 
-@item Author @var{value}
-@item Comment @var{value}
-@item Copyright @var{value}
-@item Title @var{value}
-Set metadata corresponding to the option.
+@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 StartSendOnKey
-Do not send stream until it gets the first key frame. By default
-@command{ffserver} will send data immediately.
+@item AVPresetVideo @var{preset} (@emph{encoding,video})
+Set preset for video stream.
 
-@item FaviconURL @var{url}
-Set favicon (favourite icon) for the server status page. It is ignored
-for regular streams.
+@var{preset} must be the path of a preset file.
 @end table
 
 @subsection Server status stream
@@ -480,7 +698,7 @@ 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}.
+@samp{status}.
 
 @section Redirect section
 
@@ -521,7 +739,7 @@ Feed feed1.ffm
 Format jpeg
 VideoFrameRate 2
 VideoIntraOnly
-#VideoSize 352x240
+VideoSize 352x240
 NoAudio
 Strict -1
 </Stream>
@@ -570,11 +788,11 @@ NoVideo
 @end example
 
 @item
-Ogg Vorbis audio:
+Ogg Vorbis audio
 @example
 <Stream test.ogg>
 Feed feed1.ffm
-Title "Stream title"
+Metadata title "Stream title"
 AudioBitRate 64
 AudioChannels 2
 AudioSampleRate 44100
@@ -590,7 +808,6 @@ Feed feed1.ffm
 Format rm
 AudioBitRate 32
 NoVideo
-NoAudio
 </Stream>
 @end example
 
@@ -604,7 +821,6 @@ AudioBitRate 32
 VideoBitRate 128
 VideoFrameRate 25
 VideoGopSize 25
-NoAudio
 </Stream>
 @end example
 
@@ -623,10 +839,10 @@ NoAudio
 <Stream file.asf>
 File "/usr/local/httpd/htdocs/test.asf"
 NoAudio
-Author "Me"
-Copyright "Super MegaCorp"
-Title "Test stream from disk"
-Comment "Test comment"
+Metadata author "Me"
+Metadata copyright "Super MegaCorp"
+Metadata title "Test stream from disk"
+Metadata comment "Test comment"
 </Stream>
 @end example
 @end itemize