mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Improve NACK efficiency
This commit is contained in:
parent
3026f2fda8
commit
cff976bb71
4 changed files with 42 additions and 0 deletions
|
@ -1125,6 +1125,13 @@ srs_error_t SrsRtcPublishStream::do_on_rtp(char* plaintext, int nb_plaintext)
|
|||
return srs_error_new(ERROR_RTC_RTP, "unknown ssrc=%u", ssrc);
|
||||
}
|
||||
|
||||
// Check then send NACK every each RTP packet, to make it more efficient.
|
||||
// For example, NACK of video track maybe triggered by audio RTP packets.
|
||||
if ((err = check_send_nacks()) != srs_success) {
|
||||
srs_warn("ignore nack err %s", srs_error_desc(err).c_str());
|
||||
srs_freep(err);
|
||||
}
|
||||
|
||||
if (_srs_rtc_hijacker) {
|
||||
// TODO: FIXME: copy pkt by hijacker itself
|
||||
if ((err = _srs_rtc_hijacker->on_rtp_packet(session_, this, req, pkt->copy())) != srs_success) {
|
||||
|
@ -1135,6 +1142,27 @@ srs_error_t SrsRtcPublishStream::do_on_rtp(char* plaintext, int nb_plaintext)
|
|||
return err;
|
||||
}
|
||||
|
||||
srs_error_t SrsRtcPublishStream::check_send_nacks()
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
for (int i = 0; i < (int)video_tracks_.size(); ++i) {
|
||||
SrsRtcVideoRecvTrack* track = video_tracks_.at(i);
|
||||
if ((err = track->check_send_nacks()) != srs_success) {
|
||||
return srs_error_wrap(err, "video track=%s", track->get_track_id().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < (int)audio_tracks_.size(); ++i) {
|
||||
SrsRtcAudioRecvTrack* track = audio_tracks_.at(i);
|
||||
if ((err = track->check_send_nacks()) != srs_success) {
|
||||
return srs_error_wrap(err, "audio track=%s", track->get_track_id().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload)
|
||||
{
|
||||
// No payload, ignore.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue