Large delays (2 minute) with dummynet
vlm at netli.com
Thu Jul 15 19:58:06 PDT 2004
> I hope this is the right list to post to.
> I'd like to delay a shoutcast stream by around 2 minutes. This
> shoutcast server is used to broadcast commentary on live games and
> the delay is needed so teams can't gain an advantage by hearing the
> commentary to learn where/what the other team is doing. I've
> checked the shoutcast forums and it seems there's nothing I can do
> to the shoutcast daemon to get this delay. Shoutcast listens on
> tcp/8001 for an input stream, and tcp/8000 for listeners to connect
> With 100 streams each using 48kbps, how practical is it to put them
> all through a dummynet pipe with a delay of 120000ms? I figure
> that'll require 100 * 48 / 8 * 120 / 1024 = 70MB of buffering in
> dummynet. That's heaps! Is that possible? Is that using mbufs?
> What would have to be tweaked up?
> I guess it'd be better if I could just add the 2mins of delay to
> the input stream so the delay buffer is smaller and fixed, but I
> don't know how the shoutcast protocol would like that or how the
> different TCP implementations would like it. Would ACKs be coming
> back to the shoutcaster 2 minutes late?
> Ideally it'd be best to have all this buffering happen intelligently
> in userland, but I can't find anything to do that. Am I barking up
> the wrong tree by looking at dummynet?
Yes, you most certainly are. The problem with TCP is that using the standard
window sizes (~32-64k) on the client side and the RTT of two minutes,
the transfer speed will naturally be, literally, couple of hundred
bytes per second. You'll not be able to squeeze 48kbps into this pipe.
Moreover, as the reaction time is slow, there will be various timeout-related
glitches, stopping the transfer periodically and restarting it minutes later.
The network-related delays can offer you no more than several seconds delay.
The best approach is, indeed, a buffering application-level daemon.
vlm at netli.com
More information about the freebsd-net