webrtc 网络块port创建流程

本文详细介绍了WebRTC中Port的创建过程,包括在BasicPortAllocatorSession中的地址获取,以及通过StunPort对象收集外网地址。在SetLocalDescription调用后,创建TransportChannel并启动ping检查。接着在MaybeStartGathering操作中开始收集Ports,并在SetRemoteDescription后检查Channels,最终在AddRemoteCandidate中建立Connection,并通过Ping线程检查连通性。

模块说明:

这里写图片描述
此模块在BasicPortAllocatorSession模块中用以获取本机地址用于后续生成Port用
这里写图片描述
此模块主要是用于生成Port端口并开启Candidate收集.Stun连接服务器并收集外网地址是在AddAllocatedPort函数中通过StunPort对象调用PrepareAddress函数开始处理的.
至于Port的创建本模块时通过调用AllocationSequence对象逐步创建完成UDP/STUN/TURN/TCP的Port并添加端口至本Session模块
这里写图片描述

主要流程

### WebRTC P2P连接详细流程 #### 一、信令交互与媒体协商 Peer-A 和 Peer-B 需要先通过信令服务器来进行一系列准备工作。这其中包括但不限于双方支持的音视频编解码器等参数的确认,这些信息被封装在 SDP(Session Description Protocol) 中并相互传递[^3]。 ```python # 假设这是简化版的Python伪代码来表示发送SDP的过程 def send_sdp_to_peer(peer, sdp_info): signaling_server.send_message({ 'to': peer, 'type': 'sdp', 'content': sdp_info }) ``` #### 二、网络信息获取及NAT穿透尝试 为了使两端能够直接通信,在此阶段两方都会向 STUN 服务器发起请求以获得自身的公共 IP 地址和端口号映射情况;同时也会探测所在 NAT 类型及其行为特性。如果两个节点之间的路径上存在防火墙或某些类型的 NAT 设备阻止了直接连接,则可能需要借助 ICE(Internet Connectivity Establishment) 协议寻找最佳候选路由方案[^4]。 ```python import stun def get_network_info(): nat_type, external_ip, external_port = stun.get_nat_type() return { "natType": nat_type, "externalIP": external_ip, "externalPort": external_port } ``` #### 三、创建连接 一旦上述工作完成并且找到了合适的传输通道——无论是直接相连还是经由 TURN(Traffic Using Relays around NAT) 代理服务转发流量——就可以正式建立实时双向的数据流了。此时应用程序可以开始收发多媒体内容,比如音频/视频聊天等功能即可正常运作。 ```mermaid graph LR; A[Start] --> B{Signaling}; B --> C[Exchange SDP]; C --> D{Gather Candidates}; D --> E[Use STUN to find public address]; E --> F{Try Direct Connection with ICE}; F --> G[If failed use TURN server]; G --> H[Establish Media Stream]; H --> I[End] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值