3.5.1. ICE Gathering Overview (ICE-Sammlungsübersicht)
3.5.1. ICE Gathering Overview (ICE-Sammlungsübersicht)
JSEP sammelt ICE-Kandidaten nach Bedarf der Anwendung. Das Sammeln von ICE-Kandidaten wird als Sammlungsphase bezeichnet und wird entweder durch das Hinzufügen eines neuen oder recycelten "m="-Abschnitts zur lokalen Sitzungsbeschreibung oder durch neue ICE-Anmeldeinformationen in der Beschreibung ausgelöst, die einen ICE-Neustart anzeigen. Die Verwendung neuer ICE-Anmeldeinformationen kann explizit von der Anwendung oder implizit von der JSEP-Implementierung als Reaktion auf Änderungen in der ICE-Konfiguration ausgelöst werden.
Wenn sich die ICE-Konfiguration auf eine Weise ändert, die eine neue Sammlungsphase erfordert, wird ein 'needs-ice-restart'-Bit gesetzt. Wenn dieses Bit gesetzt ist, erzeugen Aufrufe der createOffer-API neue ICE-Anmeldeinformationen. Dieses Bit wird durch einen Aufruf der setLocalDescription-API mit neuen ICE-Anmeldeinformationen entweder aus einem Angebot oder einer Antwort gelöscht, d.h. von einem lokal oder remote initiierten ICE-Neustart.
Wenn eine neue Sammlungsphase beginnt, benachrichtigt der ICE-Agent die Anwendung durch ein Zustandsänderungsereignis, dass das Sammeln stattfindet. Wenn dann jeder neue ICE-Kandidat verfügbar wird, stellt der ICE-Agent ihn der Anwendung über ein onicecandidate-Ereignis zur Verfügung; diese Kandidaten werden auch automatisch zur aktuellen und/oder ausstehenden lokalen Sitzungsbeschreibung hinzugefügt. Wenn schließlich alle Kandidaten gesammelt wurden, wird ein abschließendes onicecandidate-Ereignis ausgelöst, um zu signalisieren, dass der Sammlungsprozess abgeschlossen ist.
Beachten Sie, dass Sammlungsphasen nur die Kandidaten sammeln, die von neuen/recycelten/neu startenden "m="-Abschnitten benötigt werden; andere "m="-Abschnitte verwenden weiterhin ihre vorhandenen Kandidaten. Wenn ein "m="-Abschnitt gebündelt ist (entweder durch eine erfolgreiche Bundle-Verhandlung oder durch Markierung als bundle-only), werden Kandidaten für diesen "m="-Abschnitt nur dann gesammelt und ausgetauscht, wenn sein MID-Element ein BUNDLE-tag ist, wie in [RFC8843] beschrieben.