PortAllocator的作用就是分配端口号。

PortAllocator类关系图

image.png
H:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\p2p\base\portallocator.h
PortAllocator:
int candidate_pool_size
= 0; 人工设置candidate池大小,默认自动,不设置
std::vector> pooledsessions; 上下文处理集合,分配端口的实际工作就在里面的每个PortAllocatorSession
PortAllocator::CreateSession
-》BasicPortAllocator::CreateSessionInternal
-》PortAllocatorSession* session = new BasicPortAllocatorSession, return session;

创建BasicPortAllocator对象

image.png
每个PeerConnection对应一个PortAllocator对象。

构造BasicPortAllocator的参数

image.png

BasicPortAllocator的构造函数

image.png

PortAllocator的构造函数

image.png
const uint32_t kDefaultStepDelay = 1000; // 1 sec step delay.

// CF = CANDIDATE FILTER
enum : uint32_t {
CF_NONE = 0x0,
CF_HOST = 0x1,
CF_REFLEXIVE = 0x2,
CF_RELAY = 0x4,
CF_ALL = 0x7,
};

InitRelayPortFactory

image.png

SetConfiguration

image.png

初始化PortAllocator

PeerConnection::Initialize

image.png

PeerConnection::InitializePortAllocator_n

image.png

PortAllocator中的flag

image.png

小结

image.png