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:
parent
94a4eaffda
commit
62b70943d4
2 changed files with 78 additions and 72 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue