From 5c853e02ee7c6b6d2368dd5d458ea73ec3a2b8b3 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 5 Aug 2020 17:46:56 +0800 Subject: [PATCH] RTC: Check error for send_periodic_twcc --- trunk/src/app/srs_app_rtc_conn.cpp | 46 ++++++++++++++---------------- trunk/src/app/srs_app_rtc_conn.hpp | 1 - 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 7c9a14faa..9f3894599 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -808,7 +808,6 @@ SrsRtcPublishStream::SrsRtcPublishStream(SrsRtcConnection* session) nn_audio_frames = 0; twcc_id_ = 0; - last_twcc_feedback_time_ = 0; twcc_fb_count_ = 0; } @@ -1133,30 +1132,25 @@ void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer srs_error_t SrsRtcPublishStream::send_periodic_twcc() { srs_error_t err = srs_success; - srs_utime_t now = srs_get_system_time(); - if(0 == last_twcc_feedback_time_) { - last_twcc_feedback_time_ = now; - return err; - } - srs_utime_t diff = now - last_twcc_feedback_time_; - if( diff >= 50 * SRS_UTIME_MILLISECONDS) { - last_twcc_feedback_time_ = now; - char pkt[kRtcpPacketSize]; - SrsBuffer *buffer = new SrsBuffer(pkt, sizeof(pkt)); - SrsAutoFree(SrsBuffer, buffer); - rtcp_twcc_.set_feedback_count(twcc_fb_count_); - twcc_fb_count_++; - if((err = rtcp_twcc_.encode(buffer)) != srs_success) { - return srs_error_wrap(err, "fail to generate twcc feedback packet"); - } - int nb_protected_buf = buffer->pos(); - char protected_buf[kRtpPacketSize]; - if (session_->transport_->protect_rtcp(pkt, protected_buf, nb_protected_buf) == srs_success) { - session_->sendonly_skt->sendto(protected_buf, nb_protected_buf, 0); - } + + char pkt[kRtcpPacketSize]; + SrsBuffer *buffer = new SrsBuffer(pkt, sizeof(pkt)); + SrsAutoFree(SrsBuffer, buffer); + + rtcp_twcc_.set_feedback_count(twcc_fb_count_); + twcc_fb_count_++; + + if((err = rtcp_twcc_.encode(buffer)) != srs_success) { + return srs_error_wrap(err, "encode, count=%u", twcc_fb_count_); } - return err; + int nb_protected_buf = buffer->pos(); + char protected_buf[kRtpPacketSize]; + if ((err = session_->transport_->protect_rtcp(pkt, protected_buf, nb_protected_buf)) != srs_success) { + return srs_error_wrap(err, "protect rtcp, size=%u", nb_protected_buf); + } + + return session_->sendonly_skt->sendto(protected_buf, nb_protected_buf, 0); } srs_error_t SrsRtcPublishStream::on_rtcp(char* data, int nb_data) @@ -1530,10 +1524,12 @@ srs_error_t SrsRtcPublishStream::notify(int type, srs_utime_t interval, srs_utim srs_freep(err); } - // TODO: FIXME: Check error. // We should not depends on the received packet, // instead we should send feedback every Nms. - send_periodic_twcc(); + if ((err = send_periodic_twcc()) != srs_success) { + srs_warn("TWCC err %s", srs_error_desc(err).c_str()); + srs_freep(err); + } } return err; diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index afe96eb04..35d86752a 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -242,7 +242,6 @@ private: std::vector audio_tracks_; std::vector video_tracks_; private: - srs_utime_t last_twcc_feedback_time_; int twcc_id_; uint8_t twcc_fb_count_; SrsRtcpTWCC rtcp_twcc_;