Match libav's RTMP receive window rollover behaviour
This commit is contained in:
parent
f3c003481d
commit
3e85da2afd
2 changed files with 6 additions and 1 deletions
|
@ -475,6 +475,11 @@ bool RTMPStream::Chunk::Parse(Socket::Buffer &buffer){
|
||||||
}
|
}
|
||||||
lastrecv[cs_id] = *this;
|
lastrecv[cs_id] = *this;
|
||||||
RTMPStream::rec_cnt += i + real_len;
|
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){
|
if (len_left == 0){
|
||||||
return true;
|
return true;
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -1599,7 +1599,7 @@ namespace Mist{
|
||||||
while (next.Parse(inputBuffer)){
|
while (next.Parse(inputBuffer)){
|
||||||
|
|
||||||
// send ACK if we received a whole window
|
// 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();
|
lastAck = Util::bootSecs();
|
||||||
RTMPStream::rec_window_at = RTMPStream::rec_cnt;
|
RTMPStream::rec_window_at = RTMPStream::rec_cnt;
|
||||||
myConn.SendNow(RTMPStream::SendCTL(3, RTMPStream::rec_cnt)); // send ack (msg 3)
|
myConn.SendNow(RTMPStream::SendCTL(3, RTMPStream::rec_cnt)); // send ack (msg 3)
|
||||||
|
|
Loading…
Add table
Reference in a new issue