您现在的位置是:首页 >学无止境 >webrtc TCP转发网站首页学无止境
webrtc TCP转发
简介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
二、 配置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'
});
三、其他
- 如果两端都设置了relay 会通信不成功,具体原因未知
- 两端设置不同的ICESERVER进行relay则可以成功
- 有试过把ICEServer的udp禁了来模拟udp不通的场景,发现无法建立连接
抓包看会通过stun 的udp包来获取外网IP. 因为upd不通所以后续通讯没建立起来。具体原因未知
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。