Re: Re: [linux-audio-dev] [ANN] netjack-0.11

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




- most people think udp is evil ;)


UDP is a far better match for audio transmission than TCP. The issue comes does two the difference between the two protocols when it comes to packet loss. Assuming the loss was due to CRC errors or drops under congestion then TCP will recover the lost data itself. UDP will not as it has no concept of transmission control.

The ability of TCP to recover this loss points people in the direction of preferring the protocol, but this is not the case with audio. If there is loss of framing with audio transmission over IP then a better recovery is to accept the loss and resync the data streams. This is in effect what Jack does with audio overruns in soft mode. Relying on TCP to handle the recovery means that you have to wait for the resync, and that works very, very badly with TCP, you are likely to go into a slow start and will have the available bandwidth throttled down to the point where very little audio will get through. The only way for a TCP based audio application to deal with this effect (Van Jacobsen algorithm) is to have adaptive resampling rates where the sampling rate over the network is a function of the bandwidth available. Since the back off algorithm in TCP effectively throttles your available bandwidth then your netjack will have to adapt its resampling rates accordingly, or lose sync completely. Now with TCP, the protocol will attempt to recover all the data you sent, rather than accept the overrun and continue.

The use of UDP will allow you programme to define its own sampling rates, define its own UDP transmission rates, the application (netjack) will then just have to deal with drop outs, zero filling being one option for example.


- it looks like i am the only one messing with BIG (16k) udp packets in
  low latency situations under high SCHED_FIFO load.


If you are looking to put this application over the internet, then these large (or rather 'jumbo') frames are a no-go. The internet does not support large frames, 1480 being the largest generally accepted payload. If you send a jumbo frame then the nearest router to you transmitter will have to fragment the packet from 1x16k down to about 12x1480 byte packets. This negates any hardware based routing as this generally takes place in software running under the router OS. In short you will add a lot of overhead to your application: it is very likely that 12 frames of 1480 bytes would arrive faster than one 16K frame that has been fragmented since you will not have incurred the overhead on the router to fragment the jumbo. There is additional downside in that the loss of a single fragmented frame will result in the loss of the whole jumbo. The loss of a single 'small' frame will be that single loss only as IP is no longer responsible for reassembly of the fragments at the destination - your application is given that responsability.

Nick.

_________________________________________________________________
Don't just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/


[Index of Archives]     [Linux Sound]     [ALSA Users]     [Pulse Audio]     [ALSA Devel]     [Sox Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux