A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/Haivision/srt/commit/08e6482fe6814d6c4a6929e101ed9874f08593f6 below:

[core] SND prioritize original packets in live configuration · Haivision/srt@08e6482 · GitHub

@@ -9178,6 +9178,131 @@ int srt::CUDT::packLostData(CPacket& w_packet, steady_clock::time_point& w_origi

9178 9178

return 0;

9179 9179

}

9180 9180 9181 +

#if SRT_DEBUG_TRACE_SND

9182 +

class snd_logger

9183 +

{

9184 +

typedef srt::sync::steady_clock steady_clock;

9185 + 9186 +

public:

9187 +

snd_logger() {}

9188 + 9189 +

~snd_logger()

9190 +

{

9191 +

ScopedLock lck(m_mtx);

9192 +

m_fout.close();

9193 +

}

9194 + 9195 +

struct

9196 +

{

9197 +

typedef srt::sync::steady_clock steady_clock;

9198 +

long long usElapsed;

9199 +

steady_clock::time_point tsNow;

9200 +

int usSRTT;

9201 +

int usRTTVar;

9202 +

int msSndBuffSpan;

9203 +

int msTimespanTh;

9204 +

int msNextUniqueToSend;

9205 +

long long usElapsedLastDrop;

9206 +

bool canRexmit;

9207 +

int iPktSeqno;

9208 +

bool isRetransmitted;

9209 +

} state;

9210 + 9211 +

void trace()

9212 +

{

9213 +

using namespace srt::sync;

9214 +

ScopedLock lck(m_mtx);

9215 +

create_file();

9216 + 9217 +

m_fout << state.usElapsed << ",";

9218 +

m_fout << state.usSRTT << ",";

9219 +

m_fout << state.usRTTVar << ",";

9220 +

m_fout << state.msSndBuffSpan << ",";

9221 +

m_fout << state.msTimespanTh << ",";

9222 +

m_fout << state.msNextUniqueToSend << ",";

9223 +

m_fout << state.usElapsedLastDrop << ",";

9224 +

m_fout << state.canRexmit << ",";

9225 +

m_fout << state.iPktSeqno << ',';

9226 +

m_fout << state.isRetransmitted << '\n';

9227 + 9228 +

m_fout.flush();

9229 +

}

9230 + 9231 +

private:

9232 +

void print_header()

9233 +

{

9234 +

m_fout << "usElapsed,usSRTT,usRTTVar,msSndBuffTimespan,msTimespanTh,msNextUniqueToSend,usDLastDrop,canRexmit,sndPktSeqno,isRexmit";

9235 +

m_fout << "\n";

9236 +

}

9237 + 9238 +

void create_file()

9239 +

{

9240 +

if (m_fout.is_open())

9241 +

return;

9242 + 9243 +

m_start_time = srt::sync::steady_clock::now();

9244 +

std::string str_tnow = srt::sync::FormatTimeSys(m_start_time);

9245 +

str_tnow.resize(str_tnow.size() - 7); // remove trailing ' [SYST]' part

9246 +

while (str_tnow.find(':') != std::string::npos)

9247 +

{

9248 +

str_tnow.replace(str_tnow.find(':'), 1, 1, '_');

9249 +

}

9250 +

const std::string fname = "snd_trace_" + str_tnow + ".csv";

9251 +

m_fout.open(fname, std::ofstream::out);

9252 +

if (!m_fout)

9253 +

std::cerr << "IPE: Failed to open " << fname << "!!!\n";

9254 + 9255 +

print_header();

9256 +

}

9257 + 9258 +

private:

9259 +

srt::sync::Mutex m_mtx;

9260 +

std::ofstream m_fout;

9261 +

srt::sync::steady_clock::time_point m_start_time;

9262 +

};

9263 + 9264 +

snd_logger g_snd_logger;

9265 +

#endif // SRT_DEBUG_TRACE_SND

9266 + 9267 +

bool srt::CUDT::isRetransmissionAllowed(const time_point& tnow SRT_ATR_UNUSED)

9268 +

{

9269 +

// Prioritization of original packets only applies to Live CC.

9270 +

if (!m_bPeerTLPktDrop || !m_config.bMessageAPI)

9271 +

return true;

9272 + 9273 +

// TODO: lock sender buffer?

9274 +

const time_point tsNextPacket = m_pSndBuffer->peekNextOriginal();

9275 + 9276 +

#if SRT_DEBUG_TRACE_SND

9277 +

const int buffdelay_ms = count_milliseconds(m_pSndBuffer->getBufferingDelay(tnow));

9278 +

// If there is a small loss, still better to retransmit. If timespan is already big,

9279 +

// then consider sending original packets.

9280 +

const int threshold_ms_min = (2 * m_iSRTT + 4 * m_iRTTVar + COMM_SYN_INTERVAL_US) / 1000;

9281 +

const int msNextUniqueToSend = count_milliseconds(tnow - tsNextPacket) + m_iPeerTsbPdDelay_ms;

9282 + 9283 +

g_snd_logger.state.tsNow = tnow;

9284 +

g_snd_logger.state.usElapsed = count_microseconds(tnow - m_stats.tsStartTime);

9285 +

g_snd_logger.state.usSRTT = m_iSRTT;

9286 +

g_snd_logger.state.usRTTVar = m_iRTTVar;

9287 +

g_snd_logger.state.msSndBuffSpan = buffdelay_ms;

9288 +

g_snd_logger.state.msTimespanTh = threshold_ms_min;

9289 +

g_snd_logger.state.msNextUniqueToSend = msNextUniqueToSend;

9290 +

g_snd_logger.state.usElapsedLastDrop = count_microseconds(tnow - m_tsLastTLDrop);

9291 +

g_snd_logger.state.canRexmit = false;

9292 +

#endif

9293 + 9294 +

if (tsNextPacket != time_point())

9295 +

{

9296 +

// Can send original packet, so just send it

9297 +

return false;

9298 +

}

9299 + 9300 +

#if SRT_DEBUG_TRACE_SND

9301 +

g_snd_logger.state.canRexmit = true;

9302 +

#endif

9303 +

return true;

9304 +

}

9305 + 9181 9306

std::pair<bool, steady_clock::time_point> srt::CUDT::packData(CPacket& w_packet)

9182 9307

{

9183 9308

int payload = 0;

@@ -9206,7 +9331,10 @@ std::pair<bool, steady_clock::time_point> srt::CUDT::packData(CPacket& w_packet)

9206 9331

if (!m_bOpened)

9207 9332

return std::make_pair(false, enter_time);

9208 9333 9209 -

payload = packLostData((w_packet), (origintime));

9334 +

payload = isRetransmissionAllowed(enter_time)

9335 +

? packLostData((w_packet), (origintime))

9336 +

: 0;

9337 + 9210 9338

if (payload > 0)

9211 9339

{

9212 9340

reason = "reXmit";

@@ -9459,6 +9587,12 @@ bool srt::CUDT::packUniqueData(CPacket& w_packet, time_point& w_origintime)

9459 9587

}

9460 9588

}

9461 9589 9590 +

#if SRT_DEBUG_TRACE_SND

9591 +

g_snd_logger.state.iPktSeqno = w_packet.m_iSeqNo;

9592 +

g_snd_logger.state.isRetransmitted = w_packet.getRexmitFlag();

9593 +

g_snd_logger.trace();

9594 +

#endif

9595 + 9462 9596

return true;

9463 9597

}

9464 9598

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4