Remove RTCPReceiver::main_ssrc_.
RTCPReceiver::main_ssrc_ and local_media_ssrc() represent the same value but could get out of sync when `set_media_ssrc()` was called. Instead of using main_ssrc_, just use the local_media_ssrc() accessor. Bug: webrtc:11993 Change-Id: I2b034287e6b6025d9b0d2affa391a168896a614b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262663 Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36905}
This commit is contained in:
parent
969c1356af
commit
8814dfd124
@ -143,7 +143,6 @@ RTCPReceiver::RTCPReceiver(const RtpRtcpInterface::Configuration& config,
|
||||
: clock_(config.clock),
|
||||
receiver_only_(config.receiver_only),
|
||||
rtp_rtcp_(owner),
|
||||
main_ssrc_(config.local_media_ssrc),
|
||||
registered_ssrcs_(false, config),
|
||||
rtcp_bandwidth_observer_(config.bandwidth_callback),
|
||||
rtcp_intra_frame_observer_(config.intra_frame_callback),
|
||||
@ -177,7 +176,6 @@ RTCPReceiver::RTCPReceiver(const RtpRtcpInterface::Configuration& config,
|
||||
: clock_(config.clock),
|
||||
receiver_only_(config.receiver_only),
|
||||
rtp_rtcp_(owner),
|
||||
main_ssrc_(config.local_media_ssrc),
|
||||
registered_ssrcs_(true, config),
|
||||
rtcp_bandwidth_observer_(config.bandwidth_callback),
|
||||
rtcp_intra_frame_observer_(config.intra_frame_callback),
|
||||
@ -552,7 +550,7 @@ bool RTCPReceiver::ParseCompoundPacket(rtc::ArrayView<const uint8_t> packet,
|
||||
|
||||
if (packet_type_counter_observer_) {
|
||||
packet_type_counter_observer_->RtcpPacketTypesCounterUpdated(
|
||||
main_ssrc_, packet_type_counter_);
|
||||
local_media_ssrc(), packet_type_counter_);
|
||||
}
|
||||
|
||||
if (num_skipped_packets_ > 0) {
|
||||
@ -692,7 +690,7 @@ void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block,
|
||||
// Convert to 1/1000 seconds (milliseconds).
|
||||
TimeDelta rtt = CompactNtpRttToTimeDelta(rtt_ntp);
|
||||
report_block_data->AddRoundTripTimeSample(rtt.ms());
|
||||
if (report_block.source_ssrc() == main_ssrc_) {
|
||||
if (report_block.source_ssrc() == local_media_ssrc()) {
|
||||
rtts_[remote_ssrc].AddRtt(rtt);
|
||||
}
|
||||
|
||||
@ -784,7 +782,7 @@ std::vector<rtcp::TmmbItem> RTCPReceiver::BoundingSet(bool* tmmbr_owner) {
|
||||
if (!tmmbr_info)
|
||||
return std::vector<rtcp::TmmbItem>();
|
||||
|
||||
*tmmbr_owner = TMMBRHelp::IsOwner(tmmbr_info->tmmbn, main_ssrc_);
|
||||
*tmmbr_owner = TMMBRHelp::IsOwner(tmmbr_info->tmmbn, local_media_ssrc());
|
||||
return tmmbr_info->tmmbn;
|
||||
}
|
||||
|
||||
@ -811,7 +809,7 @@ void RTCPReceiver::HandleNack(const CommonHeader& rtcp_block,
|
||||
return;
|
||||
}
|
||||
|
||||
if (receiver_only_ || main_ssrc_ != nack.media_ssrc()) // Not to us.
|
||||
if (receiver_only_ || local_media_ssrc() != nack.media_ssrc()) // Not to us.
|
||||
return;
|
||||
|
||||
packet_information->nack_sequence_numbers.insert(
|
||||
@ -978,7 +976,7 @@ void RTCPReceiver::HandlePli(const CommonHeader& rtcp_block,
|
||||
return;
|
||||
}
|
||||
|
||||
if (main_ssrc_ == pli.media_ssrc()) {
|
||||
if (local_media_ssrc() == pli.media_ssrc()) {
|
||||
++packet_type_counter_.pli_packets;
|
||||
// Received a signal that we need to send a new key frame.
|
||||
packet_information->packet_type_flags |= kRtcpPli;
|
||||
@ -1001,7 +999,7 @@ void RTCPReceiver::HandleTmmbr(const CommonHeader& rtcp_block,
|
||||
}
|
||||
|
||||
for (const rtcp::TmmbItem& request : tmmbr.requests()) {
|
||||
if (main_ssrc_ != request.ssrc() || request.bitrate_bps() == 0)
|
||||
if (local_media_ssrc() != request.ssrc() || request.bitrate_bps() == 0)
|
||||
continue;
|
||||
|
||||
TmmbrInformation* tmmbr_info = FindOrCreateTmmbrInfo(tmmbr.sender_ssrc());
|
||||
@ -1083,7 +1081,7 @@ void RTCPReceiver::HandleFir(const CommonHeader& rtcp_block,
|
||||
const int64_t now_ms = clock_->TimeInMilliseconds();
|
||||
for (const rtcp::Fir::Request& fir_request : fir.requests()) {
|
||||
// Is it our sender that is requested to generate a new keyframe.
|
||||
if (main_ssrc_ != fir_request.ssrc)
|
||||
if (local_media_ssrc() != fir_request.ssrc)
|
||||
continue;
|
||||
|
||||
++packet_type_counter_.fir_packets;
|
||||
@ -1175,7 +1173,8 @@ void RTCPReceiver::TriggerCallbacksFromRtcpPacket(
|
||||
RTC_LOG(LS_VERBOSE)
|
||||
<< "Incoming FIR from SSRC " << packet_information.remote_ssrc;
|
||||
}
|
||||
rtcp_intra_frame_observer_->OnReceivedIntraFrameRequest(main_ssrc_);
|
||||
rtcp_intra_frame_observer_->OnReceivedIntraFrameRequest(
|
||||
local_media_ssrc());
|
||||
}
|
||||
}
|
||||
if (rtcp_loss_notification_observer_ &&
|
||||
@ -1183,7 +1182,7 @@ void RTCPReceiver::TriggerCallbacksFromRtcpPacket(
|
||||
rtcp::LossNotification* loss_notification =
|
||||
packet_information.loss_notification.get();
|
||||
RTC_DCHECK(loss_notification);
|
||||
if (loss_notification->media_ssrc() == main_ssrc_) {
|
||||
if (loss_notification->media_ssrc() == local_media_ssrc()) {
|
||||
rtcp_loss_notification_observer_->OnReceivedLossNotification(
|
||||
loss_notification->media_ssrc(), loss_notification->last_decoded(),
|
||||
loss_notification->last_received(),
|
||||
@ -1215,7 +1214,7 @@ void RTCPReceiver::TriggerCallbacksFromRtcpPacket(
|
||||
(packet_information.packet_type_flags & kRtcpTransportFeedback)) {
|
||||
uint32_t media_source_ssrc =
|
||||
packet_information.transport_feedback->media_ssrc();
|
||||
if (media_source_ssrc == main_ssrc_ ||
|
||||
if (media_source_ssrc == local_media_ssrc() ||
|
||||
registered_ssrcs_.contains(media_source_ssrc)) {
|
||||
transport_feedback_observer_->OnTransportFeedback(
|
||||
*packet_information.transport_feedback);
|
||||
|
||||
@ -376,7 +376,6 @@ class RTCPReceiver final {
|
||||
Clock* const clock_;
|
||||
const bool receiver_only_;
|
||||
ModuleRtpRtcp* const rtp_rtcp_;
|
||||
const uint32_t main_ssrc_;
|
||||
// The set of registered local SSRCs.
|
||||
RegisteredSsrcs registered_ssrcs_;
|
||||
|
||||
|
||||
@ -1983,4 +1983,41 @@ TEST(RtcpReceiverTest, HandlesIncorrectTargetBitrate) {
|
||||
receiver.IncomingPacket(xr.Build());
|
||||
}
|
||||
|
||||
TEST(RtcpReceiverTest, ChangeLocalMediaSsrc) {
|
||||
ReceiverMocks mocks;
|
||||
// Construct a receiver with `kReceiverMainSsrc` (default) local media ssrc.
|
||||
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
||||
receiver.SetRemoteSSRC(kSenderSsrc);
|
||||
|
||||
constexpr uint32_t kSecondarySsrc = kReceiverMainSsrc + 1;
|
||||
|
||||
// Expect to only get the `OnReceivedNack()` callback once since we'll
|
||||
// configure it for the `kReceiverMainSsrc` media ssrc.
|
||||
EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedNack);
|
||||
|
||||
// We'll get two callbacks to RtcpPacketTypesCounterUpdated, one for each
|
||||
// call to `IncomingPacket`, differentiated by the local media ssrc.
|
||||
EXPECT_CALL(mocks.packet_type_counter_observer,
|
||||
RtcpPacketTypesCounterUpdated(kReceiverMainSsrc, _));
|
||||
EXPECT_CALL(mocks.packet_type_counter_observer,
|
||||
RtcpPacketTypesCounterUpdated(kSecondarySsrc, _));
|
||||
|
||||
// Construct a test nack packet with media ssrc set to `kReceiverMainSsrc`.
|
||||
rtcp::Nack nack;
|
||||
nack.SetSenderSsrc(kSenderSsrc);
|
||||
nack.SetMediaSsrc(kReceiverMainSsrc);
|
||||
const uint16_t kNackList[] = {1, 2, 3, 5};
|
||||
nack.SetPacketIds(kNackList, std::size(kNackList));
|
||||
|
||||
// Deliver the first callback.
|
||||
receiver.IncomingPacket(nack.Build());
|
||||
|
||||
// Change the set local media ssrc.
|
||||
receiver.set_local_media_ssrc(kSecondarySsrc);
|
||||
|
||||
// Deliver another packet - this time there will be no callback to
|
||||
// OnReceivedNack due to the ssrc not matching.
|
||||
receiver.IncomingPacket(nack.Build());
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user