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

RTC: Logging for NACK timeout.

This commit is contained in:
winlin 2020-09-10 10:50:59 +08:00
parent c708103cd4
commit 57288838d0
2 changed files with 38 additions and 3 deletions

View file

@ -1710,12 +1710,11 @@ srs_error_t SrsRtcRecvTrack::on_nack(SrsRtpPacket2* pkt)
return err; return err;
} }
srs_error_t SrsRtcRecvTrack::check_send_nacks() srs_error_t SrsRtcRecvTrack::do_check_send_nacks(uint32_t& timeout_nacks)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
uint32_t sent_nacks = 0; uint32_t sent_nacks = 0;
uint32_t timeout_nacks = 0;
session_->check_send_nacks(nack_receiver_, track_desc_->ssrc_, sent_nacks, timeout_nacks); session_->check_send_nacks(nack_receiver_, track_desc_->ssrc_, sent_nacks, timeout_nacks);
statistic_->nacks += sent_nacks; statistic_->nacks += sent_nacks;
@ -1754,6 +1753,18 @@ srs_error_t SrsRtcAudioRecvTrack::on_rtp(SrsRtcStream* source, SrsRtpPacket2* pk
return err; return err;
} }
srs_error_t SrsRtcAudioRecvTrack::check_send_nacks()
{
srs_error_t err = srs_success;
uint32_t timeout_nacks = 0;
if ((err = do_check_send_nacks(timeout_nacks)) != srs_success) {
return srs_error_wrap(err, "audio");
}
return err;
}
SrsRtcVideoRecvTrack::SrsRtcVideoRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* track_desc) SrsRtcVideoRecvTrack::SrsRtcVideoRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* track_desc)
: SrsRtcRecvTrack(session, track_desc, false) : SrsRtcRecvTrack(session, track_desc, false)
{ {
@ -1800,6 +1811,26 @@ srs_error_t SrsRtcVideoRecvTrack::on_rtp(SrsRtcStream* source, SrsRtpPacket2* pk
return err; return err;
} }
srs_error_t SrsRtcVideoRecvTrack::check_send_nacks()
{
srs_error_t err = srs_success;
uint32_t timeout_nacks = 0;
if ((err = do_check_send_nacks(timeout_nacks)) != srs_success) {
return srs_error_wrap(err, "video");
}
// If NACK timeout, start PLI if not requesting.
if (timeout_nacks == 0 || request_key_frame_) {
return err;
}
srs_trace("[Maybe] RTC: NACK timeout=%u, request PLI, track=%s, ssrc=%u", timeout_nacks,
track_desc_->id_.c_str(), track_desc_->ssrc_);
return err;
}
void SrsRtcVideoRecvTrack::request_keyframe() void SrsRtcVideoRecvTrack::request_keyframe()
{ {
cid_of_subscriber_ = _srs_context->get_id(); cid_of_subscriber_ = _srs_context->get_id();

View file

@ -501,7 +501,9 @@ protected:
srs_error_t on_nack(SrsRtpPacket2* pkt); srs_error_t on_nack(SrsRtpPacket2* pkt);
public: public:
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt) = 0; virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt) = 0;
virtual srs_error_t check_send_nacks(); virtual srs_error_t check_send_nacks() = 0;
protected:
virtual srs_error_t do_check_send_nacks(uint32_t& timeout_nacks);
}; };
class SrsRtcAudioRecvTrack : public SrsRtcRecvTrack class SrsRtcAudioRecvTrack : public SrsRtcRecvTrack
@ -511,6 +513,7 @@ public:
virtual ~SrsRtcAudioRecvTrack(); virtual ~SrsRtcAudioRecvTrack();
public: public:
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt); virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt);
virtual srs_error_t check_send_nacks();
}; };
class SrsRtcVideoRecvTrack : public SrsRtcRecvTrack class SrsRtcVideoRecvTrack : public SrsRtcRecvTrack
@ -524,6 +527,7 @@ public:
virtual ~SrsRtcVideoRecvTrack(); virtual ~SrsRtcVideoRecvTrack();
public: public:
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt); virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt);
virtual srs_error_t check_send_nacks();
public: public:
void request_keyframe(); void request_keyframe();
}; };