doc/ffserver: extend documentation for CustomLog option
[ffmpeg.git] / doc / ffserver.texi
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 @section Status stream
46
47 @command{ffserver} supports an HTTP interface which exposes the
48 current status of the server.
49
50 Simply point your browser to the address of the special status stream
51 specified in the configuration file.
52
53 For example if you have:
54 @example
55 <Stream status.html>
56 Format status
57
58 # Only allow local people to get the status
59 ACL allow localhost
60 ACL allow 192.168.0.0 192.168.255.255
61 </Stream>
62 @end example
63
64 then the server will post a page with the status information when
65 the special stream @file{status.html} is requested.
66
67 @section How do I make it work?
68
69 First, build the kit. It *really* helps to have installed LAME first. Then when
70 you run the ffserver ./configure, make sure that you have the
71 @code{--enable-libmp3lame} flag turned on.
72
73 LAME is important as it allows for streaming audio to Windows Media Player.
74 Don't ask why the other audio types do not work.
75
76 As a simple test, just run the following two command lines where INPUTFILE
77 is some file which you can decode with ffmpeg:
78
79 @example
80 ffserver -f doc/ffserver.conf &
81 ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm
82 @end example
83
84 At this point you should be able to go to your Windows machine and fire up
85 Windows Media Player (WMP). Go to Open URL and enter
86
87 @example
88     http://<linuxbox>:8090/test.asf
89 @end example
90
91 You should (after a short delay) see video and hear audio.
92
93 WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to
94 transfer the entire file before starting to play.
95 The same is true of AVI files.
96
97 @section What happens next?
98
99 You should edit the ffserver.conf file to suit your needs (in terms of
100 frame rates etc). Then install ffserver and ffmpeg, write a script to start
101 them up, and off you go.
102
103 @section What else can it do?
104
105 You can replay video from .ffm files that was recorded earlier.
106 However, there are a number of caveats, including the fact that the
107 ffserver parameters must match the original parameters used to record the
108 file. If they do not, then ffserver deletes the file before recording into it.
109 (Now that I write this, it seems broken).
110
111 You can fiddle with many of the codec choices and encoding parameters, and
112 there are a bunch more parameters that you cannot control. Post a message
113 to the mailing list if there are some 'must have' parameters. Look in
114 ffserver.conf for a list of the currently available controls.
115
116 It will automatically generate the ASX or RAM files that are often used
117 in browsers. These files are actually redirections to the underlying ASF
118 or RM file. The reason for this is that the browser often fetches the
119 entire file before starting up the external viewer. The redirection files
120 are very small and can be transferred quickly. [The stream itself is
121 often 'infinite' and thus the browser tries to download it and never
122 finishes.]
123
124 @section Tips
125
126 * When you connect to a live stream, most players (WMP, RA, etc) want to
127 buffer a certain number of seconds of material so that they can display the
128 signal continuously. However, ffserver (by default) starts sending data
129 in realtime. This means that there is a pause of a few seconds while the
130 buffering is being done by the player. The good news is that this can be
131 cured by adding a '?buffer=5' to the end of the URL. This means that the
132 stream should start 5 seconds in the past -- and so the first 5 seconds
133 of the stream are sent as fast as the network will allow. It will then
134 slow down to real time. This noticeably improves the startup experience.
135
136 You can also add a 'Preroll 15' statement into the ffserver.conf that will
137 add the 15 second prebuffering on all requests that do not otherwise
138 specify a time. In addition, ffserver will skip frames until a key_frame
139 is found. This further reduces the startup delay by not transferring data
140 that will be discarded.
141
142 @section Why does the ?buffer / Preroll stop working after a time?
143
144 It turns out that (on my machine at least) the number of frames successfully
145 grabbed is marginally less than the number that ought to be grabbed. This
146 means that the timestamp in the encoded data stream gets behind realtime.
147 This means that if you say 'Preroll 10', then when the stream gets 10
148 or more seconds behind, there is no Preroll left.
149
150 Fixing this requires a change in the internals of how timestamps are
151 handled.
152
153 @section Does the @code{?date=} stuff work.
154
155 Yes (subject to the limitation outlined above). Also note that whenever you
156 start ffserver, it deletes the ffm file (if any parameters have changed),
157 thus wiping out what you had recorded before.
158
159 The format of the @code{?date=xxxxxx} is fairly flexible. You should use one
160 of the following formats (the 'T' is literal):
161
162 @example
163 * YYYY-MM-DDTHH:MM:SS     (localtime)
164 * YYYY-MM-DDTHH:MM:SSZ    (UTC)
165 @end example
166
167 You can omit the YYYY-MM-DD, and then it refers to the current day. However
168 note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this
169 may be in the future and so is unlikely to be useful.
170
171 You use this by adding the ?date= to the end of the URL for the stream.
172 For example:   @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
173 @c man end
174
175 @section What is FFM, FFM2
176
177 FFM and FFM2 are formats used by ffserver. They allow storing a wide variety of
178 video and audio streams and encoding options, and can store a moving time segment
179 of an infinite movie or a whole movie.
180
181 FFM is version specific, and there is limited compatibility of FFM files
182 generated by one version of ffmpeg/ffserver and another version of
183 ffmpeg/ffserver. It may work but it is not guaranteed to work.
184
185 FFM2 is extensible while maintaining compatibility and should work between
186 differing versions of tools. FFM2 is the default.
187
188 @chapter Options
189 @c man begin OPTIONS
190
191 @include fftools-common-opts.texi
192
193 @section Main options
194
195 @table @option
196 @item -f @var{configfile}
197 Read configuration file @file{configfile}. If not specified it will
198 read by default from @file{/etc/ffserver.conf}.
199
200 @item -n
201 Enable no-launch mode. This option disables all the @code{Launch}
202 directives within the various @code{<Stream>} sections. Since
203 @command{ffserver} will not launch any @command{ffmpeg} instances, you
204 will have to launch them manually.
205
206 @item -d
207 Enable debug mode. This option increases log verbosity, and directs
208 log messages to stdout. When specified, the @option{CustomLog} option
209 is ignored.
210 @end table
211
212 @chapter Configuration file syntax
213
214 @command{ffserver} reads a configuration file containing global
215 options and settings for each stream and feed.
216
217 The configuration file consists of global options and dedicated
218 sections, which must be introduced by "<@var{SECTION_NAME}
219 @var{ARGS}>" on a separate line and must be terminated by a line in
220 the form "</@var{SECTION_NAME}>". @var{ARGS} is optional.
221
222 Currently the following sections are recognized: @samp{Feed},
223 @samp{Stream}, @samp{Redirect}.
224
225 A line starting with @code{#} is ignored and treated as a comment.
226
227 Name of options and sections are case-insensitive.
228
229 @section Global options
230 @table @option
231 @item Port @var{port_number}
232 @item RTSPPort @var{port_number}
233
234 Set TCP port number on which the HTTP/RTSP server is listening. You
235 must select a different port from your standard HTTP web server if it
236 is running on the same computer.
237
238 If not specified, no corresponding server will be created.
239
240 @item BindAddress @var{ip_address}
241 @item RTSPBindAddress @var{ip_address}
242 Set address on which the HTTP/RTSP server is bound. Only useful if you
243 have several network interfaces.
244
245 @item MaxHTTPConnections @var{n}
246 Set number of simultaneous HTTP connections that can be handled. It
247 has to be defined @emph{before} the @option{MaxClients} parameter,
248 since it defines the @option{MaxClients} maximum limit.
249
250 Default value is 2000.
251
252 @item MaxClients @var{n}
253 Set number of simultaneous requests that can be handled. Since
254 @command{ffserver} is very fast, it is more likely that you will want
255 to leave this high and use @option{MaxBandwidth}.
256
257 Default value is 5.
258
259 @item MaxBandwidth @var{kbps}
260 Set the maximum amount of kbit/sec that you are prepared to consume
261 when streaming to clients.
262
263 Default value is 1000.
264
265 @item CustomLog @var{filename}
266 Set access log file (uses standard Apache log file format).
267
268 '-' is the standard output. If not specified it will log by default on
269 standard out.
270
271 In case the commandline option @option{-d} is specified this option is
272 ignored.
273
274 @item NoDaemon
275 Set no-daemon mode. This option is currently ignored since now
276 @command{ffserver} will work in no-daemon mode, and is deprecated.
277
278 @end table
279
280 @section ACL syntax
281 An ACL (Access Control List) specifies the address which are allowed
282 to access a given stream, or to write a given feed.
283
284 It accepts the folling forms
285 @itemize
286 @item
287 Allow/deny access to @var{address}.
288 @example
289 ACL ALLOW <address>
290 ACL DENY <address>
291 @end example
292
293 @item
294 Allow/deny access to ranges of addresses from @var{first_address} to
295 @var{last_address}.
296 @example
297 ACL ALLOW <first_address> <last_address>
298 ACL DENY <first_address> <last_address>
299 @end example
300 @end itemize
301
302 You can repeat the ACL allow/deny as often as you like. It is on a per
303 stream basis. The first match defines the action. If there are no matches,
304 then the default is the inverse of the last ACL statement.
305
306 Thus 'ACL allow localhost' only allows access from localhost.
307 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and
308 allow everybody else.
309
310 @section Feed section
311
312 A Feed section defines a feed provided to @command{ffserver}.
313
314 Each live feed contains one video and/or audio sequence coming from an
315 @command{ffmpeg} encoder or another @command{ffserver}. This sequence
316 may be encoded simultaneously with several codecs at several
317 resolutions.
318
319 A feed instance specification is introduced by a line in the form:
320 @example
321 <Feed FEED_FILENAME>
322 @end example
323
324 where @var{FEED_FILENAME} specifies the unique name of the FFM stream.
325
326 The following options are recognized within a Feed section.
327
328 @table @option
329 @item File @var{filename}
330 Set the path where the file is stored on disk.
331
332 @item FileMaxSize @var{size}
333 Set maximum size of the feed. 0 means unlimited.
334
335 @item ReadOnlyFile @var{filename}
336 Mark the file as readonly and it will not be deleted or updated.
337
338 @item Launch
339
340 @item ACL
341 Specify the list of IP address which are allowed or denied to write
342 the feed. Multiple ACL options can be specified.
343 @end table
344
345 @section Stream section
346
347 A Stream section defines a stream provided by @command{ffserver}, and
348 identified by a single name.
349
350 The stream is sent when answering a request containing the stream
351 name.
352
353 A stream section must be introduced by the line:
354 @example
355 <Stream STREAM_NAME>
356 @end example
357
358 where @var{STREAM_NAME} specifies the unique name of the stream.
359
360 The following options are recognized within a Stream section.
361
362 @table @option
363 @item Feed @var{feed_name}
364 Set the input feed.
365
366 Must be specified.
367
368 @item Format @var{format_name}
369 Set the format of the stream.
370
371 Must be the name of a format recognized by FFmpeg.
372
373 @item AudioBitRate @var{rate}
374 Set bitrate for the audio stream in KB per second.
375
376 @item AudioChannels @var{n}
377 Set number of audio channels.
378
379 @item AudioSampleRate @var{n}
380 Set sampling frequency for audio. When using low bitrates, you should
381 lower this frequency to 22050 or 11025. The supported frequencies
382 depend on the selected audio codec.
383
384 @item VideoBitRate @var{n}
385 Set bitrate for the video stream in KB per second.
386
387 @item VideoBitRateRange @var{range}
388 Set video bitrate range.
389
390 @item VideoBitRateRangeTolerance @var{n}
391
392 @item PixelFormat
393 Set video pixel format.
394
395 @item VideoBufferSize @var{n}
396 Set ratecontrol buffer size.
397
398 @item VideoFrameRate @var{n}
399 Set number of video frames per second.
400
401 @item VideoSize
402 Set size of the video frame, must be an abbreviation or in the form
403 @var{W}x@var{H}.  See @ref{video size syntax,,the Video size section
404 in the ffmpeg-utils(1) manual,ffmpeg-utils}.
405
406 Default value is @code{160x128}.
407
408 @item VideoIntraOnly
409 Transmit only intra frames (useful for low bitrates, but kills frame rate).
410
411 @item VideoGopSize @var{n}
412 If non-intra only, an intra frame is transmitted every VideoGopSize
413 frames. Video synchronization can only begin at an intra frame.
414
415 @item VideoHighQuality
416 @item Video4MotionVector
417
418 @item AudioCodec @var{codec_name}
419 @item VideoCodec @var{codec_name}
420 Set audio/video codec.
421
422 @item NoAudio
423 @item NoVideo
424 Suppress audio/video.
425
426 @item VideoQMin @var{n}
427 @item VideoQMax @var{n}
428 Set video qmin/qmax.
429
430 @item AVOptionAudio @var{option} @var{value}
431 @item AVOptionVideo @var{option} @var{value}
432 Set generic option for audio/video stream.
433
434 @item AVPresetAudio @var{preset}
435 @item AVOptionVideo @var{preset}
436 Set preset for audio/video stream.
437
438 @var{preset} must be the path of a preset file.
439
440 @item Preroll @var{n}
441 Set this to the number of seconds backwards in time to start. Note that
442 most players will buffer 5-10 seconds of video, and also you need to allow
443 for a keyframe to appear in the data stream.
444
445 Default value is 0.
446
447 @item ACL @var{spec}
448 Set ACL for the stream.
449
450 @item Author @var{value}
451 @item Comment @var{value}
452 @item Copyright @var{value}
453 @item Title @var{value}
454 Set metadata corresponding to the option.
455
456 @item StartSendOnKey
457 Do not send stream until it gets the first key frame. By default
458 @command{ffserver} will send data immediately.
459
460 @item FaviconURL @var{url}
461 Set favicon (favourite icon) for the server status page. It is ignored
462 for regular streams.
463 @end table
464
465 @subsection Server status stream
466
467 A server status stream is a special stream which is used to show
468 statistics about the @command{ffserver} operations.
469
470 It must be specified setting the option @option{Format} to
471 @code{status}.
472
473 @section Redirect section
474
475 A redirect section specifies where to redirect the requested URL to
476 another page.
477
478 A redirect section must be introduced by the line:
479 @example
480 <Redirect NAME>
481 @end example
482
483 where @var{NAME} is the name of the page which should be redirected.
484
485 It only accepts the option @option{URL}, which specify the redirection
486 URL.
487
488 @chapter Stream examples
489
490 @itemize
491 @item
492 Multipart JPEG
493 @example
494 <Stream test.mjpg>
495 Feed feed1.ffm
496 Format mpjpeg
497 VideoFrameRate 2
498 VideoIntraOnly
499 NoAudio
500 Strict -1
501 </Stream>
502 @end example
503
504 @item
505 Single JPEG
506 @example
507 <Stream test.jpg>
508 Feed feed1.ffm
509 Format jpeg
510 VideoFrameRate 2
511 VideoIntraOnly
512 #VideoSize 352x240
513 NoAudio
514 Strict -1
515 </Stream>
516 @end example
517
518 @item
519 Flash
520 @example
521 <Stream test.swf>
522 Feed feed1.ffm
523 Format swf
524 VideoFrameRate 2
525 VideoIntraOnly
526 NoAudio
527 </Stream>
528 @end example
529
530 @item
531 ASF compatible
532 @example
533 <Stream test.asf>
534 Feed feed1.ffm
535 Format asf
536 VideoFrameRate 15
537 VideoSize 352x240
538 VideoBitRate 256
539 VideoBufferSize 40
540 VideoGopSize 30
541 AudioBitRate 64
542 StartSendOnKey
543 </Stream>
544 @end example
545
546 @item
547 MP3 audio
548 @example
549 <Stream test.mp3>
550 Feed feed1.ffm
551 Format mp2
552 AudioCodec mp3
553 AudioBitRate 64
554 AudioChannels 1
555 AudioSampleRate 44100
556 NoVideo
557 </Stream>
558 @end example
559
560 @item
561 Ogg Vorbis audio:
562 @example
563 <Stream test.ogg>
564 Feed feed1.ffm
565 Title "Stream title"
566 AudioBitRate 64
567 AudioChannels 2
568 AudioSampleRate 44100
569 NoVideo
570 </Stream>
571 @end example
572
573 @item
574 Real with audio only at 32 kbits
575 @example
576 <Stream test.ra>
577 Feed feed1.ffm
578 Format rm
579 AudioBitRate 32
580 NoVideo
581 NoAudio
582 </Stream>
583 @end example
584
585 @item
586 Real with audio and video at 64 kbits
587 @example
588 <Stream test.rm>
589 Feed feed1.ffm
590 Format rm
591 AudioBitRate 32
592 VideoBitRate 128
593 VideoFrameRate 25
594 VideoGopSize 25
595 NoAudio
596 </Stream>
597 @end example
598
599 @item
600 For stream coming from a file: you only need to set the input filename
601 and optionally a new format.
602
603 @example
604 <Stream file.rm>
605 File "/usr/local/httpd/htdocs/tlive.rm"
606 NoAudio
607 </Stream>
608 @end example
609
610 @example
611 <Stream file.asf>
612 File "/usr/local/httpd/htdocs/test.asf"
613 NoAudio
614 Author "Me"
615 Copyright "Super MegaCorp"
616 Title "Test stream from disk"
617 Comment "Test comment"
618 </Stream>
619 @end example
620 @end itemize
621
622 @c man end
623
624 @include config.texi
625 @ifset config-all
626 @ifset config-avutil
627 @include utils.texi
628 @end ifset
629 @ifset config-avcodec
630 @include codecs.texi
631 @include bitstream_filters.texi
632 @end ifset
633 @ifset config-avformat
634 @include formats.texi
635 @include protocols.texi
636 @end ifset
637 @ifset config-avdevice
638 @include devices.texi
639 @end ifset
640 @ifset config-swresample
641 @include resampler.texi
642 @end ifset
643 @ifset config-swscale
644 @include scaler.texi
645 @end ifset
646 @ifset config-avfilter
647 @include filters.texi
648 @end ifset
649 @end ifset
650
651 @chapter See Also
652
653 @ifhtml
654 @ifset config-all
655 @url{ffserver.html,ffserver},
656 @end ifset
657 @ifset config-not-all
658 @url{ffserver-all.html,ffserver-all},
659 @end ifset
660 the @file{doc/ffserver.conf} example,
661 @url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe},
662 @url{ffmpeg-utils.html,ffmpeg-utils},
663 @url{ffmpeg-scaler.html,ffmpeg-scaler},
664 @url{ffmpeg-resampler.html,ffmpeg-resampler},
665 @url{ffmpeg-codecs.html,ffmpeg-codecs},
666 @url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters},
667 @url{ffmpeg-formats.html,ffmpeg-formats},
668 @url{ffmpeg-devices.html,ffmpeg-devices},
669 @url{ffmpeg-protocols.html,ffmpeg-protocols},
670 @url{ffmpeg-filters.html,ffmpeg-filters}
671 @end ifhtml
672
673 @ifnothtml
674 @ifset config-all
675 ffserver(1),
676 @end ifset
677 @ifset config-not-all
678 ffserver-all(1),
679 @end ifset
680 the @file{doc/ffserver.conf} example, ffmpeg(1), ffplay(1), ffprobe(1),
681 ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
682 ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
683 ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
684 @end ifnothtml
685
686 @include authors.texi
687
688 @ignore
689
690 @setfilename ffserver
691 @settitle ffserver video server
692
693 @end ignore
694
695 @bye