WebRTC 网络设备管理

562 阅读1分钟

用于网络设备的管理的类是 NetworkManager

类结构如下图

我们使用的是他的子类 : BasicNetworkManager

BasicNetworkManager中一些重要的属性和方法:

  • thread_:Thread  : BasicNetworkManager工作在哪个线程

  • network_monitor : 用于监控网络设备的变化,发现变化之后需要做出相应的处理

  • CreateNetworks() : 查找系统中都包括哪些网络设备, 例如设备中有两块硬件网卡,则通过该方法即可获取两个网卡的设备信息

  • QueryDefaultLocalAddress() : 用于获取本地socket绑定的IP地址和端口号

  • StartNetworkMonitor() : 启动网络设备的额监控器

BasicNetworkManager 继承自三个类:

  • sigslot:has_slots : 支持信号发送
  • MessageHandler : 支持消息处理
  • NetworkManagerBase : 解释如下

NetworkManagerBase 中的属性和方法:

  • networks_ : 一个列表,遍历出的网卡信息都会保存在这里

  • ipv4_any_address_network_ : 默认使用的ipv4的网卡信息, ipv6同理

  • default_local_ipv4_address_ : 默认ipv4的地址, ipv6同理

  • MergeNetworkList() : 合并网卡信息, 将可以合并的网卡信息进行合并, 从而减少一部分的数据操作

NetworkManagerBase继承自NetworkManager

NetworkManager继承自:

  • DefaultLocalAddressProvider : 获取本地地址

  • MdnsResponderProvider : MDNS技术隐藏IP地址 防止泄漏

创建NetworkManager的过程

  1. PeerConnection::SetLocalDescription

  2. PeerConnection::DoSetLocalDescription

  3. JsepTransportController::MaybeStartGathering : 收集本地的candidate

  4. // 从主线程 切换到 工作线程

  5. JsepTransportController::MaybeStartGathering

  6. P2PTransportChannel::MaybeStartGathering

  7. PortAllocator::CreateSession

  8. BasicPortAllocator::CreateSessionInternal

  9. BasicPortAllocatorSession::BasicPortAllocatorSession

  10. BasicNetworkManager::StartUpdating 发送kUpdateNetworkMessage消息

  11. BasicNetworkManager::OnMessage , 当收取到的消息是要获取本机的网卡信息时, 就会继续执行下面的步骤

  12. BasicNetworkManager::UpdateNetworkContinually

  13. BasicNetworkManager::UpdateNetworkOnce

  14. BasicNetworkManager::CreateNetworks