webrtc TCP转发

文章讲述了在WebRTC中遇到UDP丢包问题时,如何将ICE(InteractiveConnectivityEstablishment)策略改为relay以使用TCP进行转发。配置中需在TURN服务器URL加上transport=tcp参数,但两端都设置relay可能导致通信失败,可能的原因是ICE服务器不同导致的冲突。

一、 背景

配置webrtc relay udp经常会被被丢包。所以希望改成tcp看来转发

二、 如何转发

peerconnection iceTransportPlicy 为 relay实现转发, 默认为all,是会优先P2P,不成功则走转发。默认是UDP

this.pc = new RTCPeerConnection({
      iceServers: [
      {'urls':'stun:xx.xx.xx.xx:3478'},
      {
        'urls':'turn:xx.xx.xx.xx:3478',
        'username':'xxx',
        'credential':'xxxx'
      }
      ],
      iceTransportPolicy: 'relay'
    });

这里配置的iceServers是给当前端用的。 配置relay时,对端候选地址是没有当前ip,只会把iceserver发给对端,对端是不知道当前的真实ip
此时只会有一条candidate数据, 不会把当前本地ip,外网ip等发出去

candidate:3566907199 1 udp 16785407 220.231.216.119 40269 typ relay raddr 0.0.0.0 rport 0 generation 0 ufrag nOr3 network-cost 999
UDP
UDP
local
ICE
remote

二、 配置TCP转发

tcp转发只要在turn加上transport=tcp参数即可

this.pc = new RTCPeerConnection({
      iceServers: [
      {'urls':'stun:xx.xx.xx.xx:3478'},
      {
        'urls':'turn:xx.xx.xx.xx:3478?transport=tcp',
        'username':'xxx','credential':'xxxx'}
      ],
      iceTransportPolicy: 'relay'
    });
TCP
UDP
local
ICE
remote

三、其他

  1. 如果两端都设置了relay 会通信不成功,具体原因未知
  2. 两端设置不同的ICESERVER进行relay则可以成功
UDP
UDP
local
ICE1
ICE2
remote
  1. 有试过把ICEServer的udp禁了来模拟udp不通的场景,发现无法建立连接
    抓包看会通过stun 的udp包来获取外网IP. 因为upd不通所以后续通讯没建立起来。具体原因未知
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值