5.2.1. Initial Offers (Offres initiales)
5.2.1. Initial Offers (Offres initiales)
Lorsque createOffer est appelé pour la première fois, le résultat est connu sous le nom d'offre initiale.
La première étape de la génération d'une offre initiale consiste à générer des attributs au niveau de la session, comme spécifié dans [RFC4566], Section 5. Plus précisément:
-
La première ligne SDP DOIT être "v=0" comme défini dans [RFC4566], Section 5.1.
-
La deuxième ligne SDP DOIT être une ligne "o=" comme défini dans [RFC4566], Section 5.2. La valeur du champ <username> DEVRAIT être "-". Le <sess-id> DOIT être représentable par un entier signé de 64 bits, et la valeur DOIT être inférieure à 2^(63)-1. Il est RECOMMANDÉ que le <sess-id> soit construit en générant une quantité de 64 bits avec le bit le plus élevé défini à zéro et les 63 bits restants étant cryptographiquement aléatoires. La valeur du tuple <nettype> <addrtype> <unicast-address> DEVRAIT être définie sur une adresse non significative, telle que IN IP4 0.0.0.0, pour éviter la fuite d'une adresse IP locale dans ce champ; ce problème est discuté dans [RFC8828]. Comme mentionné dans [RFC4566], la ligne "o=" entière doit être unique, mais la sélection d'un nombre aléatoire pour <sess-id> est suffisante pour y parvenir.
-
La troisième ligne SDP DOIT être une ligne "s=" comme défini dans [RFC4566], Section 5.3; pour correspondre à la ligne "o=", un seul tiret DEVRAIT être utilisé comme nom de session, par exemple "s=-". Notez que cela diffère du conseil dans [RFC4566], qui propose un seul espace, mais comme "o=" et "s=" sont sans signification dans JSEP, avoir la même valeur sans signification semble plus clair.
-
Les lignes d'informations de session ("i="), URI ("u="), adresse e-mail ("e="), numéro de téléphone ("p="), temps de répétition ("r=") et fuseaux horaires ("z=") ne sont pas utiles dans ce contexte et NE DEVRAIENT PAS être incluses.
-
Les lignes de clés de chiffrement ("k=") ne fournissent pas une sécurité suffisante et NE DOIVENT PAS être incluses.
-
Une ligne "t=" DOIT être ajoutée, comme spécifié dans [RFC4566], Section 5.9; <start-time> et <stop-time> DEVRAIENT tous deux être définis à zéro, par exemple "t=0 0".
-
Une ligne "a=ice-options" avec les options "trickle" et "ice2" DOIT être ajoutée, comme spécifié dans [RFC8840], Section 4.1.1 et [RFC8445], Section 10.
-
Si l'identité WebRTC est utilisée, une ligne "a=identity" DOIT être ajoutée, comme décrit dans [RFC8827], Section 5.
L'étape suivante consiste à générer des sections "m=", comme spécifié dans [RFC4566], Section 5.14. Une section "m=" est générée pour chaque RtpTransceiver qui a été ajouté au PeerConnection, à l'exclusion de tout RtpTransceiver arrêté; cela est fait dans l'ordre où les RtpTransceivers ont été ajoutés au PeerConnection.
Chaque section "m=", à condition qu'elle ne soit pas marquée comme bundle-only, DOIT contenir un ensemble unique d'identifiants ICE et un ensemble unique de candidats ICE. Les sections "m=" bundle-only NE DOIVENT PAS contenir d'identifiants ICE et NE DOIVENT PAS collecter de candidats.
Pour DTLS, toutes les sections "m=" DOIVENT utiliser tous les certificats qui ont été spécifiés pour le PeerConnection; en conséquence, elles DOIVENT toutes avoir la même valeur d'empreinte digitale ou les mêmes valeurs [RFC8122], ou ces valeurs DOIVENT être des attributs au niveau de la session.