[webrtc]Establecimiento de conexión interactiva (ICE)
Dirección del curso: Zero Point Audio Academy WebRTC Introducción y mejora/curso/435382?tuin=137bb271
Grupo QQ de soporte técnico: 782508536
Más audio y vídeo conocimiento Haga clic en: Seguir desarrollo de audio/vídeo
El establecimiento de conexión interactiva (ICE) es un protocolo de paso estándar que utiliza servidores Stun y Turn para ayudar a los puntos finales a establecer conexiones. Hay muchos recursos en el mercado que presentan ICE, como "9.2 Establecimiento de conexión interactiva" en "La guía definitiva de WebRTC" (tercera edición). Pero algunas personas todavía no pueden entenderlo después de leerlo. Aquí intento utilizar un ejemplo para describir todo el proceso. El protocolo ICE solo establece especificaciones y no especifica cómo implementar los detalles. Para obtener detalles de implementación, consulte WebRTC de Google.
La imagen de arriba es la Figura 9.1 en "La guía definitiva de WebRTC (tercera edición)". La convocatoria intercambia dos datos: la dirección del candidato e información de los medios. La llamada intercambia dos tipos de información, una es la dirección del candidato y la otra es la información de los medios. Las direcciones candidatas se utilizan para establecer conexiones de red y almacenar parámetros relacionados con las conexiones de red. Los mensajes multimedia (SDP) se utilizan para describir datos transmitidos a través de conexiones punto a punto, incluidos audio, video y datos. Utilizando la analogía de las carreteras y los automóviles, las direcciones de los candidatos se utilizan para construir carreteras, mientras que la información de los medios se utiliza para especificar en qué automóviles circular.
En el diagrama, ambos partidos procesan en serie las direcciones de los medios y de los candidatos, pero en realidad son concurrentes. Por ejemplo, después de que la persona que llama recibe la respuesta, es posible que aún esté recopilando direcciones candidatas para enviarlas a la persona llamada a través del servidor de señalización.
El agente de ICE maneja las direcciones de los medios y de los candidatos de forma independiente, excepto que la parte que llama debe crear una Oferta para comenzar a recopilar las direcciones de los candidatos y la parte llamada debe crear una Respuesta para comenzar a recopilar las direcciones de los candidatos. (Consulte "Cuatro: Selección de direcciones candidatas y medios de arranque" a continuación para obtener detalles sobre esta conclusión).
Al igual que en "9.2 Establecimiento de conexión interactiva", ICE se divide en seis pasos. La siguiente figura muestra la topología de red utilizada en el ejemplo.
lt;ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: text-align: start; text-indent: 0px; text- transformar: ninguno; espacio en blanco: normal; viudas: 2; espacio entre palabras: 0px; -webkit-text-stroke-width: 0px; ; -webkit-text-stroke-width: 0px color de fondo: rgb(255, 255, 255); estilo de decoración de texto: inicial; color de decoración de texto: inicial; lt;/ignore_js_opgt;
Uno: recopilar direcciones candidatas
Las direcciones candidatas son lt;Direcciones IP, puertosgt;Sí, tienen cuatro tipos.
| Tipo | Alias | Cómo pasar al par | Uso |
| Dirección del candidato de host | Servidor de señalización | , es la dirección de intranet |
| Dirección candidata de reflexión del servidor | srflx | Servidor de señalización | La dirección de transporte obtenida de la verificación de enlace enviada al servidor Stun. La dirección de transporte obtenida del cheque vinculante. Si la dirección está detrás de una NAT, es la dirección pública de la NAT más externa. Esta es una nueva dirección de candidato que aparece durante la verificación de conexión. Obtenido mediante una solicitud de asignación TURN |
Por ejemplo, aquí están las direcciones candidatas que se han recopilado, al menos en esta etapa. Para simplificar, no se escribirán las direcciones de reflexión del servidor para la IP2 de A y la IP2 de B.
| Alias | Tipo | Valor |
| A Cand2 |
| | Anfitrión | 192.168.0.204 |
| B Cand3 | Anfitrión 192.168.0.181 |
II: Intercambiar dirección del candidato
A envía A a A través del servidor de señalización Cand2, A Cand1 y B Cand3. Antes de profundizar, introduzcamos dos objetos:
El proxy ICE utiliza P2PTransportChannel para gestionar el tráfico de red en los canales (componentes). ¿Qué es un canal? Webrtc tiene un concepto llamado pista. Los más comunes incluyen pistas de video y pistas de audio. Para enviar datos en una pista, se pueden usar hasta dos canales, a saber, Rtp y Rtcp. Un P2PTransportChannel corresponde a un canal. Si la sesión actual debe procesar audio y video al mismo tiempo, y cada pista de audio contiene Rtp y Rtcp, entonces habrá cuatro objetos P2PTransportChannel en la sesión. P2PTransportChannel mantiene una ConnectionStatusTable para administrar la transmisión de la red. Un registro en la tabla corresponde a una ConnectionStatusTable. Un registro en la tabla corresponde a un objeto Conexión. Aquí, deje que el video Rtp específico de A corresponda a P2PTransportChannel. Al ver que recibe Cand1 de B, P2PTransportChannel agregará dos nuevos registros, es decir, dos Conexiones, a la tabla de estado de la conexión. En este punto, se ha alcanzado el canal y la dirección debe ser un par ip:puerto.
| Dirección de NIC local (puerto) | Dirección del mismo nivel |
| 192.168.1.105:60001 | 192.168.0.204:40001 | p> | 172.16.40.6:60003 | 192.168.0.204.40001 | Sin verificación de preparación
En este punto, A no sabe qué IP de NIC usar para enviar datos exitosamente a 192.168.0.204. Simplemente se crea una conexión en los posibles pares de direcciones. Tenga en cuenta que la "conexión" solo se basará en la IP de la NIC (es decir, el host), ya que para obtener al remitente como fuente, el host es la posible fuente, cualquier otra dirección son solo intermediarios.
Otras direcciones son sólo traducciones intermedias, como srflx. Por supuesto, la creación descarta los pares lt;dirección NIC, dirección del par>obviamente imposibles, por ejemplo, la dirección NIC es ipv4 y la dirección del par es ipv6.
Cuando se reciben todos los B Cand2, B$Cand3, hay seis registros en la tabla de estado.
| Dirección de NIC local | Dirección del mismo nivel |
| 192.168.1.105:60001 | 192.168.0.204:40001 | > | 172.16.40.6: 60003 | 192.168.0.204: 40001 | No se realizó ninguna verificación de aturdimiento |
| > | 172.16.40.6: 60003 | 11.92.14.8: 50002 | No se realizó ninguna verificación de aturdimiento |
| > | 192.168.1.105: 60001 | 11.92.14.8: 50002 | No se realiza ninguna verificación de mareos. Los datos de video Rtp de A se pueden enviar al canal de video Rtp de B, entonces, ¿cómo se puede realizar la verificación de mareos posterior?
Tres: verificación de STUN
Cree un nuevo registro en la tabla de estado, es decir, una conexión, y pronto se realizará una verificación de Stun en esta conexión. La verificación de Stun se realiza enviando una solicitud de enlace de Stun en esta conexión. Para admitir respuestas Stun, cada agente ICE debe tener una funcionalidad de servidor Stun incorporada. Los pasos para la verificación del aturdimiento son los siguientes.
lt;ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: text-align: start; text-indent: 0px; text- transformar: ninguno; espacio en blanco: normal; viudas: 2; espacio entre palabras: 0px; -webkit-text-stroke-width: 0px; ; -webkit-text-stroke-width: 0px color de fondo: rgb(255, 255, 255); estilo de decoración de texto: inicial; color de decoración de texto: inicial; lt;/ignore_js_opgt;
¿Por qué la comprobación Stun encuentra el candidato prflx? Digamos que la conexión entre A y el servidor Stun no está en buenas condiciones y después de recibir el srflx de B (11.92.14.8), no obtuvo su propio srflx (211.161.240.181).
Aunque A no obtiene su propio srflx, esto no impide la verificación provisional de la dirección candidata srflx de B, por lo que envía una solicitud de preparación a 11.92.14.8. Aunque el valor de esta dirección es igual al srflx de A, no se obtiene del servidor de señalización sino de la solicitud Stun del par.
Luego, A finalmente obtiene su propio srflx del servidor Stun y lo envía a B a través del servidor de señalización.
En este punto, podemos concluir que hay dos razones para crear una nueva conexión, una es porque la dirección candidata se recibe del servidor de señalización y la otra es porque prflx se encuentra a través de la verificación Stun. , que es lo mismo que a través de la señalización esclava. A diferencia de una conexión creada por un servidor que obtiene una dirección, verificar una conexión creada a través de Stun es casi seguro que la conexión estará abierta desde el principio.
Cuatro: verificación de aturdimiento
Cuatro: seleccionar la dirección del candidato e iniciar el medio
P2PTransportChannel mantiene una tabla de estado de conexión y ordena los registros en la tabla (SortConnectionsAndUpdateState). Ordenar significa calcular el "costo" de unión para cada registro y colocar primero el registro con el costo más bajo. ¿Cómo calcular el costo? Esto implica muchos factores, como el intervalo de tiempo entre la solicitud de aturdimiento y la respuesta, por lo que cuanto más corto sea el tiempo, menor será naturalmente el "coste".
Cuando A quiere enviar datos de vídeo rtp, comprueba la primera entrada en la tabla de estado y, si determina que se pueden enviar, utiliza esta conexión para enviarlos. En caso contrario, aborta la tarea de envío. El módulo de medios no necesita considerar la situación de las direcciones candidatas al procesar la recopilación y codificación de datos. Solo necesita prestar atención a las direcciones candidatas al enviarlas, incluso si no se pueden enviar, no tendrá ningún impacto en su propio progreso. De manera similar, el módulo de procesamiento de direcciones candidatas no necesita prestar atención al progreso del módulo de procesamiento de medios. Esta es una de las conclusiones del artículo anterior: "Los agentes de ICE son independientes entre sí al procesar las direcciones de los medios y de los candidatos. Es solo que la parte que llama debe crear una Oferta para comenzar a recopilar las direcciones de los candidatos, y la parte llamada debe crear una respuesta para comenzar a recopilar candidatos.
Las tareas de mantenimiento de tablas incluyen la creación de nuevos registros, la eliminación de registros y la modificación de campos de estado en los registros. Eliminar registros y modificar el estado implica "conexiones largas"
.Cinco: Conexiones largas
Para garantizar que las reglas de filtrado y asignación de NAT no expiren durante una sesión de medios, ICE verifica continuamente las conexiones transmitStun que utilizan direcciones candidatas. esto ocurre periódicamente para todos en la tabla de estado. El registro envía una solicitud de enlace provisional. Si se detecta que se agotó el tiempo de espera de una respuesta Stun en una conexión que de otro modo estaría abierta, cambiará el estado de la conexión y realizará una clasificación de la tabla, lo que puede degradarse. el rendimiento de la tabla y, en casos graves, eliminar el estado de la tabla.
Después de eliminar el registro, si la conexión a la dirección del candidato se restablece más tarde, la conexión se volverá a crear. según la dirección candidata
Seis: reinicio de ICE p>
Al analizar una conexión larga, ya podemos concluir que si la tabla de estado cambia debido a una congestión o interrupción de la red, el P2PTransportChannel puede. se procesará internamente si la dirección base cambia. Los cambios, como la desactivación de la tarjeta de red, están más allá del alcance de procesamiento de P2PTransportChannel y requieren reiniciar ICE.