diff options
Diffstat (limited to 'doc/ffserver.texi')
-rw-r--r-- | doc/ffserver.texi | 923 |
1 files changed, 923 insertions, 0 deletions
diff --git a/doc/ffserver.texi b/doc/ffserver.texi new file mode 100644 index 0000000000..ad48f47a8f --- /dev/null +++ b/doc/ffserver.texi @@ -0,0 +1,923 @@ +\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 |