| 1 | \input texinfo @c -*- texinfo -*- |
| 2 | |
| 3 | @settitle ffserver Documentation |
| 4 | @titlepage |
| 5 | @center @titlefont{ffserver Documentation} |
| 6 | @end titlepage |
| 7 | |
| 8 | @top |
| 9 | |
| 10 | @contents |
| 11 | |
| 12 | @chapter Synopsis |
| 13 | |
| 14 | ffserver [@var{options}] |
| 15 | |
| 16 | @chapter Description |
| 17 | @c man begin DESCRIPTION |
| 18 | |
| 19 | @command{ffserver} is a streaming server for both audio and video. |
| 20 | It supports several live feeds, streaming from files and time shifting |
| 21 | on live feeds. You can seek to positions in the past on each live |
| 22 | feed, provided you specify a big enough feed storage. |
| 23 | |
| 24 | @command{ffserver} is configured through a configuration file, which |
| 25 | is read at startup. If not explicitly specified, it will read from |
| 26 | @file{/etc/ffserver.conf}. |
| 27 | |
| 28 | @command{ffserver} receives prerecorded files or FFM streams from some |
| 29 | @command{ffmpeg} instance as input, then streams them over |
| 30 | RTP/RTSP/HTTP. |
| 31 | |
| 32 | An @command{ffserver} instance will listen on some port as specified |
| 33 | in the configuration file. You can launch one or more instances of |
| 34 | @command{ffmpeg} and send one or more FFM streams to the port where |
| 35 | ffserver is expecting to receive them. Alternately, you can make |
| 36 | @command{ffserver} launch such @command{ffmpeg} instances at startup. |
| 37 | |
| 38 | Input streams are called feeds, and each one is specified by a |
| 39 | @code{<Feed>} section in the configuration file. |
| 40 | |
| 41 | For each feed you can have different output streams in various |
| 42 | formats, each one specified by a @code{<Stream>} section in the |
| 43 | configuration file. |
| 44 | |
| 45 | @chapter Detailed description |
| 46 | |
| 47 | @command{ffserver} works by forwarding streams encoded by |
| 48 | @command{ffmpeg}, or pre-recorded streams which are read from disk. |
| 49 | |
| 50 | Precisely, @command{ffserver} acts as an HTTP server, accepting POST |
| 51 | requests from @command{ffmpeg} to acquire the stream to publish, and |
| 52 | serving RTSP clients or HTTP clients GET requests with the stream |
| 53 | media content. |
| 54 | |
| 55 | A feed is an @ref{FFM} stream created by @command{ffmpeg}, and sent to |
| 56 | a port where @command{ffserver} is listening. |
| 57 | |
| 58 | Each feed is identified by a unique name, corresponding to the name |
| 59 | of the resource published on @command{ffserver}, and is configured by |
| 60 | a dedicated @code{Feed} section in the configuration file. |
| 61 | |
| 62 | The feed publish URL is given by: |
| 63 | @example |
| 64 | http://@var{ffserver_ip_address}:@var{http_port}/@var{feed_name} |
| 65 | @end example |
| 66 | |
| 67 | where @var{ffserver_ip_address} is the IP address of the machine where |
| 68 | @command{ffserver} is installed, @var{http_port} is the port number of |
| 69 | the HTTP server (configured through the @option{HTTPPort} option), and |
| 70 | @var{feed_name} is the name of the corresponding feed defined in the |
| 71 | configuration file. |
| 72 | |
| 73 | Each feed is associated to a file which is stored on disk. This stored |
| 74 | file is used to allow to send pre-recorded data to a player as fast as |
| 75 | possible when new content is added in real-time to the stream. |
| 76 | |
| 77 | A "live-stream" or "stream" is a resource published by |
| 78 | @command{ffserver}, and made accessible through the HTTP protocol to |
| 79 | clients. |
| 80 | |
| 81 | A stream can be connected to a feed, or to a file. In the first case, |
| 82 | the published stream is forwarded from the corresponding feed |
| 83 | generated by a running instance of @command{ffmpeg}, in the second |
| 84 | case the stream is read from a pre-recorded file. |
| 85 | |
| 86 | Each stream is identified by a unique name, corresponding to the name |
| 87 | of the resource served by @command{ffserver}, and is configured by |
| 88 | a dedicated @code{Stream} section in the configuration file. |
| 89 | |
| 90 | The stream access HTTP URL is given by: |
| 91 | @example |
| 92 | http://@var{ffserver_ip_address}:@var{http_port}/@var{stream_name}[@var{options}] |
| 93 | @end example |
| 94 | |
| 95 | The stream access RTSP URL is given by: |
| 96 | @example |
| 97 | http://@var{ffserver_ip_address}:@var{rtsp_port}/@var{stream_name}[@var{options}] |
| 98 | @end example |
| 99 | |
| 100 | @var{stream_name} is the name of the corresponding stream defined in |
| 101 | the configuration file. @var{options} is a list of options specified |
| 102 | after the URL which affects how the stream is served by |
| 103 | @command{ffserver}. @var{http_port} and @var{rtsp_port} are the HTTP |
| 104 | and RTSP ports configured with the options @var{HTTPPort} and |
| 105 | @var{RTSPPort} respectively. |
| 106 | |
| 107 | In case the stream is associated to a feed, the encoding parameters |
| 108 | must be configured in the stream configuration. They are sent to |
| 109 | @command{ffmpeg} when setting up the encoding. This allows |
| 110 | @command{ffserver} to define the encoding parameters used by |
| 111 | the @command{ffmpeg} encoders. |
| 112 | |
| 113 | The @command{ffmpeg} @option{override_ffserver} commandline option |
| 114 | allows one to override the encoding parameters set by the server. |
| 115 | |
| 116 | Multiple streams can be connected to the same feed. |
| 117 | |
| 118 | For example, you can have a situation described by the following |
| 119 | graph: |
| 120 | @example |
| 121 | _________ __________ |
| 122 | | | | | |
| 123 | ffmpeg 1 -----| feed 1 |-----| stream 1 | |
| 124 | \ |_________|\ |__________| |
| 125 | \ \ |
| 126 | \ \ __________ |
| 127 | \ \ | | |
| 128 | \ \| stream 2 | |
| 129 | \ |__________| |
| 130 | \ |
| 131 | \ _________ __________ |
| 132 | \ | | | | |
| 133 | \| feed 2 |-----| stream 3 | |
| 134 | |_________| |__________| |
| 135 | |
| 136 | _________ __________ |
| 137 | | | | | |
| 138 | ffmpeg 2 -----| feed 3 |-----| stream 4 | |
| 139 | |_________| |__________| |
| 140 | |
| 141 | _________ __________ |
| 142 | | | | | |
| 143 | | file 1 |-----| stream 5 | |
| 144 | |_________| |__________| |
| 145 | @end example |
| 146 | |
| 147 | @anchor{FFM} |
| 148 | @section FFM, FFM2 formats |
| 149 | |
| 150 | FFM and FFM2 are formats used by ffserver. They allow storing a wide variety of |
| 151 | video and audio streams and encoding options, and can store a moving time segment |
| 152 | of an infinite movie or a whole movie. |
| 153 | |
| 154 | FFM is version specific, and there is limited compatibility of FFM files |
| 155 | generated by one version of ffmpeg/ffserver and another version of |
| 156 | ffmpeg/ffserver. It may work but it is not guaranteed to work. |
| 157 | |
| 158 | FFM2 is extensible while maintaining compatibility and should work between |
| 159 | differing versions of tools. FFM2 is the default. |
| 160 | |
| 161 | @section Status stream |
| 162 | |
| 163 | @command{ffserver} supports an HTTP interface which exposes the |
| 164 | current status of the server. |
| 165 | |
| 166 | Simply point your browser to the address of the special status stream |
| 167 | specified in the configuration file. |
| 168 | |
| 169 | For example if you have: |
| 170 | @example |
| 171 | <Stream status.html> |
| 172 | Format status |
| 173 | |
| 174 | # Only allow local people to get the status |
| 175 | ACL allow localhost |
| 176 | ACL allow 192.168.0.0 192.168.255.255 |
| 177 | </Stream> |
| 178 | @end example |
| 179 | |
| 180 | then the server will post a page with the status information when |
| 181 | the special stream @file{status.html} is requested. |
| 182 | |
| 183 | @section How do I make it work? |
| 184 | |
| 185 | As a simple test, just run the following two command lines where INPUTFILE |
| 186 | is some file which you can decode with ffmpeg: |
| 187 | |
| 188 | @example |
| 189 | ffserver -f doc/ffserver.conf & |
| 190 | ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm |
| 191 | @end example |
| 192 | |
| 193 | At this point you should be able to go to your Windows machine and fire up |
| 194 | Windows Media Player (WMP). Go to Open URL and enter |
| 195 | |
| 196 | @example |
| 197 | http://<linuxbox>:8090/test.asf |
| 198 | @end example |
| 199 | |
| 200 | You should (after a short delay) see video and hear audio. |
| 201 | |
| 202 | WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to |
| 203 | transfer the entire file before starting to play. |
| 204 | The same is true of AVI files. |
| 205 | |
| 206 | You should edit the @file{ffserver.conf} file to suit your needs (in |
| 207 | terms of frame rates etc). Then install @command{ffserver} and |
| 208 | @command{ffmpeg}, write a script to start them up, and off you go. |
| 209 | |
| 210 | @section What else can it do? |
| 211 | |
| 212 | You can replay video from .ffm files that was recorded earlier. |
| 213 | However, there are a number of caveats, including the fact that the |
| 214 | ffserver parameters must match the original parameters used to record the |
| 215 | file. If they do not, then ffserver deletes the file before recording into it. |
| 216 | (Now that I write this, it seems broken). |
| 217 | |
| 218 | You can fiddle with many of the codec choices and encoding parameters, and |
| 219 | there are a bunch more parameters that you cannot control. Post a message |
| 220 | to the mailing list if there are some 'must have' parameters. Look in |
| 221 | ffserver.conf for a list of the currently available controls. |
| 222 | |
| 223 | It will automatically generate the ASX or RAM files that are often used |
| 224 | in browsers. These files are actually redirections to the underlying ASF |
| 225 | or RM file. The reason for this is that the browser often fetches the |
| 226 | entire file before starting up the external viewer. The redirection files |
| 227 | are very small and can be transferred quickly. [The stream itself is |
| 228 | often 'infinite' and thus the browser tries to download it and never |
| 229 | finishes.] |
| 230 | |
| 231 | @section Tips |
| 232 | |
| 233 | * When you connect to a live stream, most players (WMP, RA, etc) want to |
| 234 | buffer a certain number of seconds of material so that they can display the |
| 235 | signal continuously. However, ffserver (by default) starts sending data |
| 236 | in realtime. This means that there is a pause of a few seconds while the |
| 237 | buffering is being done by the player. The good news is that this can be |
| 238 | cured by adding a '?buffer=5' to the end of the URL. This means that the |
| 239 | stream should start 5 seconds in the past -- and so the first 5 seconds |
| 240 | of the stream are sent as fast as the network will allow. It will then |
| 241 | slow down to real time. This noticeably improves the startup experience. |
| 242 | |
| 243 | You can also add a 'Preroll 15' statement into the ffserver.conf that will |
| 244 | add the 15 second prebuffering on all requests that do not otherwise |
| 245 | specify a time. In addition, ffserver will skip frames until a key_frame |
| 246 | is found. This further reduces the startup delay by not transferring data |
| 247 | that will be discarded. |
| 248 | |
| 249 | @section Why does the ?buffer / Preroll stop working after a time? |
| 250 | |
| 251 | It turns out that (on my machine at least) the number of frames successfully |
| 252 | grabbed is marginally less than the number that ought to be grabbed. This |
| 253 | means that the timestamp in the encoded data stream gets behind realtime. |
| 254 | This means that if you say 'Preroll 10', then when the stream gets 10 |
| 255 | or more seconds behind, there is no Preroll left. |
| 256 | |
| 257 | Fixing this requires a change in the internals of how timestamps are |
| 258 | handled. |
| 259 | |
| 260 | @section Does the @code{?date=} stuff work. |
| 261 | |
| 262 | Yes (subject to the limitation outlined above). Also note that whenever you |
| 263 | start ffserver, it deletes the ffm file (if any parameters have changed), |
| 264 | thus wiping out what you had recorded before. |
| 265 | |
| 266 | The format of the @code{?date=xxxxxx} is fairly flexible. You should use one |
| 267 | of the following formats (the 'T' is literal): |
| 268 | |
| 269 | @example |
| 270 | * YYYY-MM-DDTHH:MM:SS (localtime) |
| 271 | * YYYY-MM-DDTHH:MM:SSZ (UTC) |
| 272 | @end example |
| 273 | |
| 274 | You can omit the YYYY-MM-DD, and then it refers to the current day. However |
| 275 | note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this |
| 276 | may be in the future and so is unlikely to be useful. |
| 277 | |
| 278 | You use this by adding the ?date= to the end of the URL for the stream. |
| 279 | For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}. |
| 280 | @c man end |
| 281 | |
| 282 | @chapter Options |
| 283 | @c man begin OPTIONS |
| 284 | |
| 285 | @include fftools-common-opts.texi |
| 286 | |
| 287 | @section Main options |
| 288 | |
| 289 | @table @option |
| 290 | @item -f @var{configfile} |
| 291 | Read configuration file @file{configfile}. If not specified it will |
| 292 | read by default from @file{/etc/ffserver.conf}. |
| 293 | |
| 294 | @item -n |
| 295 | Enable no-launch mode. This option disables all the @code{Launch} |
| 296 | directives within the various @code{<Feed>} sections. Since |
| 297 | @command{ffserver} will not launch any @command{ffmpeg} instances, you |
| 298 | will have to launch them manually. |
| 299 | |
| 300 | @item -d |
| 301 | Enable debug mode. This option increases log verbosity, and directs |
| 302 | log messages to stdout. When specified, the @option{CustomLog} option |
| 303 | is ignored. |
| 304 | @end table |
| 305 | |
| 306 | @chapter Configuration file syntax |
| 307 | |
| 308 | @command{ffserver} reads a configuration file containing global |
| 309 | options and settings for each stream and feed. |
| 310 | |
| 311 | The configuration file consists of global options and dedicated |
| 312 | sections, which must be introduced by "<@var{SECTION_NAME} |
| 313 | @var{ARGS}>" on a separate line and must be terminated by a line in |
| 314 | the form "</@var{SECTION_NAME}>". @var{ARGS} is optional. |
| 315 | |
| 316 | Currently the following sections are recognized: @samp{Feed}, |
| 317 | @samp{Stream}, @samp{Redirect}. |
| 318 | |
| 319 | A line starting with @code{#} is ignored and treated as a comment. |
| 320 | |
| 321 | Name of options and sections are case-insensitive. |
| 322 | |
| 323 | @section ACL syntax |
| 324 | An ACL (Access Control List) specifies the address which are allowed |
| 325 | to access a given stream, or to write a given feed. |
| 326 | |
| 327 | It accepts the folling forms |
| 328 | @itemize |
| 329 | @item |
| 330 | Allow/deny access to @var{address}. |
| 331 | @example |
| 332 | ACL ALLOW <address> |
| 333 | ACL DENY <address> |
| 334 | @end example |
| 335 | |
| 336 | @item |
| 337 | Allow/deny access to ranges of addresses from @var{first_address} to |
| 338 | @var{last_address}. |
| 339 | @example |
| 340 | ACL ALLOW <first_address> <last_address> |
| 341 | ACL DENY <first_address> <last_address> |
| 342 | @end example |
| 343 | @end itemize |
| 344 | |
| 345 | You can repeat the ACL allow/deny as often as you like. It is on a per |
| 346 | stream basis. The first match defines the action. If there are no matches, |
| 347 | then the default is the inverse of the last ACL statement. |
| 348 | |
| 349 | Thus 'ACL allow localhost' only allows access from localhost. |
| 350 | 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and |
| 351 | allow everybody else. |
| 352 | |
| 353 | @section Global options |
| 354 | @table @option |
| 355 | @item HTTPPort @var{port_number} |
| 356 | @item Port @var{port_number} |
| 357 | @item RTSPPort @var{port_number} |
| 358 | |
| 359 | @var{HTTPPort} sets the HTTP server listening TCP port number, |
| 360 | @var{RTSPPort} sets the RTSP server listening TCP port number. |
| 361 | |
| 362 | @var{Port} is the equivalent of @var{HTTPPort} and is deprecated. |
| 363 | |
| 364 | You must select a different port from your standard HTTP web server if |
| 365 | it is running on the same computer. |
| 366 | |
| 367 | If not specified, no corresponding server will be created. |
| 368 | |
| 369 | @item HTTPBindAddress @var{ip_address} |
| 370 | @item BindAddress @var{ip_address} |
| 371 | @item RTSPBindAddress @var{ip_address} |
| 372 | Set address on which the HTTP/RTSP server is bound. Only useful if you |
| 373 | have several network interfaces. |
| 374 | |
| 375 | @var{BindAddress} is the equivalent of @var{HTTPBindAddress} and is |
| 376 | deprecated. |
| 377 | |
| 378 | @item MaxHTTPConnections @var{n} |
| 379 | Set number of simultaneous HTTP connections that can be handled. It |
| 380 | has to be defined @emph{before} the @option{MaxClients} parameter, |
| 381 | since it defines the @option{MaxClients} maximum limit. |
| 382 | |
| 383 | Default value is 2000. |
| 384 | |
| 385 | @item MaxClients @var{n} |
| 386 | Set number of simultaneous requests that can be handled. Since |
| 387 | @command{ffserver} is very fast, it is more likely that you will want |
| 388 | to leave this high and use @option{MaxBandwidth}. |
| 389 | |
| 390 | Default value is 5. |
| 391 | |
| 392 | @item MaxBandwidth @var{kbps} |
| 393 | Set the maximum amount of kbit/sec that you are prepared to consume |
| 394 | when streaming to clients. |
| 395 | |
| 396 | Default value is 1000. |
| 397 | |
| 398 | @item CustomLog @var{filename} |
| 399 | Set access log file (uses standard Apache log file format). '-' is the |
| 400 | standard output. |
| 401 | |
| 402 | If not specified @command{ffserver} will produce no log. |
| 403 | |
| 404 | In case the commandline option @option{-d} is specified this option is |
| 405 | ignored, and the log is written to standard output. |
| 406 | |
| 407 | @item NoDaemon |
| 408 | Set no-daemon mode. This option is currently ignored since now |
| 409 | @command{ffserver} will always work in no-daemon mode, and is |
| 410 | deprecated. |
| 411 | |
| 412 | @item UseDefaults |
| 413 | @item NoDefaults |
| 414 | Control whether default codec options are used for the all streams or not. |
| 415 | Each stream may overwrite this setting for its own. Default is @var{UseDefaults}. |
| 416 | The lastest occurrence overrides previous if multiple definitions. |
| 417 | @end table |
| 418 | |
| 419 | @section Feed section |
| 420 | |
| 421 | A Feed section defines a feed provided to @command{ffserver}. |
| 422 | |
| 423 | Each live feed contains one video and/or audio sequence coming from an |
| 424 | @command{ffmpeg} encoder or another @command{ffserver}. This sequence |
| 425 | may be encoded simultaneously with several codecs at several |
| 426 | resolutions. |
| 427 | |
| 428 | A feed instance specification is introduced by a line in the form: |
| 429 | @example |
| 430 | <Feed FEED_FILENAME> |
| 431 | @end example |
| 432 | |
| 433 | where @var{FEED_FILENAME} specifies the unique name of the FFM stream. |
| 434 | |
| 435 | The following options are recognized within a Feed section. |
| 436 | |
| 437 | @table @option |
| 438 | @item File @var{filename} |
| 439 | @item ReadOnlyFile @var{filename} |
| 440 | Set the path where the feed file is stored on disk. |
| 441 | |
| 442 | If not specified, the @file{/tmp/FEED.ffm} is assumed, where |
| 443 | @var{FEED} is the feed name. |
| 444 | |
| 445 | If @option{ReadOnlyFile} is used the file is marked as read-only and |
| 446 | it will not be deleted or updated. |
| 447 | |
| 448 | @item Truncate |
| 449 | Truncate the feed file, rather than appending to it. By default |
| 450 | @command{ffserver} will append data to the file, until the maximum |
| 451 | file size value is reached (see @option{FileMaxSize} option). |
| 452 | |
| 453 | @item FileMaxSize @var{size} |
| 454 | Set maximum size of the feed file in bytes. 0 means unlimited. The |
| 455 | postfixes @code{K} (2^10), @code{M} (2^20), and @code{G} (2^30) are |
| 456 | recognized. |
| 457 | |
| 458 | Default value is 5M. |
| 459 | |
| 460 | @item Launch @var{args} |
| 461 | Launch an @command{ffmpeg} command when creating @command{ffserver}. |
| 462 | |
| 463 | @var{args} must be a sequence of arguments to be provided to an |
| 464 | @command{ffmpeg} instance. The first provided argument is ignored, and |
| 465 | it is replaced by a path with the same dirname of the @command{ffserver} |
| 466 | instance, followed by the remaining argument and terminated with a |
| 467 | path corresponding to the feed. |
| 468 | |
| 469 | When the launched process exits, @command{ffserver} will launch |
| 470 | another program instance. |
| 471 | |
| 472 | In case you need a more complex @command{ffmpeg} configuration, |
| 473 | e.g. if you need to generate multiple FFM feeds with a single |
| 474 | @command{ffmpeg} instance, you should launch @command{ffmpeg} by hand. |
| 475 | |
| 476 | This option is ignored in case the commandline option @option{-n} is |
| 477 | specified. |
| 478 | |
| 479 | @item ACL @var{spec} |
| 480 | Specify the list of IP address which are allowed or denied to write |
| 481 | the feed. Multiple ACL options can be specified. |
| 482 | @end table |
| 483 | |
| 484 | @section Stream section |
| 485 | |
| 486 | A Stream section defines a stream provided by @command{ffserver}, and |
| 487 | identified by a single name. |
| 488 | |
| 489 | The stream is sent when answering a request containing the stream |
| 490 | name. |
| 491 | |
| 492 | A stream section must be introduced by the line: |
| 493 | @example |
| 494 | <Stream STREAM_NAME> |
| 495 | @end example |
| 496 | |
| 497 | where @var{STREAM_NAME} specifies the unique name of the stream. |
| 498 | |
| 499 | The following options are recognized within a Stream section. |
| 500 | |
| 501 | Encoding options are marked with the @emph{encoding} tag, and they are |
| 502 | used to set the encoding parameters, and are mapped to libavcodec |
| 503 | encoding options. Not all encoding options are supported, in |
| 504 | particular it is not possible to set encoder private options. In order |
| 505 | to override the encoding options specified by @command{ffserver}, you |
| 506 | can use the @command{ffmpeg} @option{override_ffserver} commandline |
| 507 | option. |
| 508 | |
| 509 | Only one of the @option{Feed} and @option{File} options should be set. |
| 510 | |
| 511 | @table @option |
| 512 | @item Feed @var{feed_name} |
| 513 | Set the input feed. @var{feed_name} must correspond to an existing |
| 514 | feed defined in a @code{Feed} section. |
| 515 | |
| 516 | When this option is set, encoding options are used to setup the |
| 517 | encoding operated by the remote @command{ffmpeg} process. |
| 518 | |
| 519 | @item File @var{filename} |
| 520 | Set the filename of the pre-recorded input file to stream. |
| 521 | |
| 522 | When this option is set, encoding options are ignored and the input |
| 523 | file content is re-streamed as is. |
| 524 | |
| 525 | @item Format @var{format_name} |
| 526 | Set the format of the output stream. |
| 527 | |
| 528 | Must be the name of a format recognized by FFmpeg. If set to |
| 529 | @samp{status}, it is treated as a status stream. |
| 530 | |
| 531 | @item InputFormat @var{format_name} |
| 532 | Set input format. If not specified, it is automatically guessed. |
| 533 | |
| 534 | @item Preroll @var{n} |
| 535 | Set this to the number of seconds backwards in time to start. Note that |
| 536 | most players will buffer 5-10 seconds of video, and also you need to allow |
| 537 | for a keyframe to appear in the data stream. |
| 538 | |
| 539 | Default value is 0. |
| 540 | |
| 541 | @item StartSendOnKey |
| 542 | Do not send stream until it gets the first key frame. By default |
| 543 | @command{ffserver} will send data immediately. |
| 544 | |
| 545 | @item MaxTime @var{n} |
| 546 | Set the number of seconds to run. This value set the maximum duration |
| 547 | of the stream a client will be able to receive. |
| 548 | |
| 549 | A value of 0 means that no limit is set on the stream duration. |
| 550 | |
| 551 | @item ACL @var{spec} |
| 552 | Set ACL for the stream. |
| 553 | |
| 554 | @item DynamicACL @var{spec} |
| 555 | |
| 556 | @item RTSPOption @var{option} |
| 557 | |
| 558 | @item MulticastAddress @var{address} |
| 559 | |
| 560 | @item MulticastPort @var{port} |
| 561 | |
| 562 | @item MulticastTTL @var{integer} |
| 563 | |
| 564 | @item NoLoop |
| 565 | |
| 566 | @item FaviconURL @var{url} |
| 567 | Set favicon (favourite icon) for the server status page. It is ignored |
| 568 | for regular streams. |
| 569 | |
| 570 | @item Author @var{value} |
| 571 | @item Comment @var{value} |
| 572 | @item Copyright @var{value} |
| 573 | @item Title @var{value} |
| 574 | Set metadata corresponding to the option. All these options are |
| 575 | deprecated in favor of @option{Metadata}. |
| 576 | |
| 577 | @item Metadata @var{key} @var{value} |
| 578 | Set metadata value on the output stream. |
| 579 | |
| 580 | @item UseDefaults |
| 581 | @item NoDefaults |
| 582 | Control whether default codec options are used for the stream or not. |
| 583 | Default is @var{UseDefaults} unless disabled globally. |
| 584 | |
| 585 | @item NoAudio |
| 586 | @item NoVideo |
| 587 | Suppress audio/video. |
| 588 | |
| 589 | @item AudioCodec @var{codec_name} (@emph{encoding,audio}) |
| 590 | Set audio codec. |
| 591 | |
| 592 | @item AudioBitRate @var{rate} (@emph{encoding,audio}) |
| 593 | Set bitrate for the audio stream in kbits per second. |
| 594 | |
| 595 | @item AudioChannels @var{n} (@emph{encoding,audio}) |
| 596 | Set number of audio channels. |
| 597 | |
| 598 | @item AudioSampleRate @var{n} (@emph{encoding,audio}) |
| 599 | Set sampling frequency for audio. When using low bitrates, you should |
| 600 | lower this frequency to 22050 or 11025. The supported frequencies |
| 601 | depend on the selected audio codec. |
| 602 | |
| 603 | @item AVOptionAudio [@var{codec}:]@var{option} @var{value} (@emph{encoding,audio}) |
| 604 | Set generic or private option for audio stream. |
| 605 | Private option must be prefixed with codec name or codec must be defined before. |
| 606 | |
| 607 | @item AVPresetAudio @var{preset} (@emph{encoding,audio}) |
| 608 | Set preset for audio stream. |
| 609 | |
| 610 | @item VideoCodec @var{codec_name} (@emph{encoding,video}) |
| 611 | Set video codec. |
| 612 | |
| 613 | @item VideoBitRate @var{n} (@emph{encoding,video}) |
| 614 | Set bitrate for the video stream in kbits per second. |
| 615 | |
| 616 | @item VideoBitRateRange @var{range} (@emph{encoding,video}) |
| 617 | Set video bitrate range. |
| 618 | |
| 619 | A range must be specified in the form @var{minrate}-@var{maxrate}, and |
| 620 | specifies the @option{minrate} and @option{maxrate} encoding options |
| 621 | expressed in kbits per second. |
| 622 | |
| 623 | @item VideoBitRateRangeTolerance @var{n} (@emph{encoding,video}) |
| 624 | Set video bitrate tolerance in kbits per second. |
| 625 | |
| 626 | @item PixelFormat @var{pixel_format} (@emph{encoding,video}) |
| 627 | Set video pixel format. |
| 628 | |
| 629 | @item Debug @var{integer} (@emph{encoding,video}) |
| 630 | Set video @option{debug} encoding option. |
| 631 | |
| 632 | @item Strict @var{integer} (@emph{encoding,video}) |
| 633 | Set video @option{strict} encoding option. |
| 634 | |
| 635 | @item VideoBufferSize @var{n} (@emph{encoding,video}) |
| 636 | Set ratecontrol buffer size, expressed in KB. |
| 637 | |
| 638 | @item VideoFrameRate @var{n} (@emph{encoding,video}) |
| 639 | Set number of video frames per second. |
| 640 | |
| 641 | @item VideoSize (@emph{encoding,video}) |
| 642 | Set size of the video frame, must be an abbreviation or in the form |
| 643 | @var{W}x@var{H}. See @ref{video size syntax,,the Video size section |
| 644 | in the ffmpeg-utils(1) manual,ffmpeg-utils}. |
| 645 | |
| 646 | Default value is @code{160x128}. |
| 647 | |
| 648 | @item VideoIntraOnly (@emph{encoding,video}) |
| 649 | Transmit only intra frames (useful for low bitrates, but kills frame rate). |
| 650 | |
| 651 | @item VideoGopSize @var{n} (@emph{encoding,video}) |
| 652 | If non-intra only, an intra frame is transmitted every VideoGopSize |
| 653 | frames. Video synchronization can only begin at an intra frame. |
| 654 | |
| 655 | @item VideoTag @var{tag} (@emph{encoding,video}) |
| 656 | Set video tag. |
| 657 | |
| 658 | @item VideoHighQuality (@emph{encoding,video}) |
| 659 | @item Video4MotionVector (@emph{encoding,video}) |
| 660 | |
| 661 | @item BitExact (@emph{encoding,video}) |
| 662 | Set bitexact encoding flag. |
| 663 | |
| 664 | @item IdctSimple (@emph{encoding,video}) |
| 665 | Set simple IDCT algorithm. |
| 666 | |
| 667 | @item Qscale @var{n} (@emph{encoding,video}) |
| 668 | Enable constant quality encoding, and set video qscale (quantization |
| 669 | scale) value, expressed in @var{n} QP units. |
| 670 | |
| 671 | @item VideoQMin @var{n} (@emph{encoding,video}) |
| 672 | @item VideoQMax @var{n} (@emph{encoding,video}) |
| 673 | Set video qmin/qmax. |
| 674 | |
| 675 | @item VideoQDiff @var{integer} (@emph{encoding,video}) |
| 676 | Set video @option{qdiff} encoding option. |
| 677 | |
| 678 | @item LumiMask @var{float} (@emph{encoding,video}) |
| 679 | @item DarkMask @var{float} (@emph{encoding,video}) |
| 680 | Set @option{lumi_mask}/@option{dark_mask} encoding options. |
| 681 | |
| 682 | @item AVOptionVideo [@var{codec}:]@var{option} @var{value} (@emph{encoding,video}) |
| 683 | Set generic or private option for video stream. |
| 684 | Private option must be prefixed with codec name or codec must be defined before. |
| 685 | |
| 686 | @item AVPresetVideo @var{preset} (@emph{encoding,video}) |
| 687 | Set preset for video stream. |
| 688 | |
| 689 | @var{preset} must be the path of a preset file. |
| 690 | @end table |
| 691 | |
| 692 | @subsection Server status stream |
| 693 | |
| 694 | A server status stream is a special stream which is used to show |
| 695 | statistics about the @command{ffserver} operations. |
| 696 | |
| 697 | It must be specified setting the option @option{Format} to |
| 698 | @samp{status}. |
| 699 | |
| 700 | @section Redirect section |
| 701 | |
| 702 | A redirect section specifies where to redirect the requested URL to |
| 703 | another page. |
| 704 | |
| 705 | A redirect section must be introduced by the line: |
| 706 | @example |
| 707 | <Redirect NAME> |
| 708 | @end example |
| 709 | |
| 710 | where @var{NAME} is the name of the page which should be redirected. |
| 711 | |
| 712 | It only accepts the option @option{URL}, which specify the redirection |
| 713 | URL. |
| 714 | |
| 715 | @chapter Stream examples |
| 716 | |
| 717 | @itemize |
| 718 | @item |
| 719 | Multipart JPEG |
| 720 | @example |
| 721 | <Stream test.mjpg> |
| 722 | Feed feed1.ffm |
| 723 | Format mpjpeg |
| 724 | VideoFrameRate 2 |
| 725 | VideoIntraOnly |
| 726 | NoAudio |
| 727 | Strict -1 |
| 728 | </Stream> |
| 729 | @end example |
| 730 | |
| 731 | @item |
| 732 | Single JPEG |
| 733 | @example |
| 734 | <Stream test.jpg> |
| 735 | Feed feed1.ffm |
| 736 | Format jpeg |
| 737 | VideoFrameRate 2 |
| 738 | VideoIntraOnly |
| 739 | VideoSize 352x240 |
| 740 | NoAudio |
| 741 | Strict -1 |
| 742 | </Stream> |
| 743 | @end example |
| 744 | |
| 745 | @item |
| 746 | Flash |
| 747 | @example |
| 748 | <Stream test.swf> |
| 749 | Feed feed1.ffm |
| 750 | Format swf |
| 751 | VideoFrameRate 2 |
| 752 | VideoIntraOnly |
| 753 | NoAudio |
| 754 | </Stream> |
| 755 | @end example |
| 756 | |
| 757 | @item |
| 758 | ASF compatible |
| 759 | @example |
| 760 | <Stream test.asf> |
| 761 | Feed feed1.ffm |
| 762 | Format asf |
| 763 | VideoFrameRate 15 |
| 764 | VideoSize 352x240 |
| 765 | VideoBitRate 256 |
| 766 | VideoBufferSize 40 |
| 767 | VideoGopSize 30 |
| 768 | AudioBitRate 64 |
| 769 | StartSendOnKey |
| 770 | </Stream> |
| 771 | @end example |
| 772 | |
| 773 | @item |
| 774 | MP3 audio |
| 775 | @example |
| 776 | <Stream test.mp3> |
| 777 | Feed feed1.ffm |
| 778 | Format mp2 |
| 779 | AudioCodec mp3 |
| 780 | AudioBitRate 64 |
| 781 | AudioChannels 1 |
| 782 | AudioSampleRate 44100 |
| 783 | NoVideo |
| 784 | </Stream> |
| 785 | @end example |
| 786 | |
| 787 | @item |
| 788 | Ogg Vorbis audio |
| 789 | @example |
| 790 | <Stream test.ogg> |
| 791 | Feed feed1.ffm |
| 792 | Metadata title "Stream title" |
| 793 | AudioBitRate 64 |
| 794 | AudioChannels 2 |
| 795 | AudioSampleRate 44100 |
| 796 | NoVideo |
| 797 | </Stream> |
| 798 | @end example |
| 799 | |
| 800 | @item |
| 801 | Real with audio only at 32 kbits |
| 802 | @example |
| 803 | <Stream test.ra> |
| 804 | Feed feed1.ffm |
| 805 | Format rm |
| 806 | AudioBitRate 32 |
| 807 | NoVideo |
| 808 | </Stream> |
| 809 | @end example |
| 810 | |
| 811 | @item |
| 812 | Real with audio and video at 64 kbits |
| 813 | @example |
| 814 | <Stream test.rm> |
| 815 | Feed feed1.ffm |
| 816 | Format rm |
| 817 | AudioBitRate 32 |
| 818 | VideoBitRate 128 |
| 819 | VideoFrameRate 25 |
| 820 | VideoGopSize 25 |
| 821 | </Stream> |
| 822 | @end example |
| 823 | |
| 824 | @item |
| 825 | For stream coming from a file: you only need to set the input filename |
| 826 | and optionally a new format. |
| 827 | |
| 828 | @example |
| 829 | <Stream file.rm> |
| 830 | File "/usr/local/httpd/htdocs/tlive.rm" |
| 831 | NoAudio |
| 832 | </Stream> |
| 833 | @end example |
| 834 | |
| 835 | @example |
| 836 | <Stream file.asf> |
| 837 | File "/usr/local/httpd/htdocs/test.asf" |
| 838 | NoAudio |
| 839 | Metadata author "Me" |
| 840 | Metadata copyright "Super MegaCorp" |
| 841 | Metadata title "Test stream from disk" |
| 842 | Metadata comment "Test comment" |
| 843 | </Stream> |
| 844 | @end example |
| 845 | @end itemize |
| 846 | |
| 847 | @c man end |
| 848 | |
| 849 | @include config.texi |
| 850 | @ifset config-all |
| 851 | @ifset config-avutil |
| 852 | @include utils.texi |
| 853 | @end ifset |
| 854 | @ifset config-avcodec |
| 855 | @include codecs.texi |
| 856 | @include bitstream_filters.texi |
| 857 | @end ifset |
| 858 | @ifset config-avformat |
| 859 | @include formats.texi |
| 860 | @include protocols.texi |
| 861 | @end ifset |
| 862 | @ifset config-avdevice |
| 863 | @include devices.texi |
| 864 | @end ifset |
| 865 | @ifset config-swresample |
| 866 | @include resampler.texi |
| 867 | @end ifset |
| 868 | @ifset config-swscale |
| 869 | @include scaler.texi |
| 870 | @end ifset |
| 871 | @ifset config-avfilter |
| 872 | @include filters.texi |
| 873 | @end ifset |
| 874 | @end ifset |
| 875 | |
| 876 | @chapter See Also |
| 877 | |
| 878 | @ifhtml |
| 879 | @ifset config-all |
| 880 | @url{ffserver.html,ffserver}, |
| 881 | @end ifset |
| 882 | @ifset config-not-all |
| 883 | @url{ffserver-all.html,ffserver-all}, |
| 884 | @end ifset |
| 885 | the @file{doc/ffserver.conf} example, |
| 886 | @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, |
| 887 | @url{ffmpeg-utils.html,ffmpeg-utils}, |
| 888 | @url{ffmpeg-scaler.html,ffmpeg-scaler}, |
| 889 | @url{ffmpeg-resampler.html,ffmpeg-resampler}, |
| 890 | @url{ffmpeg-codecs.html,ffmpeg-codecs}, |
| 891 | @url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters}, |
| 892 | @url{ffmpeg-formats.html,ffmpeg-formats}, |
| 893 | @url{ffmpeg-devices.html,ffmpeg-devices}, |
| 894 | @url{ffmpeg-protocols.html,ffmpeg-protocols}, |
| 895 | @url{ffmpeg-filters.html,ffmpeg-filters} |
| 896 | @end ifhtml |
| 897 | |
| 898 | @ifnothtml |
| 899 | @ifset config-all |
| 900 | ffserver(1), |
| 901 | @end ifset |
| 902 | @ifset config-not-all |
| 903 | ffserver-all(1), |
| 904 | @end ifset |
| 905 | the @file{doc/ffserver.conf} example, ffmpeg(1), ffplay(1), ffprobe(1), |
| 906 | ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), |
| 907 | ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), |
| 908 | ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) |
| 909 | @end ifnothtml |
| 910 | |
| 911 | @include authors.texi |
| 912 | |
| 913 | @ignore |
| 914 | |
| 915 | @setfilename ffserver |
| 916 | @settitle ffserver video server |
| 917 | |
| 918 | @end ignore |
| 919 | |
| 920 | @bye |