您现在的位置是:首页 >学无止境 >webrtc TCP转发网站首页学无止境

webrtc TCP转发

MorrisMao 2024-06-17 10:29:46
简介webrtc TCP转发

一、 背景

配置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不通所以后续通讯没建立起来。具体原因未知
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。