OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 DeliveryStatus DeliverPacket(MediaType media_type, | 82 DeliveryStatus DeliverPacket(MediaType media_type, |
83 const uint8_t* packet, | 83 const uint8_t* packet, |
84 size_t length, | 84 size_t length, |
85 const PacketTime& packet_time) override; | 85 const PacketTime& packet_time) override; |
86 | 86 |
87 void SetBitrateConfig( | 87 void SetBitrateConfig( |
88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; | 88 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; |
89 | 89 |
90 void SignalChannelNetworkState(MediaType media, NetworkState state) override; | 90 void SignalChannelNetworkState(MediaType media, NetworkState state) override; |
91 | 91 |
| 92 void OnNetworkRouteChanged(const std::string& transport_name, |
| 93 const rtc::NetworkRoute& network_route) override; |
| 94 |
92 void OnSentPacket(const rtc::SentPacket& sent_packet) override; | 95 void OnSentPacket(const rtc::SentPacket& sent_packet) override; |
93 | 96 |
94 // Implements BitrateObserver. | 97 // Implements BitrateObserver. |
95 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, | 98 void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, |
96 int64_t rtt_ms) override; | 99 int64_t rtt_ms) override; |
97 | 100 |
98 private: | 101 private: |
99 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet, | 102 DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet, |
100 size_t length); | 103 size_t length); |
101 DeliveryStatus DeliverRtp(MediaType media_type, | 104 DeliveryStatus DeliverRtp(MediaType media_type, |
102 const uint8_t* packet, | 105 const uint8_t* packet, |
103 size_t length, | 106 size_t length, |
104 const PacketTime& packet_time); | 107 const PacketTime& packet_time); |
105 | |
106 void ConfigureSync(const std::string& sync_group) | 108 void ConfigureSync(const std::string& sync_group) |
107 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); | 109 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); |
108 | 110 |
109 VoiceEngine* voice_engine() { | 111 VoiceEngine* voice_engine() { |
110 internal::AudioState* audio_state = | 112 internal::AudioState* audio_state = |
111 static_cast<internal::AudioState*>(config_.audio_state.get()); | 113 static_cast<internal::AudioState*>(config_.audio_state.get()); |
112 if (audio_state) | 114 if (audio_state) |
113 return audio_state->voice_engine(); | 115 return audio_state->voice_engine(); |
114 else | 116 else |
115 return nullptr; | 117 return nullptr; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 int64_t last_rtp_packet_received_ms_; | 165 int64_t last_rtp_packet_received_ms_; |
164 int64_t first_packet_sent_ms_; | 166 int64_t first_packet_sent_ms_; |
165 | 167 |
166 // TODO(holmer): Remove this lock once BitrateController no longer calls | 168 // TODO(holmer): Remove this lock once BitrateController no longer calls |
167 // OnNetworkChanged from multiple threads. | 169 // OnNetworkChanged from multiple threads. |
168 rtc::CriticalSection bitrate_crit_; | 170 rtc::CriticalSection bitrate_crit_; |
169 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); | 171 int64_t estimated_send_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); |
170 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); | 172 int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); |
171 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); | 173 int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); |
172 | 174 |
| 175 std::map<std::string, rtc::NetworkRoute> network_routes_; |
| 176 |
173 VieRemb remb_; | 177 VieRemb remb_; |
174 const std::unique_ptr<CongestionController> congestion_controller_; | 178 const std::unique_ptr<CongestionController> congestion_controller_; |
175 | 179 |
176 RTC_DISALLOW_COPY_AND_ASSIGN(Call); | 180 RTC_DISALLOW_COPY_AND_ASSIGN(Call); |
177 }; | 181 }; |
178 } // namespace internal | 182 } // namespace internal |
179 | 183 |
180 Call* Call::Create(const Call::Config& config) { | 184 Call* Call::Create(const Call::Config& config) { |
181 return new internal::Call(config); | 185 return new internal::Call(config); |
182 } | 186 } |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 ReadLockScoped read_lock(*receive_crit_); | 588 ReadLockScoped read_lock(*receive_crit_); |
585 for (auto& kv : audio_receive_ssrcs_) { | 589 for (auto& kv : audio_receive_ssrcs_) { |
586 kv.second->SignalNetworkState(audio_network_state_); | 590 kv.second->SignalNetworkState(audio_network_state_); |
587 } | 591 } |
588 for (auto& kv : video_receive_ssrcs_) { | 592 for (auto& kv : video_receive_ssrcs_) { |
589 kv.second->SignalNetworkState(video_network_state_); | 593 kv.second->SignalNetworkState(video_network_state_); |
590 } | 594 } |
591 } | 595 } |
592 } | 596 } |
593 | 597 |
| 598 // TODO(honghaiz): Add tests for this method. |
| 599 void Call::OnNetworkRouteChanged(const std::string& transport_name, |
| 600 const rtc::NetworkRoute& network_route) { |
| 601 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
| 602 // Check if the network route is connected. |
| 603 if (!network_route.connected) { |
| 604 LOG(LS_INFO) << "Transport " << transport_name << " is disconnected"; |
| 605 // TODO(honghaiz): Perhaps handle this in SignalChannelNetworkState and |
| 606 // consider merging these two methods. |
| 607 return; |
| 608 } |
| 609 |
| 610 // Check whether the network route has changed on each transport. |
| 611 auto result = |
| 612 network_routes_.insert(std::make_pair(transport_name, network_route)); |
| 613 auto kv = result.first; |
| 614 bool inserted = result.second; |
| 615 if (inserted) { |
| 616 // No need to reset BWE if this is the first time the network connects. |
| 617 return; |
| 618 } |
| 619 if (kv->second != network_route) { |
| 620 kv->second = network_route; |
| 621 LOG(LS_INFO) << "Network route changed on transport " << transport_name |
| 622 << ": new local network id " << network_route.local_network_id |
| 623 << " new remote network id " |
| 624 << network_route.remote_network_id; |
| 625 // TODO(holmer): Update the BWE bitrates. |
| 626 } |
| 627 } |
| 628 |
594 void Call::UpdateAggregateNetworkState() { | 629 void Call::UpdateAggregateNetworkState() { |
595 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 630 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); |
596 | 631 |
597 bool have_audio = false; | 632 bool have_audio = false; |
598 bool have_video = false; | 633 bool have_video = false; |
599 { | 634 { |
600 ReadLockScoped read_lock(*send_crit_); | 635 ReadLockScoped read_lock(*send_crit_); |
601 if (audio_send_ssrcs_.size() > 0) | 636 if (audio_send_ssrcs_.size() > 0) |
602 have_audio = true; | 637 have_audio = true; |
603 if (video_send_ssrcs_.size() > 0) | 638 if (video_send_ssrcs_.size() > 0) |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 // thread. Then this check can be enabled. | 833 // thread. Then this check can be enabled. |
799 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); | 834 // RTC_DCHECK(!configuration_thread_checker_.CalledOnValidThread()); |
800 if (RtpHeaderParser::IsRtcp(packet, length)) | 835 if (RtpHeaderParser::IsRtcp(packet, length)) |
801 return DeliverRtcp(media_type, packet, length); | 836 return DeliverRtcp(media_type, packet, length); |
802 | 837 |
803 return DeliverRtp(media_type, packet, length, packet_time); | 838 return DeliverRtp(media_type, packet, length, packet_time); |
804 } | 839 } |
805 | 840 |
806 } // namespace internal | 841 } // namespace internal |
807 } // namespace webrtc | 842 } // namespace webrtc |
OLD | NEW |