From c875639eb6b45a30142789edc334925a75cb5a72 Mon Sep 17 00:00:00 2001 From: "jinxue.cgh" Date: Fri, 15 May 2020 18:13:03 +0800 Subject: [PATCH] tenfold: use timer send nacks --- trunk/src/app/srs_app_rtc_conn.cpp | 26 +++++++++++++++++--------- trunk/src/app/srs_app_rtc_conn.hpp | 2 ++ trunk/src/app/srs_app_rtc_queue.cpp | 5 +++++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index e83243ef6..4d8b3700f 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1376,7 +1376,7 @@ srs_error_t SrsRtcPlayer::on_rtcp_rr(char* data, int nb_data) SrsRtcPublisher::SrsRtcPublisher(SrsRtcSession* session) { - report_timer = new SrsHourGlass(this, 200 * SRS_UTIME_MILLISECONDS); + report_timer = new SrsHourGlass(this, 10 * SRS_UTIME_MILLISECONDS); session_ = session; request_keyframe_ = false; @@ -1422,10 +1422,14 @@ srs_error_t SrsRtcPublisher::initialize(uint32_t vssrc, uint32_t assrc, SrsReque srs_trace("RTC player video(ssrc=%u), audio(ssrc=%u), nack=%d", video_ssrc, audio_ssrc, nack_enabled_); - if ((err = report_timer->tick(0 * SRS_UTIME_MILLISECONDS)) != srs_success) { + if ((err = report_timer->tick(EVENT_REPORT, 200 * SRS_UTIME_MILLISECONDS)) != srs_success) { return srs_error_wrap(err, "hourglass tick"); } + if ((err = report_timer->tick(EVENT_NACK, 10*SRS_UTIME_MILLISECONDS)) != srs_success) { + return srs_error_wrap(err, "NACK tick"); + } + if ((err = report_timer->start()) != srs_success) { return srs_error_wrap(err, "start report_timer"); } @@ -2136,14 +2140,18 @@ void SrsRtcPublisher::request_keyframe() srs_error_t SrsRtcPublisher::notify(int type, srs_utime_t interval, srs_utime_t tick) { srs_error_t err = srs_success; - // TODO: FIXME: Check error. - send_rtcp_rr(video_ssrc, video_queue_); - send_rtcp_rr(audio_ssrc, audio_queue_); - send_rtcp_xr_rrtr(video_ssrc); - send_rtcp_xr_rrtr(audio_ssrc); - check_send_nacks(video_nack_, video_ssrc); - check_send_nacks(audio_nack_, audio_ssrc); + if (type == EVENT_REPORT) { + send_rtcp_rr(video_ssrc, video_queue_); + send_rtcp_rr(audio_ssrc, audio_queue_); + send_rtcp_xr_rrtr(video_ssrc); + send_rtcp_xr_rrtr(audio_ssrc); + } + + if (type == EVENT_NACK) { + check_send_nacks(video_nack_, video_ssrc); + check_send_nacks(audio_nack_, audio_ssrc); + } return err; } diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index fa9985bff..1fb3a3195 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -275,6 +275,8 @@ private: SrsRtpNackForReceiver* video_nack_; SrsRtpRingBuffer* audio_queue_; SrsRtpNackForReceiver* audio_nack_; +private: + enum {EVENT_REPORT=1, EVENT_NACK = 2}; private: SrsRequest* req; SrsRtcSource* source; diff --git a/trunk/src/app/srs_app_rtc_queue.cpp b/trunk/src/app/srs_app_rtc_queue.cpp index 577af40ed..e00bf5d27 100644 --- a/trunk/src/app/srs_app_rtc_queue.cpp +++ b/trunk/src/app/srs_app_rtc_queue.cpp @@ -142,6 +142,11 @@ SrsNackOption::SrsNackOption() max_alive_time = 2 * SRS_UTIME_SECONDS; first_nack_interval = 10 * SRS_UTIME_MILLISECONDS; nack_interval = 400 * SRS_UTIME_MILLISECONDS; + //TODO: FIXME: + // audio_max_retries = 2 + // video_max_retries = 4 + // nack_interval = 100ms + // first_nack_interval = 10ms } SrsRtpNackInfo::SrsRtpNackInfo()