Index: webrtc/call/call.cc |
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc |
index 5f9eb3fd93312ad657c6f9c19ce6eb1c758836a1..a9a002f42d9a73404f0d046289fbbf8f5627d3be 100644 |
--- a/webrtc/call/call.cc |
+++ b/webrtc/call/call.cc |
@@ -89,6 +89,10 @@ class Call : public webrtc::Call, public PacketReceiver, |
void SignalChannelNetworkState(MediaType media, NetworkState state) override; |
+ void OnNetworkRouteChanged( |
+ const std::string& transport_name, |
+ const cricket::NetworkRoute& network_route) override; |
+ |
void OnSentPacket(const rtc::SentPacket& sent_packet) override; |
// Implements BitrateObserver. |
@@ -102,7 +106,6 @@ class Call : public webrtc::Call, public PacketReceiver, |
const uint8_t* packet, |
size_t length, |
const PacketTime& packet_time); |
- |
void ConfigureSync(const std::string& sync_group) |
EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); |
@@ -170,6 +173,8 @@ class Call : public webrtc::Call, public PacketReceiver, |
int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); |
int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); |
+ std::map<std::string, cricket::NetworkRoute> network_routes_; |
+ |
VieRemb remb_; |
const std::unique_ptr<CongestionController> congestion_controller_; |
@@ -591,6 +596,38 @@ void Call::SignalChannelNetworkState(MediaType media, NetworkState state) { |
} |
} |
+void Call::OnNetworkRouteChanged(const std::string& transport_name, |
+ const cricket::NetworkRoute& network_route) { |
+ RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
+ // Check if the network route is connected. |
+ if (!network_route.connected) { |
+ LOG(LS_INFO) << "Transport " << transport_name << " is disconnected"; |
+ // TODO(honghaiz): Perhaps it should stop sending until a connected route is |
+ // established. |
+ return; |
+ } |
+ |
+ // Check whether the network route has changed on each transport. |
+ auto result = |
+ network_routes_.insert(std::make_pair(transport_name, network_route)); |
+ auto kv = result.first; |
+ bool inserted = result.second; |
+ if (inserted) { |
+ // No need to reset BWE if this is the first time the network connects. |
+ return; |
+ } |
+ bool changed = kv->second != network_route; |
+ if (changed) { |
+ kv->second = network_route; |
+ LOG(LS_INFO) << "Network route changed on transport " << transport_name |
+ << ": new local network id " << network_route.local_network_id |
+ << " new remote network id " |
+ << network_route.remote_network_id; |
+ congestion_controller_->ResetBweBitrates( |
+ config_.bitrate_config.start_bitrate_bps); |
+ } |
+} |
+ |
void Call::UpdateAggregateNetworkState() { |
RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |