summaryrefslogtreecommitdiff
path: root/doc/ffserver.texi
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2013-11-29 16:36:15 +0100
committerStefano Sabatini <stefasab@gmail.com>2013-11-30 14:35:33 +0100
commit889509d2411606353420bf3d3f518215e434b242 (patch)
treefc47b1ffa35a9f978d96e0f0e3359836b916a039 /doc/ffserver.texi
parent0bacc320c2922967ae18fe751a783ce25e7cac4e (diff)
doc/ffserver: add "Detailed description" chapter
Also move FFM section up in the file, and rename it.
Diffstat (limited to 'doc/ffserver.texi')
-rw-r--r--doc/ffserver.texi121
1 files changed, 108 insertions, 13 deletions
diff --git a/doc/ffserver.texi b/doc/ffserver.texi
index edd58b7aa6..d14bb4a891 100644
--- a/doc/ffserver.texi
+++ b/doc/ffserver.texi
@@ -42,6 +42,114 @@ 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 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{Port} 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 allow 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 URL is given by:
+@example
+http://@var{ffserver_ip_address}:@var{http_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}.
+
+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 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:
+@example
+ _________ __________
+ | | | |
+ffmpeg 1 -----| feed 1 |-----| stream 1 |
+ \ |_________|\ |__________|
+ \ \
+ \ \ __________
+ \ \ | |
+ \ \| stream 2 |
+ \ |__________|
+ \
+ \ _________ __________
+ \ | | | |
+ \| feed 2 |-----| stream 3 |
+ |_________| |__________|
+
+ _________ __________
+ | | | |
+ffmpeg 2 -----| feed 3 |-----| stream 4 |
+ |_________| |__________|
+
+ _________ __________
+ | | | |
+ | file 1 |-----| stream 5 |
+ |_________| |__________|
+@end example
+
+@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
@@ -165,19 +273,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