1 | \input texinfo @c -*- texinfo -*-
|
---|
2 |
|
---|
3 | @settitle FFserver Documentation
|
---|
4 | @titlepage
|
---|
5 | @sp 7
|
---|
6 | @center @titlefont{FFserver Documentation}
|
---|
7 | @sp 3
|
---|
8 | @end titlepage
|
---|
9 |
|
---|
10 |
|
---|
11 | @chapter Introduction
|
---|
12 |
|
---|
13 | @c man begin DESCRIPTION
|
---|
14 | FFserver is a streaming server for both audio and video. It supports
|
---|
15 | several live feeds, streaming from files and time shifting on live feeds
|
---|
16 | (you can seek to positions in the past on each live feed, provided you
|
---|
17 | specify a big enough feed storage in ffserver.conf).
|
---|
18 |
|
---|
19 | This documentation covers only the streaming aspects of ffserver /
|
---|
20 | ffmpeg. All questions about parameters for ffmpeg, codec questions,
|
---|
21 | etc. are not covered here. Read @file{ffmpeg-doc.html} for more
|
---|
22 | information.
|
---|
23 | @c man end
|
---|
24 |
|
---|
25 | @chapter QuickStart
|
---|
26 |
|
---|
27 | [Contributed by Philip Gladstone, philip-ffserver at gladstonefamily dot net]
|
---|
28 |
|
---|
29 | @section What can this do?
|
---|
30 |
|
---|
31 | When properly configured and running, you can capture video and audio in real
|
---|
32 | time from a suitable capture card, and stream it out over the Internet to
|
---|
33 | either Windows Media Player or RealAudio player (with some restrictions).
|
---|
34 |
|
---|
35 | It can also stream from files, though that is currently broken. Very often, a
|
---|
36 | web server can be used to serve up the files just as well.
|
---|
37 |
|
---|
38 | It can stream prerecorded video from .ffm files, though it is somewhat tricky
|
---|
39 | to make it work correctly.
|
---|
40 |
|
---|
41 | @section What do I need?
|
---|
42 |
|
---|
43 | I use Linux on a 900MHz Duron with a cheapo Bt848 based TV capture card. I'm
|
---|
44 | using stock Linux 2.4.17 with the stock drivers. [Actually that isn't true,
|
---|
45 | I needed some special drivers for my motherboard-based sound card.]
|
---|
46 |
|
---|
47 | I understand that FreeBSD systems work just fine as well.
|
---|
48 |
|
---|
49 | @section How do I make it work?
|
---|
50 |
|
---|
51 | First, build the kit. It *really* helps to have installed LAME first. Then when
|
---|
52 | you run the ffserver ./configure, make sure that you have the --enable-mp3lame
|
---|
53 | flag turned on.
|
---|
54 |
|
---|
55 | LAME is important as it allows for streaming audio to Windows Media Player.
|
---|
56 | Don't ask why the other audio types do not work.
|
---|
57 |
|
---|
58 | As a simple test, just run the following two command lines (assuming that you
|
---|
59 | have a V4L video capture card):
|
---|
60 |
|
---|
61 | @example
|
---|
62 | ./ffserver -f doc/ffserver.conf &
|
---|
63 | ./ffmpeg http://localhost:8090/feed1.ffm
|
---|
64 | @end example
|
---|
65 |
|
---|
66 | At this point you should be able to go to your Windows machine and fire up
|
---|
67 | Windows Media Player (WMP). Go to Open URL and enter
|
---|
68 |
|
---|
69 | @example
|
---|
70 | http://<linuxbox>:8090/test.asf
|
---|
71 | @end example
|
---|
72 |
|
---|
73 | You should (after a short delay) see video and hear audio.
|
---|
74 |
|
---|
75 | WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to
|
---|
76 | transfer the entire file before starting to play.
|
---|
77 | The same is true of AVI files.
|
---|
78 |
|
---|
79 | @section What happens next?
|
---|
80 |
|
---|
81 | You should edit the ffserver.conf file to suit your needs (in terms of
|
---|
82 | frame rates etc). Then install ffserver and ffmpeg, write a script to start
|
---|
83 | them up, and off you go.
|
---|
84 |
|
---|
85 | @section Troubleshooting
|
---|
86 |
|
---|
87 | @subsection I don't hear any audio, but video is fine.
|
---|
88 |
|
---|
89 | Maybe you didn't install LAME, or got your ./configure statement wrong. Check
|
---|
90 | the ffmpeg output to see if a line referring to MP3 is present. If not, then
|
---|
91 | your configuration was incorrect. If it is, then maybe your wiring is not
|
---|
92 | set up correctly. Maybe the sound card is not getting data from the right
|
---|
93 | input source. Maybe you have a really awful audio interface (like I do)
|
---|
94 | that only captures in stereo and also requires that one channel be flipped.
|
---|
95 | If you are one of these people, then export 'AUDIO_FLIP_LEFT=1' before
|
---|
96 | starting ffmpeg.
|
---|
97 |
|
---|
98 | @subsection The audio and video loose sync after a while.
|
---|
99 |
|
---|
100 | Yes, they do.
|
---|
101 |
|
---|
102 | @subsection After a long while, the video update rate goes way down in WMP.
|
---|
103 |
|
---|
104 | Yes, it does. Who knows why?
|
---|
105 |
|
---|
106 | @subsection WMP 6.4 behaves differently to WMP 7.
|
---|
107 |
|
---|
108 | Yes, it does. Any thoughts on this would be gratefully received. These
|
---|
109 | differences extend to embedding WMP into a web page. [There are two
|
---|
110 | object IDs that you can use: The old one, which does not play well, and
|
---|
111 | the new one, which does (both tested on the same system). However,
|
---|
112 | I suspect that the new one is not available unless you have installed WMP 7].
|
---|
113 |
|
---|
114 | @section What else can it do?
|
---|
115 |
|
---|
116 | You can replay video from .ffm files that was recorded earlier.
|
---|
117 | However, there are a number of caveats, including the fact that the
|
---|
118 | ffserver parameters must match the original parameters used to record the
|
---|
119 | file. If they do not, then ffserver deletes the file before recording into it.
|
---|
120 | (Now that I write this, it seems broken).
|
---|
121 |
|
---|
122 | You can fiddle with many of the codec choices and encoding parameters, and
|
---|
123 | there are a bunch more parameters that you cannot control. Post a message
|
---|
124 | to the mailing list if there are some 'must have' parameters. Look in
|
---|
125 | ffserver.conf for a list of the currently available controls.
|
---|
126 |
|
---|
127 | It will automatically generate the ASX or RAM files that are often used
|
---|
128 | in browsers. These files are actually redirections to the underlying ASF
|
---|
129 | or RM file. The reason for this is that the browser often fetches the
|
---|
130 | entire file before starting up the external viewer. The redirection files
|
---|
131 | are very small and can be transferred quickly. [The stream itself is
|
---|
132 | often 'infinite' and thus the browser tries to download it and never
|
---|
133 | finishes.]
|
---|
134 |
|
---|
135 | @section Tips
|
---|
136 |
|
---|
137 | * When you connect to a live stream, most players (WMP, RA, etc) want to
|
---|
138 | buffer a certain number of seconds of material so that they can display the
|
---|
139 | signal continuously. However, ffserver (by default) starts sending data
|
---|
140 | in realtime. This means that there is a pause of a few seconds while the
|
---|
141 | buffering is being done by the player. The good news is that this can be
|
---|
142 | cured by adding a '?buffer=5' to the end of the URL. This means that the
|
---|
143 | stream should start 5 seconds in the past -- and so the first 5 seconds
|
---|
144 | of the stream are sent as fast as the network will allow. It will then
|
---|
145 | slow down to real time. This noticeably improves the startup experience.
|
---|
146 |
|
---|
147 | You can also add a 'Preroll 15' statement into the ffserver.conf that will
|
---|
148 | add the 15 second prebuffering on all requests that do not otherwise
|
---|
149 | specify a time. In addition, ffserver will skip frames until a key_frame
|
---|
150 | is found. This further reduces the startup delay by not transferring data
|
---|
151 | that will be discarded.
|
---|
152 |
|
---|
153 | * You may want to adjust the MaxBandwidth in the ffserver.conf to limit
|
---|
154 | the amount of bandwidth consumed by live streams.
|
---|
155 |
|
---|
156 | @section Why does the ?buffer / Preroll stop working after a time?
|
---|
157 |
|
---|
158 | It turns out that (on my machine at least) the number of frames successfully
|
---|
159 | grabbed is marginally less than the number that ought to be grabbed. This
|
---|
160 | means that the timestamp in the encoded data stream gets behind realtime.
|
---|
161 | This means that if you say 'Preroll 10', then when the stream gets 10
|
---|
162 | or more seconds behind, there is no Preroll left.
|
---|
163 |
|
---|
164 | Fixing this requires a change in the internals of how timestamps are
|
---|
165 | handled.
|
---|
166 |
|
---|
167 | @section Does the @code{?date=} stuff work.
|
---|
168 |
|
---|
169 | Yes (subject to the limitation outlined above). Also note that whenever you
|
---|
170 | start ffserver, it deletes the ffm file (if any parameters have changed),
|
---|
171 | thus wiping out what you had recorded before.
|
---|
172 |
|
---|
173 | The format of the @code{?date=xxxxxx} is fairly flexible. You should use one
|
---|
174 | of the following formats (the 'T' is literal):
|
---|
175 |
|
---|
176 | @example
|
---|
177 | * YYYY-MM-DDTHH:MM:SS (localtime)
|
---|
178 | * YYYY-MM-DDTHH:MM:SSZ (UTC)
|
---|
179 | @end example
|
---|
180 |
|
---|
181 | You can omit the YYYY-MM-DD, and then it refers to the current day. However
|
---|
182 | note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this
|
---|
183 | may be in the future and so is unlikely to be useful.
|
---|
184 |
|
---|
185 | You use this by adding the ?date= to the end of the URL for the stream.
|
---|
186 | For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
|
---|
187 |
|
---|
188 | @chapter Invocation
|
---|
189 | @section Syntax
|
---|
190 | @example
|
---|
191 | @c man begin SYNOPSIS
|
---|
192 | ffserver [options]
|
---|
193 | @c man end
|
---|
194 | @end example
|
---|
195 |
|
---|
196 | @section Options
|
---|
197 | @c man begin OPTIONS
|
---|
198 | @table @option
|
---|
199 | @item -L
|
---|
200 | Print the license.
|
---|
201 | @item -h
|
---|
202 | Print the help.
|
---|
203 | @item -f configfile
|
---|
204 | Use @file{configfile} instead of @file{/etc/ffserver.conf}.
|
---|
205 | @end table
|
---|
206 | @c man end
|
---|
207 |
|
---|
208 | @ignore
|
---|
209 |
|
---|
210 | @setfilename ffsserver
|
---|
211 | @settitle FFserver video server
|
---|
212 |
|
---|
213 | @c man begin SEEALSO
|
---|
214 | ffmpeg(1), ffplay(1), the @file{ffmpeg/doc/ffserver.conf} example and
|
---|
215 | the HTML documentation of @file{ffmpeg}.
|
---|
216 | @c man end
|
---|
217 |
|
---|
218 | @c man begin AUTHOR
|
---|
219 | Fabrice Bellard
|
---|
220 | @c man end
|
---|
221 |
|
---|
222 | @end ignore
|
---|
223 |
|
---|
224 | @bye
|
---|