Commit | Line | Data |
---|---|---|
c70a2119 | 1 | \input texinfo @c -*- texinfo -*- |
bdd3c092 | 2 | |
c70a2119 FB |
3 | @settitle FFserver Documentation |
4 | @titlepage | |
5 | @sp 7 | |
6 | @center @titlefont{FFserver Documentation} | |
7 | @sp 3 | |
8 | @end titlepage | |
bdd3c092 | 9 | |
bdd3c092 | 10 | |
c70a2119 | 11 | @chapter Introduction |
bdd3c092 | 12 | |
e99c4e10 | 13 | @c man begin DESCRIPTION |
c70a2119 FB |
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). | |
bdd3c092 | 18 | |
60b51bb2 SS |
19 | FFserver runs in daemon mode by default; that is, it puts itself in |
20 | the background and detaches from its TTY, unless it is launched in | |
21 | debug mode or a NoDaemon option is specified in the configuration | |
22 | file. | |
23 | ||
c70a2119 FB |
24 | This documentation covers only the streaming aspects of ffserver / |
25 | ffmpeg. All questions about parameters for ffmpeg, codec questions, | |
e99c4e10 | 26 | etc. are not covered here. Read @file{ffmpeg-doc.html} for more |
c70a2119 | 27 | information. |
c70a2119 | 28 | |
f26a60a0 SS |
29 | @section How does it work? |
30 | ||
31 | FFserver receives prerecorded files or FFM streams from some ffmpeg | |
32 | instance as input, then streams them over RTP/RTSP/HTTP. | |
33 | ||
34 | An ffserver instance will listen on some port as specified in the | |
35 | configuration file. You can launch one or more instances of ffmpeg and | |
36 | send one or more FFM streams to the port where ffserver is expecting | |
37 | to receive them. Alternately, you can make ffserver launch such ffmpeg | |
38 | instances at startup. | |
39 | ||
40 | Input streams are called feeds, and each one is specified by a <Feed> | |
41 | section in the configuration file. | |
42 | ||
43 | For each feed you can have different output streams in various | |
44 | formats, each one specified by a <Stream> section in the configuration | |
45 | file. | |
46 | ||
d45bad6c SS |
47 | @section Status stream |
48 | ||
49 | FFserver supports an HTTP interface which exposes the current status | |
50 | of the server. | |
51 | ||
52 | Simply point your browser to the address of the special status stream | |
53 | specified in the configuration file. | |
54 | ||
55 | For example if you have: | |
56 | @example | |
57 | <Stream status.html> | |
58 | Format status | |
59 | ||
60 | # Only allow local people to get the status | |
61 | ACL allow localhost | |
62 | ACL allow 192.168.0.0 192.168.255.255 | |
63 | </Stream> | |
64 | @end example | |
65 | ||
66 | then the server will post a page with the status information when | |
67 | the special stream @file{status.html} is requested. | |
68 | ||
c70a2119 | 69 | @section What can this do? |
bdd3c092 PG |
70 | |
71 | When properly configured and running, you can capture video and audio in real | |
72 | time from a suitable capture card, and stream it out over the Internet to | |
73 | either Windows Media Player or RealAudio player (with some restrictions). | |
74 | ||
75 | It can also stream from files, though that is currently broken. Very often, a | |
76 | web server can be used to serve up the files just as well. | |
77 | ||
ae98a915 PG |
78 | It can stream prerecorded video from .ffm files, though it is somewhat tricky |
79 | to make it work correctly. | |
80 | ||
c70a2119 | 81 | @section What do I need? |
bdd3c092 | 82 | |
c27c66c3 | 83 | I use Linux on a 900 MHz Duron with a cheapo Bt848 based TV capture card. I'm |
b1e4528b DB |
84 | using stock Linux 2.4.17 with the stock drivers. [Actually that isn't true, |
85 | I needed some special drivers for my motherboard-based sound card.] | |
bdd3c092 PG |
86 | |
87 | I understand that FreeBSD systems work just fine as well. | |
88 | ||
c70a2119 | 89 | @section How do I make it work? |
bdd3c092 PG |
90 | |
91 | First, build the kit. It *really* helps to have installed LAME first. Then when | |
1cc60c47 DB |
92 | you run the ffserver ./configure, make sure that you have the |
93 | @code{--enable-libmp3lame} flag turned on. | |
bdd3c092 | 94 | |
3e4a1028 | 95 | LAME is important as it allows for streaming audio to Windows Media Player. |
b1e4528b | 96 | Don't ask why the other audio types do not work. |
bdd3c092 | 97 | |
bc2869f6 SS |
98 | As a simple test, just run the following two command lines where INPUTFILE |
99 | is some file which you can decode with ffmpeg: | |
bdd3c092 | 100 | |
c70a2119 | 101 | @example |
bdd3c092 | 102 | ./ffserver -f doc/ffserver.conf & |
bc2869f6 | 103 | ./ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm |
c70a2119 | 104 | @end example |
bdd3c092 | 105 | |
b1e4528b | 106 | At this point you should be able to go to your Windows machine and fire up |
115329f1 | 107 | Windows Media Player (WMP). Go to Open URL and enter |
bdd3c092 | 108 | |
c70a2119 | 109 | @example |
bdd3c092 | 110 | http://<linuxbox>:8090/test.asf |
c70a2119 | 111 | @end example |
bdd3c092 | 112 | |
115329f1 | 113 | You should (after a short delay) see video and hear audio. |
bdd3c092 | 114 | |
96c7b535 | 115 | WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to |
b1e4528b DB |
116 | transfer the entire file before starting to play. |
117 | The same is true of AVI files. | |
96c7b535 | 118 | |
c70a2119 | 119 | @section What happens next? |
bdd3c092 | 120 | |
115329f1 | 121 | You should edit the ffserver.conf file to suit your needs (in terms of |
bdd3c092 PG |
122 | frame rates etc). Then install ffserver and ffmpeg, write a script to start |
123 | them up, and off you go. | |
124 | ||
c70a2119 | 125 | @section Troubleshooting |
bdd3c092 | 126 | |
b1e4528b | 127 | @subsection I don't hear any audio, but video is fine. |
bdd3c092 | 128 | |
b1e4528b DB |
129 | Maybe you didn't install LAME, or got your ./configure statement wrong. Check |
130 | the ffmpeg output to see if a line referring to MP3 is present. If not, then | |
bdd3c092 | 131 | your configuration was incorrect. If it is, then maybe your wiring is not |
115329f1 | 132 | set up correctly. Maybe the sound card is not getting data from the right |
bdd3c092 | 133 | input source. Maybe you have a really awful audio interface (like I do) |
115329f1 DB |
134 | that only captures in stereo and also requires that one channel be flipped. |
135 | If you are one of these people, then export 'AUDIO_FLIP_LEFT=1' before | |
bdd3c092 PG |
136 | starting ffmpeg. |
137 | ||
c70a2119 | 138 | @subsection The audio and video loose sync after a while. |
bdd3c092 PG |
139 | |
140 | Yes, they do. | |
141 | ||
c70a2119 | 142 | @subsection After a long while, the video update rate goes way down in WMP. |
bdd3c092 PG |
143 | |
144 | Yes, it does. Who knows why? | |
145 | ||
c70a2119 | 146 | @subsection WMP 6.4 behaves differently to WMP 7. |
9cfe269e PG |
147 | |
148 | Yes, it does. Any thoughts on this would be gratefully received. These | |
149 | differences extend to embedding WMP into a web page. [There are two | |
758b4bcd DB |
150 | object IDs that you can use: The old one, which does not play well, and |
151 | the new one, which does (both tested on the same system). However, | |
9cfe269e PG |
152 | I suspect that the new one is not available unless you have installed WMP 7]. |
153 | ||
c70a2119 | 154 | @section What else can it do? |
bdd3c092 | 155 | |
ae98a915 | 156 | You can replay video from .ffm files that was recorded earlier. |
115329f1 | 157 | However, there are a number of caveats, including the fact that the |
ae98a915 | 158 | ffserver parameters must match the original parameters used to record the |
3e4a1028 | 159 | file. If they do not, then ffserver deletes the file before recording into it. |
b1e4528b | 160 | (Now that I write this, it seems broken). |
bdd3c092 PG |
161 | |
162 | You can fiddle with many of the codec choices and encoding parameters, and | |
163 | there are a bunch more parameters that you cannot control. Post a message | |
b1e4528b | 164 | to the mailing list if there are some 'must have' parameters. Look in |
bdd3c092 PG |
165 | ffserver.conf for a list of the currently available controls. |
166 | ||
b1e4528b DB |
167 | It will automatically generate the ASX or RAM files that are often used |
168 | in browsers. These files are actually redirections to the underlying ASF | |
169 | or RM file. The reason for this is that the browser often fetches the | |
9cfe269e PG |
170 | entire file before starting up the external viewer. The redirection files |
171 | are very small and can be transferred quickly. [The stream itself is | |
115329f1 | 172 | often 'infinite' and thus the browser tries to download it and never |
9cfe269e PG |
173 | finishes.] |
174 | ||
c70a2119 | 175 | @section Tips |
bdd3c092 | 176 | |
3e4a1028 | 177 | * When you connect to a live stream, most players (WMP, RA, etc) want to |
bdd3c092 PG |
178 | buffer a certain number of seconds of material so that they can display the |
179 | signal continuously. However, ffserver (by default) starts sending data | |
b1e4528b | 180 | in realtime. This means that there is a pause of a few seconds while the |
bdd3c092 | 181 | buffering is being done by the player. The good news is that this can be |
3e4a1028 | 182 | cured by adding a '?buffer=5' to the end of the URL. This means that the |
115329f1 | 183 | stream should start 5 seconds in the past -- and so the first 5 seconds |
b1e4528b | 184 | of the stream are sent as fast as the network will allow. It will then |
bdd3c092 | 185 | slow down to real time. This noticeably improves the startup experience. |
9cfe269e PG |
186 | |
187 | You can also add a 'Preroll 15' statement into the ffserver.conf that will | |
188 | add the 15 second prebuffering on all requests that do not otherwise | |
189 | specify a time. In addition, ffserver will skip frames until a key_frame | |
190 | is found. This further reduces the startup delay by not transferring data | |
191 | that will be discarded. | |
192 | ||
193 | * You may want to adjust the MaxBandwidth in the ffserver.conf to limit | |
194 | the amount of bandwidth consumed by live streams. | |
ce838977 | 195 | |
c70a2119 | 196 | @section Why does the ?buffer / Preroll stop working after a time? |
ce838977 PG |
197 | |
198 | It turns out that (on my machine at least) the number of frames successfully | |
199 | grabbed is marginally less than the number that ought to be grabbed. This | |
b1e4528b DB |
200 | means that the timestamp in the encoded data stream gets behind realtime. |
201 | This means that if you say 'Preroll 10', then when the stream gets 10 | |
202 | or more seconds behind, there is no Preroll left. | |
ce838977 | 203 | |
115329f1 | 204 | Fixing this requires a change in the internals of how timestamps are |
ce838977 PG |
205 | handled. |
206 | ||
c70a2119 | 207 | @section Does the @code{?date=} stuff work. |
ce838977 | 208 | |
b1e4528b DB |
209 | Yes (subject to the limitation outlined above). Also note that whenever you |
210 | start ffserver, it deletes the ffm file (if any parameters have changed), | |
115329f1 | 211 | thus wiping out what you had recorded before. |
ce838977 | 212 | |
c70a2119 | 213 | The format of the @code{?date=xxxxxx} is fairly flexible. You should use one |
ce838977 PG |
214 | of the following formats (the 'T' is literal): |
215 | ||
c70a2119 | 216 | @example |
ce838977 PG |
217 | * YYYY-MM-DDTHH:MM:SS (localtime) |
218 | * YYYY-MM-DDTHH:MM:SSZ (UTC) | |
c70a2119 | 219 | @end example |
ce838977 | 220 | |
115329f1 | 221 | You can omit the YYYY-MM-DD, and then it refers to the current day. However |
3e4a1028 DB |
222 | note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this |
223 | may be in the future and so is unlikely to be useful. | |
ce838977 PG |
224 | |
225 | You use this by adding the ?date= to the end of the URL for the stream. | |
c70a2119 | 226 | For example: @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}. |
fb6b04aa | 227 | @c man end |
c70a2119 | 228 | |
e99c4e10 FB |
229 | @chapter Invocation |
230 | @section Syntax | |
115329f1 | 231 | @example |
e99c4e10 FB |
232 | @c man begin SYNOPSIS |
233 | ffserver [options] | |
234 | @c man end | |
235 | @end example | |
236 | ||
237 | @section Options | |
238 | @c man begin OPTIONS | |
239 | @table @option | |
8117c97e SS |
240 | @item -version |
241 | Show version. | |
e99c4e10 | 242 | @item -L |
d6880d4d | 243 | Show license. |
f346033e SS |
244 | @item -formats |
245 | Show available formats, codecs, protocols, ... | |
e99c4e10 | 246 | @item -h |
d6880d4d | 247 | Show help. |
a19caa0f | 248 | @item -f @var{configfile} |
b1e4528b | 249 | Use @file{configfile} instead of @file{/etc/ffserver.conf}. |
dea7da10 SS |
250 | @item -n |
251 | Enable no-launch mode. This option disables all the Launch directives | |
252 | within the various <Stream> sections. FFserver will not launch any | |
253 | ffmpeg instance, so you will have to launch them manually. | |
c1bb8f97 SS |
254 | @item -d |
255 | Enable debug mode. This option increases log verbosity, directs log | |
d6fbdcec | 256 | messages to stdout and causes ffserver to run in the foreground |
c1bb8f97 | 257 | rather than as a daemon. |
e99c4e10 FB |
258 | @end table |
259 | @c man end | |
260 | ||
261 | @ignore | |
262 | ||
831ec935 | 263 | @setfilename ffserver |
e99c4e10 FB |
264 | @settitle FFserver video server |
265 | ||
266 | @c man begin SEEALSO | |
5ee03c86 | 267 | ffmpeg(1), ffplay(1), the @file{ffmpeg/doc/ffserver.conf} example and |
b1e4528b | 268 | the HTML documentation of @file{ffmpeg}. |
e99c4e10 FB |
269 | @c man end |
270 | ||
271 | @c man begin AUTHOR | |
272 | Fabrice Bellard | |
273 | @c man end | |
274 | ||
275 | @end ignore | |
276 | ||
c70a2119 | 277 | @bye |