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