From 3e85da2afd1b3d36290763eebf84dd66ad08636c Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 19 Sep 2022 17:26:15 +0200 Subject: [PATCH] Match libav's RTMP receive window rollover behaviour --- lib/rtmpchunks.cpp | 5 +++++ src/output/output_rtmp.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/rtmpchunks.cpp b/lib/rtmpchunks.cpp index e7c151f0..5f9d33f0 100644 --- a/lib/rtmpchunks.cpp +++ b/lib/rtmpchunks.cpp @@ -475,6 +475,11 @@ bool RTMPStream::Chunk::Parse(Socket::Buffer &buffer){ } lastrecv[cs_id] = *this; RTMPStream::rec_cnt += i + real_len; + if (RTMPStream::rec_cnt >= 0xf0000000){ + INFO_MSG("Resetting receive window due to impending rollover"); + RTMPStream::rec_cnt -= 0xf0000000; + RTMPStream::rec_window_at = 0; + } if (len_left == 0){ return true; }else{ diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index 16a400d0..23194f4a 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -1599,7 +1599,7 @@ namespace Mist{ while (next.Parse(inputBuffer)){ // send ACK if we received a whole window - if ((RTMPStream::rec_cnt - RTMPStream::rec_window_at > RTMPStream::rec_window_size) || Util::bootSecs() > lastAck+15){ + if ((RTMPStream::rec_cnt - RTMPStream::rec_window_at > RTMPStream::rec_window_size / 4) || Util::bootSecs() > lastAck+15){ lastAck = Util::bootSecs(); RTMPStream::rec_window_at = RTMPStream::rec_cnt; myConn.SendNow(RTMPStream::SendCTL(3, RTMPStream::rec_cnt)); // send ack (msg 3)