Passa al contenuto principale

3.5.1. ICE Gathering Overview (Panoramica della raccolta ICE)

3.5.1. ICE Gathering Overview (Panoramica della raccolta ICE)

JSEP raccoglie i candidati ICE secondo le necessità dell'applicazione. La raccolta di candidati ICE è definita fase di raccolta e viene attivata dall'aggiunta di una sezione "m=" nuova o riciclata alla descrizione di sessione locale o da nuove credenziali ICE nella descrizione, che indicano un riavvio ICE. L'uso di nuove credenziali ICE può essere attivato esplicitamente dall'applicazione o implicitamente dall'implementazione JSEP in risposta alle modifiche nella configurazione ICE.

Quando la configurazione ICE cambia in modo da richiedere una nuova fase di raccolta, viene impostato un bit 'needs-ice-restart'. Quando questo bit è impostato, le chiamate all'API createOffer genereranno nuove credenziali ICE. Questo bit viene cancellato da una chiamata all'API setLocalDescription con nuove credenziali ICE provenienti da un'offerta o da una risposta, ovvero da un riavvio ICE avviato localmente o remotamente.

Quando inizia una nuova fase di raccolta, l'agente ICE notificherà all'applicazione che la raccolta è in corso tramite un evento di cambio di stato. Quindi, quando ogni nuovo candidato ICE diventa disponibile, l'agente ICE lo fornirà all'applicazione tramite un evento onicecandidate; questi candidati verranno anche aggiunti automaticamente alla descrizione di sessione locale corrente e/o in sospeso. Infine, quando tutti i candidati sono stati raccolti, verrà inviato un evento onicecandidate finale per segnalare che il processo di raccolta è completo.

Si noti che le fasi di raccolta raccolgono solo i candidati necessari per le sezioni "m=" nuove/riciclate/in riavvio; le altre sezioni "m=" continuano a utilizzare i loro candidati esistenti. Inoltre, se una sezione "m=" è raggruppata (tramite una negoziazione bundle riuscita o contrassegnandola come bundle-only), i candidati verranno raccolti e scambiati per quella sezione "m=" se e solo se il suo elemento MID è un BUNDLE-tag, come descritto in [RFC8843].