Webrtc創建網絡監聽器的代碼流程

1. 建立通話前的網絡相關處理

PeerConnection::Initialize
PeerConnection::InitializePortAllocator_n
port_allocator_->SetConfiguration(
PortAllocator::SetConfiguration
PortAllocatorSession* BasicPortAllocator::CreateSessionInternal
BasicPortAllocatorSession::BasicPortAllocatorSession
BasicNetworkManager::StartUpdating()
BasicNetworkManager::StartNetworkMonitor() 
ndroidNetworkMonitorFactory::CreateNetworkMonitor()
AndroidNetworkMonitor::Start()
startMonitoring
AndroidNetworkMonitor::SetNetworkInfos
AndroidNetworkMonitor::OnNetworkConnected_w

2. 爲每個network生成port流程

PortAllocator::SetConfiguration
pooled_session->StartGettingPorts()
network_thread_->Post(RTC_FROM_HERE, this, MSG_CONFIG_START);
BasicPortAllocatorSession::GetPortConfigurations()
BasicPortAllocatorSession::OnAllocate()
BasicPortAllocatorSession::DoAllocate()

 

3. 網絡變更需

NetworkMonitorAutoDetect類的connectionTypeChanged
NetworkMonitorBase::OnNetworksChanged()
NetworkMonitorBase::OnMessage
SignalNetworksChanged
BasicNetworkManager::OnNetworksChanged
BasicNetworkManager::UpdateNetworksOnce
SignalNetworksChanged
BasicPortAllocatorSession::OnNetworksChanged()
移除網絡

AllocationSequence::OnNetworkFailed
PrunePortsAndRemoveCandidates
SignalIceRegathering

 

備註:

//每種端口在分配時,會根據相應的協議獲取Condidate將會通過SignalCandidatesReady信號通知到上層!
//BasicPortAllocatorSession::SignalCandidatesReady==>
//P2PTransportChannel::OnCandidatesReady==>P2PTransportChannel::SignalCandidateGathered==>
//Transport::OnChannelCandidateGathered==>Transport::SignalCandidatesGathered==>
//TransportController::OnTransportCandidatesGathered_w==>TransportController::SignalCandidatesGathered==>
//WebRtcSession::OnTransportControllerCandidatesGathered==> ice_observer_->OnIceCandidate(&candidate);
//最終會調用應用層實現的IceObserver.OnIceCandidate
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章