diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-09-23 15:07:12 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-09-23 15:07:12 +0200 |
commit | 94103967933f4720d0d053735cd1da5e3bbe7a86 (patch) | |
tree | a4c3cf32b67d71e102f586e3457d098c54c8a7ce /contrib/edi | |
parent | 7474a3ec554f48e0259e426c64013c22b6cd5b75 (diff) | |
download | ODR-AudioEnc-94103967933f4720d0d053735cd1da5e3bbe7a86.tar.gz ODR-AudioEnc-94103967933f4720d0d053735cd1da5e3bbe7a86.tar.bz2 ODR-AudioEnc-94103967933f4720d0d053735cd1da5e3bbe7a86.zip |
Pull in common 0c5bf36: spread UDP packets over time to avoid bursts
Diffstat (limited to 'contrib/edi')
-rw-r--r-- | contrib/edi/Transport.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/contrib/edi/Transport.cpp b/contrib/edi/Transport.cpp index d8627fd..fa7588a 100644 --- a/contrib/edi/Transport.cpp +++ b/contrib/edi/Transport.cpp @@ -26,6 +26,7 @@ */ #include "Transport.h" #include <iterator> +#include <cmath> using namespace std; @@ -131,6 +132,12 @@ void Sender::write(const TagPacket& tagpacket) edi_fragments.size()); } + /* Spread out the transmission of all fragments over 75% of the 24ms AF packet duration + * to reduce the risk of losing fragments because of congestion. + * + * 75% was chosen so that other outputs still have time to do their thing. */ + const auto inter_fragment_wait_time = std::chrono::microseconds(llrint(0.75 * 24000.0 / edi_fragments.size())); + // Send over ethernet for (auto& edi_frag : edi_fragments) { if (m_conf.dump) { @@ -155,6 +162,8 @@ void Sender::write(const TagPacket& tagpacket) throw logic_error("EDI destination not implemented"); } } + + std::this_thread::sleep_for(inter_fragment_wait_time); } } else { |