Rename RsidResolutionObserver to SsrcBindingObserver.
This rename prepares SsrcBindingObserver to be used for observing all
the ways a sink can be bound to SSRCs (e.g., MID, payload types).
Bug: webrtc:4050
Change-Id: I16b68481d01f921c326a33f5f2baf79d8b3f12e2
Reviewed-on: https://chromium-review.googlesource.com/590762
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19396}
diff --git a/webrtc/call/BUILD.gn b/webrtc/call/BUILD.gn
index 7bd0104..5d10891 100644
--- a/webrtc/call/BUILD.gn
+++ b/webrtc/call/BUILD.gn
@@ -49,7 +49,6 @@
rtc_source_set("rtp_receiver") {
sources = [
- "rsid_resolution_observer.h",
"rtcp_demuxer.cc",
"rtcp_demuxer.h",
"rtp_demuxer.cc",
@@ -60,6 +59,7 @@
"rtp_stream_receiver_controller.h",
"rtx_receive_stream.cc",
"rtx_receive_stream.h",
+ "ssrc_binding_observer.h",
]
deps = [
":rtp_interfaces",
diff --git a/webrtc/call/rsid_resolution_observer.h b/webrtc/call/rsid_resolution_observer.h
deleted file mode 100644
index ea08045..0000000
--- a/webrtc/call/rsid_resolution_observer.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-#ifndef WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
-#define WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
-
-#include <string>
-
-#include "webrtc/rtc_base/basictypes.h"
-
-namespace webrtc {
-
-// One RSID can be associated with one, and only one, SSRC, throughout a call.
-// The resolution might either happen during call setup, or during the call.
-class RsidResolutionObserver {
- public:
- virtual ~RsidResolutionObserver() = default;
-
- virtual void OnRsidResolved(const std::string& rsid, uint32_t ssrc) = 0;
-};
-
-} // namespace webrtc
-
-#endif // WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
diff --git a/webrtc/call/rtcp_demuxer.cc b/webrtc/call/rtcp_demuxer.cc
index a8003f8..90620c32 100644
--- a/webrtc/call/rtcp_demuxer.cc
+++ b/webrtc/call/rtcp_demuxer.cc
@@ -80,7 +80,7 @@
}
}
-void RtcpDemuxer::OnRsidResolved(const std::string& rsid, uint32_t ssrc) {
+void RtcpDemuxer::OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) {
// Record the new SSRC association for all of the sinks that were associated
// with the RSID.
auto it_range = rsid_sinks_.equal_range(rsid);
diff --git a/webrtc/call/rtcp_demuxer.h b/webrtc/call/rtcp_demuxer.h
index 591e011..1919c2b 100644
--- a/webrtc/call/rtcp_demuxer.h
+++ b/webrtc/call/rtcp_demuxer.h
@@ -15,7 +15,7 @@
#include <string>
#include <vector>
-#include "webrtc/call/rsid_resolution_observer.h"
+#include "webrtc/call/ssrc_binding_observer.h"
#include "webrtc/rtc_base/array_view.h"
#include "webrtc/rtc_base/basictypes.h"
@@ -26,7 +26,7 @@
// This class represents the RTCP demuxing, for a single RTP session (i.e., one
// SSRC space, see RFC 7656). It isn't thread aware, leaving responsibility of
// multithreading issues to the user of this class.
-class RtcpDemuxer : public RsidResolutionObserver {
+class RtcpDemuxer : public SsrcBindingObserver {
public:
RtcpDemuxer();
~RtcpDemuxer() override;
@@ -60,9 +60,9 @@
// Process a new RTCP packet and forward it to the appropriate sinks.
void OnRtcpPacket(rtc::ArrayView<const uint8_t> packet);
- // Implement RsidResolutionObserver - become notified whenever RSIDs resolve
- // to an SSRC.
- void OnRsidResolved(const std::string& rsid, uint32_t ssrc) override;
+ // Implement SsrcBindingObserver - become notified whenever RSIDs resolve to
+ // an SSRC.
+ void OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) override;
// TODO(eladalon): Add the ability to resolve RSIDs and inform observers,
// like in the RtpDemuxer case, once the relevant standard is finalized.
diff --git a/webrtc/call/rtcp_demuxer_unittest.cc b/webrtc/call/rtcp_demuxer_unittest.cc
index 89b712b..2a0b1f3 100644
--- a/webrtc/call/rtcp_demuxer_unittest.cc
+++ b/webrtc/call/rtcp_demuxer_unittest.cc
@@ -92,7 +92,7 @@
// Only resolve one of the sinks.
constexpr size_t resolved_sink_index = 0;
constexpr uint32_t ssrc = 345;
- demuxer.OnRsidResolved(rsids[resolved_sink_index], ssrc);
+ demuxer.OnSsrcBoundToRsid(rsids[resolved_sink_index], ssrc);
// The resolved sink gets notifications of RTCP messages with its SSRC.
auto packet = CreateRtcpPacket(ssrc);
@@ -123,7 +123,7 @@
demuxer.AddSink(rsid, &sink);
// Resolve the RSID to the aforementioned SSRC.
- demuxer.OnRsidResolved(rsid, ssrc);
+ demuxer.OnSsrcBoundToRsid(rsid, ssrc);
// OnRtcpPacket still called only a single time for messages with this SSRC.
auto packet = CreateRtcpPacket(ssrc);
@@ -276,7 +276,7 @@
uint32_t ssrcs[arraysize(rsids)];
for (size_t i = 0; i < arraysize(rsids); i++) {
ssrcs[i] = 1000 + static_cast<uint32_t>(i);
- demuxer.OnRsidResolved(rsids[i], ssrcs[i]);
+ demuxer.OnSsrcBoundToRsid(rsids[i], ssrcs[i]);
}
// Set up packets to match those RSIDs/SSRCs.
@@ -312,7 +312,7 @@
}
constexpr uint32_t shared_ssrc = 888;
- demuxer.OnRsidResolved(shared_rsid, shared_ssrc);
+ demuxer.OnSsrcBoundToRsid(shared_rsid, shared_ssrc);
auto packet = CreateRtcpPacket(shared_ssrc);
@@ -373,7 +373,7 @@
// Removal before resolution.
demuxer.RemoveSink(&sink);
- demuxer.OnRsidResolved(rsid, ssrc);
+ demuxer.OnSsrcBoundToRsid(rsid, ssrc);
// The removed sink does not get callbacks.
auto packet = CreateRtcpPacket(ssrc);
@@ -390,7 +390,7 @@
demuxer.AddSink(rsid, &sink);
// Removal after resolution.
- demuxer.OnRsidResolved(rsid, ssrc);
+ demuxer.OnSsrcBoundToRsid(rsid, ssrc);
demuxer.RemoveSink(&sink);
// The removed sink does not get callbacks.
@@ -443,10 +443,10 @@
demuxer.AddSink(rsid, &sink);
constexpr uint32_t ssrc_a = 111; // First resolution - guaranteed effective.
- demuxer.OnRsidResolved(rsid, ssrc_a);
+ demuxer.OnSsrcBoundToRsid(rsid, ssrc_a);
constexpr uint32_t ssrc_b = 222; // Second resolution - no guarantees.
- demuxer.OnRsidResolved(rsid, ssrc_b);
+ demuxer.OnSsrcBoundToRsid(rsid, ssrc_b);
auto packet_a = CreateRtcpPacket(ssrc_a);
EXPECT_CALL(
diff --git a/webrtc/call/rtp_demuxer.cc b/webrtc/call/rtp_demuxer.cc
index 39fc235..9ad5f12 100644
--- a/webrtc/call/rtp_demuxer.cc
+++ b/webrtc/call/rtp_demuxer.cc
@@ -10,9 +10,9 @@
#include "webrtc/call/rtp_demuxer.h"
-#include "webrtc/call/rsid_resolution_observer.h"
#include "webrtc/call/rtp_packet_sink_interface.h"
#include "webrtc/call/rtp_rtcp_demuxer_helper.h"
+#include "webrtc/call/ssrc_binding_observer.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
#include "webrtc/rtc_base/checks.h"
@@ -62,21 +62,27 @@
return it_range.first != it_range.second;
}
-void RtpDemuxer::RegisterRsidResolutionObserver(
- RsidResolutionObserver* observer) {
+void RtpDemuxer::RegisterSsrcBindingObserver(SsrcBindingObserver* observer) {
RTC_DCHECK(observer);
- RTC_DCHECK(!ContainerHasKey(rsid_resolution_observers_, observer));
+ RTC_DCHECK(!ContainerHasKey(ssrc_binding_observers_, observer));
- rsid_resolution_observers_.push_back(observer);
+ ssrc_binding_observers_.push_back(observer);
+}
+void RtpDemuxer::RegisterRsidResolutionObserver(SsrcBindingObserver* observer) {
+ RegisterSsrcBindingObserver(observer);
}
-void RtpDemuxer::DeregisterRsidResolutionObserver(
- const RsidResolutionObserver* observer) {
+void RtpDemuxer::DeregisterSsrcBindingObserver(
+ const SsrcBindingObserver* observer) {
RTC_DCHECK(observer);
- auto it = std::find(rsid_resolution_observers_.begin(),
- rsid_resolution_observers_.end(), observer);
- RTC_DCHECK(it != rsid_resolution_observers_.end());
- rsid_resolution_observers_.erase(it);
+ auto it = std::find(ssrc_binding_observers_.begin(),
+ ssrc_binding_observers_.end(), observer);
+ RTC_DCHECK(it != ssrc_binding_observers_.end());
+ ssrc_binding_observers_.erase(it);
+}
+void RtpDemuxer::DeregisterRsidResolutionObserver(
+ const SsrcBindingObserver* observer) {
+ DeregisterSsrcBindingObserver(observer);
}
void RtpDemuxer::ResolveRsidToSsrcAssociations(
@@ -114,8 +120,8 @@
void RtpDemuxer::NotifyObserversOfRsidResolution(const std::string& rsid,
uint32_t ssrc) {
- for (auto* observer : rsid_resolution_observers_) {
- observer->OnRsidResolved(rsid, ssrc);
+ for (auto* observer : ssrc_binding_observers_) {
+ observer->OnSsrcBoundToRsid(rsid, ssrc);
}
}
diff --git a/webrtc/call/rtp_demuxer.h b/webrtc/call/rtp_demuxer.h
index dccf0b6..702d787 100644
--- a/webrtc/call/rtp_demuxer.h
+++ b/webrtc/call/rtp_demuxer.h
@@ -17,9 +17,9 @@
namespace webrtc {
-class RsidResolutionObserver;
class RtpPacketReceived;
class RtpPacketSinkInterface;
+class SsrcBindingObserver;
// This class represents the RTP demuxing, for a single RTP session (i.e., one
// ssrc space, see RFC 7656). It isn't thread aware, leaving responsibility of
@@ -51,10 +51,14 @@
// Allows other objects to be notified when RSID-SSRC associations are
// resolved by this object.
- void RegisterRsidResolutionObserver(RsidResolutionObserver* observer);
+ void RegisterSsrcBindingObserver(SsrcBindingObserver* observer);
+ // Deprecated: Use the above method.
+ void RegisterRsidResolutionObserver(SsrcBindingObserver* observer);
- // Undo a previous RegisterRsidResolutionObserver().
- void DeregisterRsidResolutionObserver(const RsidResolutionObserver* observer);
+ // Undo a previous RegisterSsrcBindingObserver().
+ void DeregisterSsrcBindingObserver(const SsrcBindingObserver* observer);
+ // Deprecated: Use the above method.
+ void DeregisterRsidResolutionObserver(const SsrcBindingObserver* observer);
private:
// Find the associations of RSID to SSRCs.
@@ -75,7 +79,7 @@
// Observers which will be notified when an RSID association to an SSRC is
// resolved by this object.
- std::vector<RsidResolutionObserver*> rsid_resolution_observers_;
+ std::vector<SsrcBindingObserver*> ssrc_binding_observers_;
};
} // namespace webrtc
diff --git a/webrtc/call/rtp_demuxer_unittest.cc b/webrtc/call/rtp_demuxer_unittest.cc
index f9196ca..92728bb 100644
--- a/webrtc/call/rtp_demuxer_unittest.cc
+++ b/webrtc/call/rtp_demuxer_unittest.cc
@@ -13,7 +13,7 @@
#include <memory>
#include <string>
-#include "webrtc/call/rsid_resolution_observer.h"
+#include "webrtc/call/ssrc_binding_observer.h"
#include "webrtc/call/test/mock_rtp_packet_sink_interface.h"
#include "webrtc/common_types.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_header_extension_map.h"
@@ -35,9 +35,9 @@
using ::testing::InSequence;
using ::testing::NiceMock;
-class MockRsidResolutionObserver : public RsidResolutionObserver {
+class MockSsrcBindingObserver : public SsrcBindingObserver {
public:
- MOCK_METHOD2(OnRsidResolved, void(const std::string& rsid, uint32_t ssrc));
+ MOCK_METHOD2(OnSsrcBoundToRsid, void(const std::string& rsid, uint32_t ssrc));
};
MATCHER_P(SamePacketAs, other, "") {
@@ -517,18 +517,18 @@
NiceMock<MockRtpPacketSink> sink;
demuxer.AddSink(rsid, &sink);
- MockRsidResolutionObserver rsid_resolution_observers[3];
+ MockSsrcBindingObserver rsid_resolution_observers[3];
for (auto& observer : rsid_resolution_observers) {
- demuxer.RegisterRsidResolutionObserver(&observer);
- EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(1);
+ demuxer.RegisterSsrcBindingObserver(&observer);
+ EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
}
- // The expected calls to OnRsidResolved() will be triggered by this.
+ // The expected calls to OnSsrcBoundToRsid() will be triggered by this.
demuxer.OnRtpPacket(*CreateRtpPacketReceivedWithRsid(rsid, ssrc));
// Test tear-down
for (auto& observer : rsid_resolution_observers) {
- demuxer.DeregisterRsidResolutionObserver(&observer);
+ demuxer.DeregisterSsrcBindingObserver(&observer);
}
demuxer.RemoveSink(&sink);
}
@@ -539,10 +539,10 @@
constexpr uint32_t ssrc = 111;
const std::string rsid = "a";
- MockRsidResolutionObserver rsid_resolution_observers[3];
+ MockSsrcBindingObserver rsid_resolution_observers[3];
for (auto& observer : rsid_resolution_observers) {
- demuxer.RegisterRsidResolutionObserver(&observer);
- EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(0);
+ demuxer.RegisterSsrcBindingObserver(&observer);
+ EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(0);
}
// The expected calls to OnRsidResolved() will be triggered by this.
@@ -550,7 +550,7 @@
// Test tear-down
for (auto& observer : rsid_resolution_observers) {
- demuxer.DeregisterRsidResolutionObserver(&observer);
+ demuxer.DeregisterSsrcBindingObserver(&observer);
}
}
@@ -592,11 +592,11 @@
NiceMock<MockRtpPacketSink> rsid_sink;
demuxer.AddSink(rsid, &rsid_sink);
- MockRsidResolutionObserver observer;
- demuxer.RegisterRsidResolutionObserver(&observer);
+ MockSsrcBindingObserver observer;
+ demuxer.RegisterSsrcBindingObserver(&observer);
auto packet = CreateRtpPacketReceivedWithRsid(rsid, ssrc);
- EXPECT_CALL(observer, OnRsidResolved(_, _)).Times(0);
+ EXPECT_CALL(observer, OnSsrcBoundToRsid(_, _)).Times(0);
demuxer.OnRtpPacket(*packet);
// Test tear-down
@@ -617,8 +617,8 @@
MockRtpPacketSink rsid_sink;
demuxer.AddSink(rsid, &rsid_sink);
- MockRsidResolutionObserver observer;
- demuxer.RegisterRsidResolutionObserver(&observer);
+ MockSsrcBindingObserver observer;
+ demuxer.RegisterSsrcBindingObserver(&observer);
// The SSRC was mapped to an SSRC sink, but was even active (packets flowed
// over it).
@@ -630,11 +630,11 @@
// is guaranteed.
demuxer.RemoveSink(&ssrc_sink);
EXPECT_CALL(rsid_sink, OnRtpPacket(SamePacketAs(*packet))).Times(AtLeast(0));
- EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(AtLeast(0));
+ EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(AtLeast(0));
demuxer.OnRtpPacket(*packet);
// Test tear-down
- demuxer.DeregisterRsidResolutionObserver(&observer);
+ demuxer.DeregisterSsrcBindingObserver(&observer);
demuxer.RemoveSink(&rsid_sink);
}
@@ -648,27 +648,27 @@
// Register several, then deregister only one, to show that not all of the
// observers had been forgotten when one was removed.
- MockRsidResolutionObserver observer_1;
- MockRsidResolutionObserver observer_2_removed;
- MockRsidResolutionObserver observer_3;
+ MockSsrcBindingObserver observer_1;
+ MockSsrcBindingObserver observer_2_removed;
+ MockSsrcBindingObserver observer_3;
- demuxer.RegisterRsidResolutionObserver(&observer_1);
- demuxer.RegisterRsidResolutionObserver(&observer_2_removed);
- demuxer.RegisterRsidResolutionObserver(&observer_3);
+ demuxer.RegisterSsrcBindingObserver(&observer_1);
+ demuxer.RegisterSsrcBindingObserver(&observer_2_removed);
+ demuxer.RegisterSsrcBindingObserver(&observer_3);
- demuxer.DeregisterRsidResolutionObserver(&observer_2_removed);
+ demuxer.DeregisterSsrcBindingObserver(&observer_2_removed);
- EXPECT_CALL(observer_1, OnRsidResolved(rsid, ssrc)).Times(1);
- EXPECT_CALL(observer_2_removed, OnRsidResolved(_, _)).Times(0);
- EXPECT_CALL(observer_3, OnRsidResolved(rsid, ssrc)).Times(1);
+ EXPECT_CALL(observer_1, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
+ EXPECT_CALL(observer_2_removed, OnSsrcBoundToRsid(_, _)).Times(0);
+ EXPECT_CALL(observer_3, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
- // The expected calls to OnRsidResolved() will be triggered by this.
+ // The expected calls to OnSsrcBoundToRsid() will be triggered by this.
demuxer.OnRtpPacket(*CreateRtpPacketReceivedWithRsid(rsid, ssrc));
// Test tear-down
demuxer.RemoveSink(&sink);
- demuxer.DeregisterRsidResolutionObserver(&observer_1);
- demuxer.DeregisterRsidResolutionObserver(&observer_3);
+ demuxer.DeregisterSsrcBindingObserver(&observer_1);
+ demuxer.DeregisterSsrcBindingObserver(&observer_3);
}
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
@@ -723,21 +723,21 @@
TEST(RtpDemuxerTest, DoubleRegisterationOfRsidResolutionObserverDisallowed) {
RtpDemuxer demuxer;
- MockRsidResolutionObserver observer;
- demuxer.RegisterRsidResolutionObserver(&observer);
+ MockSsrcBindingObserver observer;
+ demuxer.RegisterSsrcBindingObserver(&observer);
- EXPECT_DEATH(demuxer.RegisterRsidResolutionObserver(&observer), "");
+ EXPECT_DEATH(demuxer.RegisterSsrcBindingObserver(&observer), "");
// Test tear-down
- demuxer.DeregisterRsidResolutionObserver(&observer);
+ demuxer.DeregisterSsrcBindingObserver(&observer);
}
TEST(RtpDemuxerTest,
DregisterationOfNeverRegisteredRsidResolutionObserverDisallowed) {
RtpDemuxer demuxer;
- MockRsidResolutionObserver observer;
+ MockSsrcBindingObserver observer;
- EXPECT_DEATH(demuxer.DeregisterRsidResolutionObserver(&observer), "");
+ EXPECT_DEATH(demuxer.DeregisterSsrcBindingObserver(&observer), "");
}
#endif
diff --git a/webrtc/call/ssrc_binding_observer.h b/webrtc/call/ssrc_binding_observer.h
new file mode 100644
index 0000000..d7892aa
--- /dev/null
+++ b/webrtc/call/ssrc_binding_observer.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_
+#define WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_
+
+#include <string>
+
+#include "webrtc/rtc_base/basictypes.h"
+
+namespace webrtc {
+
+// With newer versions of SDP, SSRC is often not explicitly signaled and must
+// be learned on the fly. This happens by correlating packet SSRCs with included
+// RTP extension headers like MID and RSID, or by receiving information from
+// RTCP messages.
+// SsrcBindingObservers will be notified when a new binding is learned, which
+// can happen during call setup and/or during the call.
+class SsrcBindingObserver {
+ public:
+ virtual ~SsrcBindingObserver() = default;
+
+ virtual void OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) = 0;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_