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