javascript - rtcpeerconnection - webrtc step by step
WebRTC: ¿Cuántos servidores STUN/TURN debo especificar? (2)
Con respecto a STUN , WebRTC enviará solicitudes vinculantes a todos y los resultados se fusionarán. (Tenga en cuenta que en versiones anteriores del código de WebRTC, solo parece que se usa el primer servidor STUN)
Recomendaría usar más de un servidor STUN, ya que, en promedio, reducirá el tiempo de conexión. El número exacto depende de la confiabilidad de sus servidores STUN. Generalmente 2 son suficientes.
Con respecto a TURN , el problema es más complejo porque estos servidores retransmitirán su tráfico cuando las conexiones P2P no sean posibles. Si tiene muchos clientes, un solo servidor TURN probablemente alcanzará su ancho de banda máximo. En este caso, la configuración de múltiples servidores TURN ayudará.
¿Cómo? Durante la fase de comprobación de conectividad , WebRTC elegirá el relé TURN con el tiempo de ida y vuelta más bajo. Por lo tanto, la configuración de múltiples servidores TURN permite que su aplicación se amplíe en términos de ancho de banda y número de usuarios.
Si no está desarrollando una aplicación a gran escala, 1 o 2 servidores TURN generalmente son suficientes .
Puede navegar por el código de WebRTC en https://chromium.googlesource.com/external/webrtc/+/master
Recomiendo mirar dentro: webrtc / p2p / client / basicportallocator.cc, webrtc / p2p / base / stunport.cc y webrtc / p2p / base / turnport.cc
Estoy teniendo problemas con NAT traversal
y WebRTC
. La transmisión por video funciona con algunas personas, pero no con alguien que está detrás de un enrutador de dormitorio estudiantil.
Creo que esto debería resolverse utilizando un servidor TURN. Lo he hecho, todavía no funciona, y ahora me pregunto si el servidor TURN está funcionando. En consecuencia, me pregunto si puedo o debo configurar varios servidores TURN, y si es así, cómo.
Encontré esta lista de servidores STUN / TURN en otro hilo . Ahora mismo los estoy poniendo de esta manera
var STUN = {
''url'': ''stun:stun.l.google.com:19302'',
};
var TURN = {
url: ''turn:[email protected]:80'',
credential: ''homeo''
};
var iceServers =
{
iceServers: [STUN, TURN]
};
var pc = new RTCPeerConnection(iceServers);
Así que mi pregunta es básicamente: ¿Es posible configurar varios servidores STUN / TURN? ¿Debería hacerlo si es posible, y cómo sería ese código?
A STUN server is used to get an external network address.
TURN servers are used to relay traffic if direct (peer to peer) connection fails.
Las direcciones URL para los servidores STUN y / o TURN están (opcionalmente) especificadas por una aplicación WebRTC en el objeto de configuración iceServers que es el primer argumento para el constructor RTCPeerConnection.
ejemplo de uso de más de ese servidor:
var ICE_config= {
''iceServers'': [
{
''url'': ''stun:stun.l.google.com:19302''
},
{
''url'': ''turn:192.158.29.39:3478?transport=udp'',
''credential'': ''JZEOEt2V3Qb0y27GRntt2u2PAYA='',
''username'': ''28224511:1379330808''
},
{
''url'': ''turn:192.158.29.39:3478?transport=tcp'',
''credential'': ''JZEOEt2V3Qb0y27GRntt2u2PAYA='',
''username'': ''28224511:1379330808''
}
]
}
pc = new RTCPeerConnection(ICE_config);
Una vez que RTCPeerConnection tiene esa información, la magia ICE sucede automáticamente: RTCPeerConnection usa el marco ICE para encontrar la mejor ruta entre pares, trabajando con los servidores STUN y TURN según sea necesario.
Los servidores STUN : STUN viven en la Internet pública y tienen una tarea simple: verifique la dirección IP: puerto de una solicitud entrante (desde una aplicación que se ejecuta detrás de un NAT) y envíe esa dirección como respuesta. En otras palabras, la aplicación utiliza un servidor STUN para descubrir su IP: puerto desde una perspectiva pública. Este proceso permite a un interlocutor de WebRTC obtener una dirección de acceso público para sí mismo, y luego pasarla a otro interlocutor a través de un mecanismo de señalización, para establecer un enlace directo. (En la práctica, diferentes NAT funcionan de diferentes maneras y puede haber varias capas de NAT, pero el principio sigue siendo el mismo).
TURN : TURN RTCPeerConnection intenta establecer comunicación directa entre pares a través de UDP. Si eso falla, RTCPeerConnection recurre a TCP. Si eso falla, los servidores TURN se pueden usar como respaldo, transmitiendo datos entre puntos finales.
Solo para reiterar: TURN se utiliza para retransmitir audio / video / transmisión de datos entre pares, no para señalizar datos.
Los servidores de TURN tienen direcciones públicas, por lo que pueden ser contactados por compañeros incluso si están detrás de firewalls o servidores proxy. Los servidores TURN tienen una tarea conceptualmente simple: retransmitir una transmisión, pero, a diferencia de los servidores STUN, consumen una gran cantidad de ancho de banda. En otras palabras, los servidores TURN deben ser más robustos.
ver this