From 4acc42d09b4c37375e6da09f1c8dc782e1009c7d Mon Sep 17 00:00:00 2001 From: Pedro Rodriguez Date: Fri, 6 Mar 2020 08:49:20 +0100 Subject: [PATCH] Put back audio delay hack and add stats (#1550) --- erizo/src/erizo/MediaStream.cpp | 8 ++++++++ erizo/src/erizo/OneToManyProcessor.cpp | 3 ++- erizo/src/erizo/rtp/QualityFilterHandler.cpp | 4 ++++ erizo/src/erizo/rtp/StatsHandler.cpp | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/erizo/src/erizo/MediaStream.cpp b/erizo/src/erizo/MediaStream.cpp index 073fc29787..f92bada427 100644 --- a/erizo/src/erizo/MediaStream.cpp +++ b/erizo/src/erizo/MediaStream.cpp @@ -257,6 +257,8 @@ void MediaStream::initializeStats() { log_stats_->getNode().insertStat("audioMuted", CumulativeStat{0}); log_stats_->getNode().insertStat("audioNack", CumulativeStat{0}); log_stats_->getNode().insertStat("audioRemb", CumulativeStat{0}); + log_stats_->getNode().insertStat("audioSrTimestamp", CumulativeStat{0}); + log_stats_->getNode().insertStat("audioSrNtp", CumulativeStat{0}); log_stats_->getNode().insertStat("videoBitrate", CumulativeStat{0}); log_stats_->getNode().insertStat("videoFL", CumulativeStat{0}); @@ -270,6 +272,8 @@ void MediaStream::initializeStats() { log_stats_->getNode().insertStat("videoRemb", CumulativeStat{0}); log_stats_->getNode().insertStat("videoErizoRemb", CumulativeStat{0}); log_stats_->getNode().insertStat("videoKeyFrames", CumulativeStat{0}); + log_stats_->getNode().insertStat("videoSrTimestamp", CumulativeStat{0}); + log_stats_->getNode().insertStat("videoSrNtp", CumulativeStat{0}); log_stats_->getNode().insertStat("SL0TL0", CumulativeStat{0}); log_stats_->getNode().insertStat("SL0TL1", CumulativeStat{0}); @@ -352,6 +356,8 @@ void MediaStream::printStats() { transferMediaStats("audioMuted", audio_ssrc, "erizoAudioMute"); transferMediaStats("audioNack", audio_ssrc, "NACK"); transferMediaStats("audioRemb", audio_ssrc, "bandwidth"); + transferMediaStats("audioSrTimestamp", audio_ssrc, "srTimestamp"); + transferMediaStats("audioSrNtp", audio_ssrc, "srNtp"); } if (video_enabled_) { video_ssrc = std::to_string(is_publisher_ ? getVideoSourceSSRC() : getVideoSinkSSRC()); @@ -367,6 +373,8 @@ void MediaStream::printStats() { transferMediaStats("videoRemb", video_ssrc, "bandwidth"); transferMediaStats("videoErizoRemb", video_ssrc, "erizoBandwidth"); transferMediaStats("videoKeyFrames", video_ssrc, "keyFrames"); + transferMediaStats("videoSrTimestamp", video_ssrc, "srTimestamp"); + transferMediaStats("videoSrNtp", video_ssrc, "srNtp"); } for (uint32_t spatial = 0; spatial <= 3; spatial++) { diff --git a/erizo/src/erizo/OneToManyProcessor.cpp b/erizo/src/erizo/OneToManyProcessor.cpp index 4b9d9273ae..45d29b77b2 100644 --- a/erizo/src/erizo/OneToManyProcessor.cpp +++ b/erizo/src/erizo/OneToManyProcessor.cpp @@ -33,7 +33,8 @@ namespace erizo { RtcpHeader* chead = reinterpret_cast(audio_packet->data); for (it = subscribers.begin(); it != subscribers.end(); ++it) { if ((*it).second != nullptr) { - if (chead->isRtcp()) { + // Hack to avoid audio drift + if (chead->isRtcp() && chead->isSDES()) { chead->setSSRC((*it).second->getAudioSinkSSRC()); } else { head->setSSRC((*it).second->getAudioSinkSSRC()); diff --git a/erizo/src/erizo/rtp/QualityFilterHandler.cpp b/erizo/src/erizo/rtp/QualityFilterHandler.cpp index edce913496..894862d19e 100644 --- a/erizo/src/erizo/rtp/QualityFilterHandler.cpp +++ b/erizo/src/erizo/rtp/QualityFilterHandler.cpp @@ -220,12 +220,16 @@ void QualityFilterHandler::write(Context *ctx, std::shared_ptr packe tl0_pic_idx_sent : last_tl0_pic_idx_sent_; updateTL0PicIdx(packet, tl0_pic_idx_sent); // removeVP8OptionalPayload(packet); // TODO(javier): uncomment this line in case of issues with pictureId + + /* TODO(pedro): Disabled as part of the hack to reduce audio drift + * We will have to go back here and fix timestamp updates } else if (is_scalable_ && enabled_ && chead->isRtcp() && chead->isSenderReport()) { uint32_t ssrc = chead->getSSRC(); if (video_sink_ssrc_ == ssrc) { uint32_t sr_timestamp = chead->getTimestamp(); chead->setTimestamp(sr_timestamp + timestamp_offset_); } + */ } ctx->fireWrite(packet); diff --git a/erizo/src/erizo/rtp/StatsHandler.cpp b/erizo/src/erizo/rtp/StatsHandler.cpp index 506d8ba130..407de24b5e 100644 --- a/erizo/src/erizo/rtp/StatsHandler.cpp +++ b/erizo/src/erizo/rtp/StatsHandler.cpp @@ -128,6 +128,8 @@ void StatsCalculator::processRtcpPacket(std::shared_ptr packet) { ELOG_DEBUG("RTP SR: Packets Sent %u, Octets Sent %u", chead->getPacketsSent(), chead->getOctetsSent()); getStatsInfo()[ssrc].insertStat("packetsSent", CumulativeStat{chead->getPacketsSent()}); getStatsInfo()[ssrc].insertStat("bytesSent", CumulativeStat{chead->getOctetsSent()}); + getStatsInfo()[ssrc].insertStat("srTimestamp", CumulativeStat{chead->getTimestamp()}); + getStatsInfo()[ssrc].insertStat("srNtp", CumulativeStat{chead->getNtpTimestamp()}); break; case RTCP_RTP_Feedback_PT: ELOG_DEBUG("RTP FB: Usually NACKs: %u", chead->getBlockCount());