§ 3.3.1

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
§ 3.3.2

Ligne par ligne.

LettreNomRôle
v=Protocol VersionToujours 0. Réservé pour une éventuelle évolution.
o=OriginUsername, session-id, version, network type, address type, IP.La version s'incrémente à chaque ré-INVITE.
s=Session NameNom libre. - ou SIP Call typiquement.
c=Connection InfoIP de réception du média.
t=Timing0 0 = session permanente. Hérité des sessions multicast SDP.
m=MediaType (audio/video), port, transport, payload types.Cœur de la négociation.
a=AttributeTout le reste. Mapping codec, direction, ICE, DTLS, etc.
§ 3.3.3

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.

§ 3.3.4

Direction du flux.

Quatre attributs disent qui peut envoyer et qui peut recevoir :

AttributSens
sendrecvLes deux UA envoient et reçoivent. Défaut.
sendonlyL'expéditeur du SDP envoie. Il ne s'attend à rien recevoir.
recvonlyL'expéditeur du SDP reçoit seulement.
inactiveAucun 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.

§ 3.3.5

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.

§ 3.3.6

« 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 →