1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Fix TWCC delta bug.

This commit is contained in:
winlin 2020-06-26 15:20:24 +08:00
parent 94a4eaffda
commit 62b70943d4
2 changed files with 78 additions and 72 deletions

View file

@ -773,6 +773,17 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
{
srs_error_t err = srs_success;
err = do_encode(buffer);
clear();
return err;
}
srs_error_t SrsRtcpTWCC::do_encode(SrsBuffer *buffer)
{
srs_error_t err = srs_success;
if(!buffer->require(nb_bytes())) {
return srs_error_new(ERROR_RTC_RTCP, "requires %d bytes", nb_bytes());
}
@ -787,7 +798,6 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
uint16_t last_sn = base_sn_;
packet_count_ = recv_packes_.size();
do {
// encode chunk
SrsRtcpTWCC::SrsRtcpTWCCChunk chunk;
for(; it_sn != recv_sns_.end(); ++it_sn) {
@ -795,9 +805,9 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
// calculate delta
it_ts = recv_packes_.find(current_sn);
srs_utime_t delta_us = calculate_delta_us(it_ts->second, last_ts);
uint16_t delta = delta_us;
int16_t delta = delta_us;
if(delta != delta_us) {
return srs_error_new(ERROR_RTC_RTCP, "twcc: delta:%lld, exceeds the 16-bit base receive delta", delta_us);
return srs_error_new(ERROR_RTC_RTCP, "twcc: delta:%" PRId64 ", exceeds the 16bits", delta_us);
}
if(current_sn > (last_sn + 1)) {
@ -835,8 +845,7 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
header_.length -= 1;
if(srs_success != (err = encode_header(buffer))) {
err = srs_error_wrap(err, "encode header");
break;
return srs_error_wrap(err, "encode header");
}
buffer->write_4bytes(sender_ssrc_);
buffer->write_4bytes(media_ssrc_);
@ -863,10 +872,6 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
pkt_len++;
}
} while(0);
clear();
return err;
}

View file

@ -293,7 +293,8 @@ public:
virtual srs_error_t decode(SrsBuffer *buffer);
virtual int nb_bytes();
virtual srs_error_t encode(SrsBuffer *buffer);
private:
srs_error_t do_encode(SrsBuffer *buffer);
};
class SrsRtcpNack : public SrsRtcpCommon