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;
|
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())) {
|
if(!buffer->require(nb_bytes())) {
|
||||||
return srs_error_new(ERROR_RTC_RTCP, "requires %d bytes", 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_;
|
uint16_t last_sn = base_sn_;
|
||||||
packet_count_ = recv_packes_.size();
|
packet_count_ = recv_packes_.size();
|
||||||
|
|
||||||
do {
|
|
||||||
// encode chunk
|
// encode chunk
|
||||||
SrsRtcpTWCC::SrsRtcpTWCCChunk chunk;
|
SrsRtcpTWCC::SrsRtcpTWCCChunk chunk;
|
||||||
for(; it_sn != recv_sns_.end(); ++it_sn) {
|
for(; it_sn != recv_sns_.end(); ++it_sn) {
|
||||||
|
@ -795,9 +805,9 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
|
||||||
// calculate delta
|
// calculate delta
|
||||||
it_ts = recv_packes_.find(current_sn);
|
it_ts = recv_packes_.find(current_sn);
|
||||||
srs_utime_t delta_us = calculate_delta_us(it_ts->second, last_ts);
|
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) {
|
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)) {
|
if(current_sn > (last_sn + 1)) {
|
||||||
|
@ -835,8 +845,7 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
|
||||||
header_.length -= 1;
|
header_.length -= 1;
|
||||||
|
|
||||||
if(srs_success != (err = encode_header(buffer))) {
|
if(srs_success != (err = encode_header(buffer))) {
|
||||||
err = srs_error_wrap(err, "encode header");
|
return srs_error_wrap(err, "encode header");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
buffer->write_4bytes(sender_ssrc_);
|
buffer->write_4bytes(sender_ssrc_);
|
||||||
buffer->write_4bytes(media_ssrc_);
|
buffer->write_4bytes(media_ssrc_);
|
||||||
|
@ -863,10 +872,6 @@ srs_error_t SrsRtcpTWCC::encode(SrsBuffer *buffer)
|
||||||
pkt_len++;
|
pkt_len++;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while(0);
|
|
||||||
|
|
||||||
clear();
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -293,7 +293,8 @@ public:
|
||||||
virtual srs_error_t decode(SrsBuffer *buffer);
|
virtual srs_error_t decode(SrsBuffer *buffer);
|
||||||
virtual int nb_bytes();
|
virtual int nb_bytes();
|
||||||
virtual srs_error_t encode(SrsBuffer *buffer);
|
virtual srs_error_t encode(SrsBuffer *buffer);
|
||||||
|
private:
|
||||||
|
srs_error_t do_encode(SrsBuffer *buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsRtcpNack : public SrsRtcpCommon
|
class SrsRtcpNack : public SrsRtcpCommon
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue