SDP, l'accord du média.
Session Description Protocol — RFC 4566. Une grammaire de description en texte transportée dans le corps des INVITE et des 200 OK. Trois lignes minimum, dix typiques, davantage pour ICE et la sécurité.
Un SDP complet.
v=0 o=alice 2890844526 2890844526 IN IP4 192.0.2.4 s=- c=IN IP4 192.0.2.4 t=0 0 m=audio 49170 RTP/AVP 96 0 8 a=rtpmap:96 opus/48000/2 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=fmtp:96 useinbandfec=1 a=sendrecv
Ligne par ligne.
| Lettre | Nom | Rôle |
|---|---|---|
| v= | Protocol Version | Toujours 0. Réservé pour une éventuelle évolution. |
| o= | Origin | Username, session-id, version, network type, address type, IP.La version s'incrémente à chaque ré-INVITE. |
| s= | Session Name | Nom libre. - ou SIP Call typiquement. |
| c= | Connection Info | IP de réception du média. |
| t= | Timing | 0 0 = session permanente. Hérité des sessions multicast SDP. |
| m= | Media | Type (audio/video), port, transport, payload types.Cœur de la négociation. |
| a= | Attribute | Tout le reste. Mapping codec, direction, ICE, DTLS, etc. |
Offre / réponse.
Alice propose trois codecs dans son INVITE :
m=audio 49170 RTP/AVP 96 0 8 a=rtpmap:96 opus/48000/2 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000
Bob ne supporte qu'Opus et G.711 µ-law. Sa réponse :
m=audio 38214 RTP/AVP 96 a=rtpmap:96 opus/48000/2
Bob ne garde qu'Opus, dans cet ordre. Alice doit obéir : c'est en Opus que le RTP va s'établir. La règle est asymétrique — l'offrant propose une liste, le répondant en garde au moins un et donne l'ordre final.
Direction du flux.
Quatre attributs disent qui peut envoyer et qui peut recevoir :
| Attribut | Sens |
|---|---|
| sendrecv | Les deux UA envoient et reçoivent. Défaut. |
| sendonly | L'expéditeur du SDP envoie. Il ne s'attend à rien recevoir. |
| recvonly | L'expéditeur du SDP reçoit seulement. |
| inactive | Aucun flux dans aucun sens. Hold. |
Pour mettre un appel en attente, on envoie un ré-INVITE avec a=sendonly ou a=inactive. Le RTP s'arrête dans le sens vers l'autre. Le ré-INVITE de reprise repasse à sendrecv.
SDP et ICE.
Quand ICE est utilisé, le SDP grossit considérablement. Chaque candidat est annoncé sur une ligne a=candidate:, plus des credentials ICE pour authentifier les ping de connectivity check.
a=ice-ufrag:F7gI a=ice-pwd:x9cmTxHEowmONJOmcsHHrk a=candidate:0 1 UDP 2122252543 192.168.1.20 54812 typ host a=candidate:1 1 UDP 1685987327 81.2.3.4 54812 typ srflx raddr 192.168.1.20 rport 54812 a=candidate:2 1 UDP 33562623 198.18.0.42 38214 typ relay raddr 81.2.3.4 rport 54812
Trois candidats : host (IP locale), srflx (server-reflexive via STUN), relay (via TURN). Le SDP peut atteindre 30+ lignes facilement.
« Le SDP n'est pas un protocole. C'est un format. Mais c'est lui qui tient toute la négociation média. » — note technique
Suivant : La sécurité — SRTP, ZRTP →