Udpcast over satellite
The issues
Satellite transmissions have a high latency (250 milliseconds, due to distance travelled by signal), and usually no return channel (or a costly return channel).
In its default mode, udpcast depends on a return channel with reasonable round trip time in order to manage its acknowledge packets. These acknowledge packets are used by the sender to decide which packets to retransmit. If the return channel is too slow, the need of waiting for these acknowledge packets slow down the transmission, because further slices may not be transmitted until the older slices are acknowledged.
The solution
In order to deal with these situations, udpcast has an asynchronous mode in which the sender does not depend on acknowledgment packets. Instead, it transmits a certain amount of forward error correction packets in addition to the data. These packets may then be used by the receiver to reconstruct data packets that might have been lost.
udp-sender command line options
Example:udp-sender --async --fec 8x6/64 --max-bitrate 39m --mcast-rdv-addr 224.2.2.1 -mcast-data-addr 224.2.2.2 --interface eth1 -f example.bin
Explanations:
- --async
- Switches on asynchronous (acknowledgement-less) mode.
- --fec IxF/D
Configures forward error correction mode. For every D datablocks include F Fec blocks, and use I interleave.
If less (or equal) than F blocks are lost in a fec group, the group may be recovered by use of these redundant blocks.
"Interleave" is meant to offer better protection against burst packet loss (many consecutive packets lost). It works by keeping I fec groups open at once, and alternating among them. So, with I=8 the first packet transmitted will be of group 1, the next of group 2, etc. and the nineth will be group 1 again. The effect of this is that a burst packet loss is spread over many groups. With the parameters above (8x6/64) we can afford to lose 48 packets in a row (which would mean that each of the 8 groups would only lose 6 packets), whereas with no interleave, we would fail at 6.
Higher interleave does need more memory though, and introduces more latency.
Increasing the F/N ratio increases bandwidth needs (more redundancy).
- --max-bitrate br
- Configures maximum bitrate. This is mandatory with --async mode because without acknowledgment packets, there is no flow control either.
- --mcast-rdv-addr 224.2.2.1 -mcast-data-addr 224.2.2.2
- Configure unique adresses here in order to keep any simultaneous transfer from mixing each other up. Until version 20060312, rdv and data address must be different. From version 20060320, they may be the same.
- --interface eth1
- Configure the network interface towards the satellite equipment (Opal, Multiprotocol encapsulator, etc.) here.
- -f file
- File to be transmitted
udp-receiver command line options
Example:udp-receiver --nosync --mcast-rdv-addr 224.2.2.1 --interface dvb0 -f example.bin
Explanation:
- --nosync
- Don't write output file in synchronous mode. Synchronous mode would stall the receiver from time to time, leading to aborted transmissions because of absence of flow control. Starting from version 20060320, this is default behavior when writing to a file.
- --mcast-rdv-addr 224.2.2.1
- Configure same rdv adress here as on sender. No need to configure the data address, as this is sent by the sender to the rdv address.
- --interface dvb0
- Configure the netowrk interface name of your DVB card here. On Windows (udp-receiver.exe), use the IP address of the card instead of the name.
- -f file
- File to be received