webrtc 维护方法一.1(RTCStatsReport之candidate-pair/remote-candidate/local-candidate参数解读)

一、整体概述

    RTCStatsReport的candidate-pair/remote-candidate/local-candidate这三组参数配合,用来获取当前链接的IP地址信息。下图示例参数就是由这三组参数配合获取的。

二、具体实现

这三组参数是通过candidate-pair->id找到对应的映射关系。如下图所示:

candidate-pair里面的localCandidateId和remoteCandidateId对应remote-candidate和local-candidate的ID。根据这个,我们就能找到本端和远端的详细网络地址信息。

三、参数详解

1、candidate-pair

参数名参数含义备注说明
transportId远端和本端候选项ID组合 
localCandidateIdlocal-candidate的ID 
remoteCandidateIdremote-candidate的ID 
stateICE探测状态参见IceCandidatePairState定义
priority优先级 
nominated是否提名 
writable是否可以发包 
readable是否可以收报 
bytesSent发送报文字节数 
bytesReceived接收报文字节数 
totalRoundTripTime总环路延时时长 
currentRoundTripTime当前RTT环路延时时长 
availableOutgoingBitrate发送报文带宽 
availableIncomingBitrate接收报文带宽 
requestsReceived发送stun ping响应字节数 
requestsSent发送stun ping请求次数 
responsesReceived接收stun ping响应字节数 
responsesSent接收stun ping响应次数 

在实际运行中,RTCStatsReport可能生成多条candidate-pair,至于我们到底选中的是哪条ICE路径,需要根据state、writable、readable、bytesSent、bytesReceived、availableOutgoingBitrate来判断。

其中最重要的是availableOutgoingBitrate字段。state、writable、readable表示探测状态,当我们有N个coturn服务器的时候,有可能多条路径都可以探测成功。bytesSent、bytesReceived表示已经发送接收报文个数,但是当有更优路径切换的时候,旧的路径这个值也可能不为0。而只有availableOutgoingBitrate是在当前选中路径下才有的字段。参见RTCStatsCollector::ProduceIceCandidateAndPairStats_n函数实现:

四、关于远端和本端IP地址信息

 

介绍IP地址之前,首先介绍一下coturn中继的工作原理。A端与外界通讯有三种方式:

1)局域网直连。可以使用168.168.5.34:55055与本局域网其他IP地址通讯。

2)公网通讯,并且可以NAT打洞出去,可以直接使用112.112.130.120:26409与外界进行通讯。

3)公网通讯,但不能NAT打洞出去的,需要使用中继128.10.150.101:55077与外界通讯。

RTCStatsReport之candidate-pair/remote-candidate/local-candidate配合显示的IP地址是,在本次通讯中,您可以通过哪种方式联系到我。CandidateType也是我通过什么方式与外界通讯。

可能是host的168.168.5.34:55055,可能是prflx的112.112.130.120:26409,也有可能是relay的128.10.150.101:55077

示例一:A需要中继,B可以直连情况

站在A侧,他的本端IP地址和端口号是中继地址128.10.150.101:55077,因为在外看来只有这个IP和端口,才能找到A。A的远端IP地址和端口号是B外网映射地址112.112.130.150:13409。A侧显示的CandidateType为relay。因为A是通过中继进出的。

站在B侧,他的本端IP地址和端口号是自己的公网IP112.112.130.150:13409。他的远端IP地址和端口号是128.10.150.101:55077。B侧显示的CandidateType为prflx。因为B是通过直连打洞方式进出的。

 

示例二:A、B都走中继。

这是coturn级联时,数据流走向图。

站在A侧,他的本端IP地址和端口号是中继地址128.10.150.101:55077。他的远端IP地址和端口号也是中继地址128.10.160.120:55088。A侧显示的CandidateType为relay。A侧数据是通过中继进出的。

站在B侧,他的本端IP地址和端口号是中继地址128.10.160.120:55088。他的远端IP地址和端口号也是中继地址128.10.150.101:55077。B侧显示的CandidateType为relay。B侧数据也是通过中继进出的。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值