Commit | Line | Data |
---|---|---|
2ba45a60 DM |
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. | |
f6fa7814 DM |
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. | |
2ba45a60 DM |
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 | ||
f6fa7814 DM |
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 | ||
2ba45a60 DM |
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 | ||
f6fa7814 DM |
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. | |
2ba45a60 DM |
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 | ||
f6fa7814 DM |
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. | |
2ba45a60 DM |
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 |