aboutsummaryrefslogtreecommitdiff
path: root/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/rtp_rtcp/source/rtcp_transceiver_impl.cc')
-rw-r--r--modules/rtp_rtcp/source/rtcp_transceiver_impl.cc51
1 files changed, 25 insertions, 26 deletions
diff --git a/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc b/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
index 0102616d59..5753ffd692 100644
--- a/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
+++ b/modules/rtp_rtcp/source/rtcp_transceiver_impl.cc
@@ -40,7 +40,7 @@ namespace webrtc {
namespace {
struct SenderReportTimes {
- int64_t local_received_time_us;
+ Timestamp local_received_time;
NtpTime remote_sent_time;
};
@@ -92,9 +92,7 @@ RtcpTransceiverImpl::RtcpTransceiverImpl(const RtcpTransceiverConfig& config)
: config_(config), ready_to_send_(config.initial_ready_to_send) {
RTC_CHECK(config_.Validate());
if (ready_to_send_ && config_.schedule_periodic_compound_packets) {
- config_.task_queue->PostTask(ToQueuedTask([this] {
- SchedulePeriodicCompoundPackets(config_.initial_report_delay_ms);
- }));
+ SchedulePeriodicCompoundPackets(config_.initial_report_delay_ms);
}
}
@@ -133,13 +131,13 @@ void RtcpTransceiverImpl::SetReadyToSend(bool ready) {
}
void RtcpTransceiverImpl::ReceivePacket(rtc::ArrayView<const uint8_t> packet,
- int64_t now_us) {
+ Timestamp now) {
while (!packet.empty()) {
rtcp::CommonHeader rtcp_block;
if (!rtcp_block.Parse(packet.data(), packet.size()))
return;
- HandleReceivedPacket(rtcp_block, now_us);
+ HandleReceivedPacket(rtcp_block, now);
// TODO(danilchap): Use packet.remove_prefix() when that function exists.
packet = packet.subview(rtcp_block.packet_size());
@@ -228,16 +226,16 @@ void RtcpTransceiverImpl::SendFullIntraRequest(
void RtcpTransceiverImpl::HandleReceivedPacket(
const rtcp::CommonHeader& rtcp_packet_header,
- int64_t now_us) {
+ Timestamp now) {
switch (rtcp_packet_header.type()) {
case rtcp::Bye::kPacketType:
HandleBye(rtcp_packet_header);
break;
case rtcp::SenderReport::kPacketType:
- HandleSenderReport(rtcp_packet_header, now_us);
+ HandleSenderReport(rtcp_packet_header, now);
break;
case rtcp::ExtendedReports::kPacketType:
- HandleExtendedReports(rtcp_packet_header, now_us);
+ HandleExtendedReports(rtcp_packet_header, now);
break;
}
}
@@ -256,17 +254,14 @@ void RtcpTransceiverImpl::HandleBye(
void RtcpTransceiverImpl::HandleSenderReport(
const rtcp::CommonHeader& rtcp_packet_header,
- int64_t now_us) {
+ Timestamp now) {
rtcp::SenderReport sender_report;
if (!sender_report.Parse(rtcp_packet_header))
return;
RemoteSenderState& remote_sender =
remote_senders_[sender_report.sender_ssrc()];
- absl::optional<SenderReportTimes>& last =
- remote_sender.last_received_sender_report;
- last.emplace();
- last->local_received_time_us = now_us;
- last->remote_sent_time = sender_report.ntp();
+ remote_sender.last_received_sender_report =
+ absl::optional<SenderReportTimes>({now, sender_report.ntp()});
for (MediaReceiverRtcpObserver* observer : remote_sender.observers)
observer->OnSenderReport(sender_report.sender_ssrc(), sender_report.ntp(),
@@ -275,26 +270,27 @@ void RtcpTransceiverImpl::HandleSenderReport(
void RtcpTransceiverImpl::HandleExtendedReports(
const rtcp::CommonHeader& rtcp_packet_header,
- int64_t now_us) {
+ Timestamp now) {
rtcp::ExtendedReports extended_reports;
if (!extended_reports.Parse(rtcp_packet_header))
return;
if (extended_reports.dlrr())
- HandleDlrr(extended_reports.dlrr(), now_us);
+ HandleDlrr(extended_reports.dlrr(), now);
if (extended_reports.target_bitrate())
HandleTargetBitrate(*extended_reports.target_bitrate(),
extended_reports.sender_ssrc());
}
-void RtcpTransceiverImpl::HandleDlrr(const rtcp::Dlrr& dlrr, int64_t now_us) {
+void RtcpTransceiverImpl::HandleDlrr(const rtcp::Dlrr& dlrr, Timestamp now) {
if (!config_.non_sender_rtt_measurement || config_.rtt_observer == nullptr)
return;
// Delay and last_rr are transferred using 32bit compact ntp resolution.
// Convert packet arrival time to same format through 64bit ntp format.
- uint32_t receive_time_ntp = CompactNtp(TimeMicrosToNtp(now_us));
+ uint32_t receive_time_ntp =
+ CompactNtp(config_.clock->ConvertTimestampToNtpTime(now));
for (const rtcp::ReceiveTimeInfo& rti : dlrr.sub_blocks()) {
if (rti.ssrc != config_.feedback_ssrc)
continue;
@@ -353,13 +349,16 @@ void RtcpTransceiverImpl::SchedulePeriodicCompoundPackets(int64_t delay_ms) {
void RtcpTransceiverImpl::CreateCompoundPacket(PacketSender* sender) {
RTC_DCHECK(sender->IsEmpty());
const uint32_t sender_ssrc = config_.feedback_ssrc;
- int64_t now_us = rtc::TimeMicros();
+ Timestamp now = config_.clock->CurrentTime();
rtcp::ReceiverReport receiver_report;
receiver_report.SetSenderSsrc(sender_ssrc);
- receiver_report.SetReportBlocks(CreateReportBlocks(now_us));
- sender->AppendPacket(receiver_report);
+ receiver_report.SetReportBlocks(CreateReportBlocks(now));
+ if (config_.rtcp_mode == RtcpMode::kCompound ||
+ !receiver_report.report_blocks().empty()) {
+ sender->AppendPacket(receiver_report);
+ }
- if (!config_.cname.empty()) {
+ if (!config_.cname.empty() && !sender->IsEmpty()) {
rtcp::Sdes sdes;
bool added = sdes.AddCName(config_.feedback_ssrc, config_.cname);
RTC_DCHECK(added) << "Failed to add cname " << config_.cname
@@ -377,7 +376,7 @@ void RtcpTransceiverImpl::CreateCompoundPacket(PacketSender* sender) {
rtcp::ExtendedReports xr;
rtcp::Rrtr rrtr;
- rrtr.SetNtp(TimeMicrosToNtp(now_us));
+ rrtr.SetNtp(config_.clock->ConvertTimestampToNtpTime(now));
xr.SetRrtr(rrtr);
xr.SetSenderSsrc(sender_ssrc);
@@ -428,7 +427,7 @@ void RtcpTransceiverImpl::SendImmediateFeedback(
}
std::vector<rtcp::ReportBlock> RtcpTransceiverImpl::CreateReportBlocks(
- int64_t now_us) {
+ Timestamp now) {
if (!config_.receive_statistics)
return {};
// TODO(danilchap): Support sending more than
@@ -448,7 +447,7 @@ std::vector<rtcp::ReportBlock> RtcpTransceiverImpl::CreateReportBlocks(
*it->second.last_received_sender_report;
last_sr = CompactNtp(last_sender_report.remote_sent_time);
last_delay = SaturatedUsToCompactNtp(
- now_us - last_sender_report.local_received_time_us);
+ now.us() - last_sender_report.local_received_time.us());
report_block.SetLastSr(last_sr);
report_block.SetDelayLastSr(last_delay);
}