Aller au contenu principal

3.5.1. ICE Gathering Overview (Aperçu de la collecte ICE)

3.5.1. ICE Gathering Overview (Aperçu de la collecte ICE)

JSEP collecte les candidats ICE selon les besoins de l'application. La collecte de candidats ICE est appelée phase de collecte, et celle-ci est déclenchée soit par l'ajout d'une section "m=" nouvelle ou recyclée à la description de session locale, soit par de nouvelles informations d'identification ICE dans la description, indiquant un redémarrage ICE. L'utilisation de nouvelles informations d'identification ICE peut être déclenchée explicitement par l'application ou implicitement par l'implémentation JSEP en réponse aux changements dans la configuration ICE.

Lorsque la configuration ICE change d'une manière qui nécessite une nouvelle phase de collecte, un bit 'needs-ice-restart' est défini. Lorsque ce bit est défini, les appels à l'API createOffer généreront de nouvelles informations d'identification ICE. Ce bit est effacé par un appel à l'API setLocalDescription avec de nouvelles informations d'identification ICE provenant soit d'une offre soit d'une réponse, c'est-à-dire d'un redémarrage ICE initié localement ou à distance.

Lorsqu'une nouvelle phase de collecte commence, l'agent ICE notifiera l'application que la collecte est en cours via un événement de changement d'état. Ensuite, lorsque chaque nouveau candidat ICE devient disponible, l'agent ICE le fournira à l'application via un événement onicecandidate; ces candidats seront également automatiquement ajoutés à la description de session locale actuelle et/ou en attente. Enfin, lorsque tous les candidats ont été collectés, un événement onicecandidate final sera envoyé pour signaler que le processus de collecte est terminé.

Notez que les phases de collecte ne collectent que les candidats nécessaires aux sections "m=" nouvelles/recyclées/redémarrées; les autres sections "m=" continuent d'utiliser leurs candidats existants. De plus, si une section "m=" est regroupée (soit par une négociation de bundle réussie, soit en étant marquée comme bundle-only), alors les candidats seront collectés et échangés pour cette section "m=" si et seulement si son élément MID est un BUNDLE-tag, comme décrit dans [RFC8843].