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