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