Callback changes to media transport interface:
1) allow multiple target rate observers
2) add getter for overhead
3) add getter for target rate
4) add callback for network route changed.
Bug: webrtc:9719
Change-Id: I06518cd9aed0ebabd204a7f6af3b86f51fd694e0
Reviewed-on: https://webrtc-review.googlesource.com/c/109940
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Qingsi Wang <qingsi@webrtc.org>
Reviewed-by: Anton Sukhanov <sukhanov@webrtc.org>
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Commit-Queue: Peter Slatala <psla@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25572}
diff --git a/api/DEPS b/api/DEPS
index def36c7..a68d704 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -98,6 +98,7 @@
"media_transport_interface\.h": [
"+rtc_base/copyonwritebuffer.h", # As used by datachannelinterface.h
+ "+rtc_base/networkroute.h"
],
"peerconnectionfactoryproxy\.h": [
diff --git a/api/media_transport_interface.cc b/api/media_transport_interface.cc
index cb2fdab..039a4a1 100644
--- a/api/media_transport_interface.cc
+++ b/api/media_transport_interface.cc
@@ -103,4 +103,25 @@
return std::unique_ptr<MediaTransportInterface>(nullptr);
}
+absl::optional<TargetTransferRate>
+MediaTransportInterface::GetLatestTargetTransferRate() {
+ return absl::nullopt;
+}
+
+void MediaTransportInterface::SetNetworkChangeCallback(
+ MediaTransportNetworkChangeCallback* callback) {}
+
+void MediaTransportInterface::RemoveTargetTransferRateObserver(
+ webrtc::TargetTransferRateObserver* observer) {}
+
+void MediaTransportInterface::SetTargetTransferRateObserver(
+ webrtc::TargetTransferRateObserver* observer) {}
+
+void MediaTransportInterface::AddTargetTransferRateObserver(
+ webrtc::TargetTransferRateObserver* observer) {}
+
+size_t MediaTransportInterface::GetAudioPacketOverhead() const {
+ return 0;
+}
+
} // namespace webrtc
diff --git a/api/media_transport_interface.h b/api/media_transport_interface.h
index 4eb55c4..7570160 100644
--- a/api/media_transport_interface.h
+++ b/api/media_transport_interface.h
@@ -29,6 +29,7 @@
#include "api/video/encoded_image.h"
#include "common_types.h" // NOLINT(build/include)
#include "rtc_base/copyonwritebuffer.h"
+#include "rtc_base/networkroute.h"
namespace rtc {
class PacketTransportInternal;
@@ -139,6 +140,16 @@
std::vector<uint8_t> encoded_data_;
};
+// Callback to notify about network route changes.
+class MediaTransportNetworkChangeCallback {
+ public:
+ virtual ~MediaTransportNetworkChangeCallback() = default;
+
+ // Called when the network route is changed, with the new network route.
+ virtual void OnNetworkRouteChanged(
+ const rtc::NetworkRoute& new_network_route) = 0;
+};
+
// Interface for receiving encoded audio frames from MediaTransportInterface
// implementations.
class MediaTransportAudioSinkInterface {
@@ -329,8 +340,41 @@
// the observer must be unregistered (set to nullptr).
// A newly registered observer will be called back with the latest recorded
// target rate, if available.
+ // TODO(psla): This method will be removed, in favor of
+ // AddTargetTransferRateObserver.
virtual void SetTargetTransferRateObserver(
- webrtc::TargetTransferRateObserver* observer) = 0;
+ TargetTransferRateObserver* observer);
+
+ // Adds a target bitrate observer. Before media transport is destructed
+ // the observer must be unregistered (by calling
+ // RemoveTargetTransferRateObserver).
+ // A newly registered observer will be called back with the latest recorded
+ // target rate, if available.
+ virtual void AddTargetTransferRateObserver(
+ webrtc::TargetTransferRateObserver* observer);
+
+ // Removes an existing |observer| from observers. If observer was never
+ // registered, an error is logged and method does nothing.
+ virtual void RemoveTargetTransferRateObserver(
+ webrtc::TargetTransferRateObserver* observer);
+
+ // Returns the last known target transfer rate as reported to the above
+ // observers.
+ virtual absl::optional<TargetTransferRate> GetLatestTargetTransferRate();
+
+ // Gets the audio packet overhead in bytes. Returned overhead does not include
+ // transport overhead (ipv4/6, turn channeldata, tcp/udp, etc.).
+ // If the transport is capable of fusing packets together, this overhead
+ // might not be a very accurate number.
+ virtual size_t GetAudioPacketOverhead() const;
+
+ // Sets an observer for network change events. If the network route is already
+ // established when the callback is set, |callback| will be called immediately
+ // with the current network route.
+ // Before media transport is destroyed, the callback must be unregistered by
+ // setting it to nullptr.
+ virtual void SetNetworkChangeCallback(
+ MediaTransportNetworkChangeCallback* callback);
// Sets a state observer callback. Before media transport is destroyed, the
// callback must be unregistered by setting it to nullptr.