Re: streaming protocol, satellite links
Sean Adams <[email protected]> Fri, 5 Oct 2001 19:24:36 +0000 (GMT)
| Newsgroups | gmane.music.equipment.slimp3.dev |
|---|---|
| Message-ID | <[email protected]> |
> >2. I'd like to ask if it would be possible to have an option on the server > >to force the source address of any requests (streamed data) to any IP ? I > >need this because I have a satellite internet connection which I try to > >bring all my large bandwidth information in via. I have this setup for > >squid, smtp, winamp, window media player and quicktime. > > Before you say I should just use IPNAT I do not want to do this because > >of the way my network is designed and how I use it. I'm not sure I understand this question. However, I should point out that the SliMP3 streaming protocol is currently limited by latency, because it does not maintain more than one packet in flight at a given time. Of course for the usual setup where there will be just a few ethernet hops between the SliMP3 and the server. This is OK, but we need something different for high-latency links. Just forwarding the UDP packets over a satellite link (let's assume 500ms RTT, but isn't it much more?) will result in a maximum throughput of 1400B _____ = 2.9 Kbps :( 500ms Factor in a timeout for every dropped packet (and there will be a moderate number on a satellite link) and the effective throughput is going to be even worse. Granted, we could just make it a requirement that the server has to be close to the client (server proxies using TCP), but it would be better to improve the protocol so it doesn't matter. There are a few solutions to this. Use TCP (least preferable - not flexible) TCP is partially implemented on the player - note that you can connect to port 23, but nothing happens after that. The only advantage of doing TCP is that it would simplify the server side. There's still a lot of work left to do on the client. The big disadvatage to TCP is that we won't have the ability to use more agressive timeout/retransmit logic, and there definitely isn't enough RAM/ROM on the client to do SACK. Kludge the existing protocol (not bad - easiest) We could send packets that the player hasn't asked for yet (being careful not to overflow his buffer). The player does cumulative ACKs (requests, really, it's the same thing) so we won't know exactly which packet was dropped. Still this would be a big improvement, but it would waste some bandwidth. Use a new protocol (best, I think) I think the best protocol is one where the client acknowledges every packet individually, and it's the server's responsibility to keep track of the client's buffer usage, which packets need to be retransmitted, timeouts, etc. This would simplify the client side quite a bit, at the expense of having to implement a fairly complex TCP-like protocol on the server side. Ultimately this looks like the best solution because it gives full control of the protocol to the application. We'll have to deal with the same issues as other UDP streaming protocols - in particular, detecting link capacity, being fair to TCP connections sharing the same path, and refusing to stream or reducing the data rate (reencoding the MPEG!!) if we're causing too much packet loss. Sean ------------------------ Yahoo! Groups Sponsor ---------------------~--> Get your FREE VeriSign guide to security solutions for your web site: encrypting transactions, securing intranets, and more! http://us.click.yahoo.com/UnN2wB/m5_CAA/yigFAA/rIp0lB/TM ---------------------------------------------------------------------~-> To unsubscribe from this group, send an email to: [email protected] Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/