webrtc源码学习 - Network

network 支持功能

1、本地网络
2、适配器
3、dns
4、网络的开销

获取本机的网络

1、调用 GetAdaptersAddresses函数检索与本地计算机上的适配器关联的地址。
2、遍历适配器信息
- 2.1 判断操作状态,如果是启动才进行处理
-

bool BasicNetworkManager::CreateNetworks(bool include_ignored,
                                         NetworkList* networks) const {
   
  NetworkMap current_networks;
  // MSDN recommends a 15KB buffer for the first try at GetAdaptersAddresses.
  size_t buffer_size = 16384;
  std::unique_ptr<char[]> adapter_info(new char[buffer_size]);
  PIP_ADAPTER_ADDRESSES adapter_addrs =
      reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_info.get());

  // 1. 获取适配器的信息,存放到adapter_info中,如果存储不下,重新分配内存适应
  int adapter_flags = (GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_ANYCAST |
                       GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_INCLUDE_PREFIX);
  int ret = 0;
  do {
   
    adapter_info.reset(new char[buffer_size]);
	//adapter_addrs 指向缓冲区的指针,该缓冲区包含成功返回时IP_ADAPTER_ADDRESSES结构的链表。
    adapter_addrs = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(adapter_info.get());
    ret = GetAdaptersAddresses(AF_UNSPEC, adapter_flags, 0, adapter_addrs,
                               reinterpret_cast<PULONG>(&buffer_size));
  } while (ret == ERROR_BUFFER_OVERFLOW);
  if (ret != ERROR_SUCCESS) {
   
    return false;
  }

  // 2. 遍历适配器信息,
  int count = 0;
  while (adapter_addrs) {
   
	// 2.1 判断操作状态,如果是启动才进行处理
    if (adapter_addrs->OperStatus == IfOperStatusUp) {
   
	  // 2.1.1 第一个单播地址指针
      PIP_ADAPTER_UNICAST_ADDRESS address = adapter_addrs->FirstUnicastAddress;
      PIP_ADAPTER_PREFIX prefixlist = adapter_addrs->FirstPrefix;
	  // 2.1.2 获取适配器名称和描述
      std::string name;
      std::string description;
#if !defined(NDEBUG)
      name = ToUtf8(adapter_addrs->FriendlyName,
                    wcslen(adapter_addrs->FriendlyName));
#endif
      description = ToUtf8(adapter_addrs->Description,
                           wcslen(adapter_addrs->Description))
通过更改Chrome的隐私设置来配置WebRTC的网络流量。 在Chrome的隐私设置中配置WebRTC流量路由选项。 ★它做什么: 这配置WebRTC不使用某些IP地址或协议: - 公共互联网不可见的私人IP地址(例如地址192.168.1.2) - 与不用于网络流量的网络接口相关联的任何公共IP地址(例如,当通过VPN浏览时,ISP提供的地址) - 要求WebRTC流量通过Chrome中配置的代理服务器。由于大多数代理服务器不处理UDP,所以这会有效地关闭UDP,直到Chrome中提供UDP代理支持,并且这些代理被广泛部署。   当扩展程序安装在M48之前的Chrome版本上时,WebRTC将仅使用与用于Web通信的接口关联的公共IP地址,通常是已经提供给浏览器HTTP请求中的站点的相同地址。对于Chrome版本M48以及之后的版本,此扩展提供了一个允许WebRTC使用默认公共地址的配置,对于NAT后面的机器,则使用与公共地址关联的默认私有地址。在Chrome M48的全新安装扩展之后,所述行为将是默认的。对于升级方案,以前选择的配置不应该改变。 该扩展也可能会禁用非代理UDP,但默认情况下不会启用,并且必须使用扩展的“选项”页面进行配置。 ★注意事项: 此扩展可能会影响使用WebRTC进行音频/视频或实时数据通信的应用程序的性能。因为它限制了潜在的网络路径和协议,所以WebRTC可能选择导致明显更长的延迟或更低质量(例如,通过VPN)的路径,或者仅通过代理服务器使用TCP,这对于实时通信不是理想的。我们正试图确定这是多么普遍。 安装此项目即表示您同意Google服务条款和隐私权政策,网址为https://www.google.com/intl/zh-CN/policies/。 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值