O SDP (Session Description Protocol, RFC 4566) é o formato de texto que o SIP transporta para descrever uma sessão de média — o endereço IP, as portas, os tipos de média e os codecs que cada lado oferece. Não é um transporte; é uma descrição. O SIP usa-o numa troca de oferta/resposta (RFC 3264) para negociar a média que os pontos terminais vão trocar sobre RTP.
O que é o SDP
O SDP é um formato de texto pequeno, baseado em linhas, que descreve uma sessão multimédia: que média (áudio, vídeo), para onde a enviar (endereço de ligação e porta), que codecs são aceitáveis e em que direção pode fluir. O SIP não interpreta a média em si; transporta o SDP no corpo da mensagem (Content-Type: application/sdp) e deixa os pontos terminais acordar os parâmetros. O SDP é puramente descritivo — não transporta média nem negoceia nada por si só; a negociação vem de como o SIP troca dois corpos SDP.
A estrutura de linhas
Um corpo SDP é uma sequência de linhas de tipo de uma só letra numa ordem fixa, dividida numa secção ao nível da sessão seguida de uma ou mais secções ao nível da média que começam cada uma por uma linha m=. As mais importantes são o o= (origem e id de sessão), o c= (endereço de ligação), o m= (tipo de média, porta, transporte e formatos) e as linhas de atributo a= que transportam os mapas de codec e a direção. As linhas são ordenadas e sensíveis a maiúsculas.
| Linha | Nome | Transporta |
|---|---|---|
| v= | Versão | Versão SDP (0) |
| o= | Origem | Nome de utilizador, ID/versão da sessão, rede/endereço |
| s= | Nome da sessão | Uma etiqueta para a sessão |
| c= | Conexão | Tipo de rede, tipo de endereço e endereço IP do conteúdo multimédia |
| t= | Temporização | Hora de início/término (0 0 para uma chamada ilimitada) |
| m= | Multimédia | Tipo multimédia, porta, transporte (RTP/AVP…) e formatos |
| a= | Atributos | rtpmap, fmtp, ptime, direção (sendrecv…) e mais |
O modelo de oferta/resposta
O SIP negoceia média com o modelo de oferta/resposta da RFC 3264. Um ponto terminal envia uma oferta SDP (tipicamente no INVITE) listando os fluxos de média e todos os codecs que está disposto a usar. O outro devolve uma resposta SDP (tipicamente no 200 OK) selecionando entre o que foi oferecido — mantendo apenas os codecs que também suporta, pela sua ordem preferida, e definindo a direção. O resultado é a interseção que ambos os lados acordaram. Uma incompatibilidade sem codec comum é o que produz um 488 Not Acceptable Here.
v=0
o=alice 2890844526 2890844526 IN IP4 host.example.com
s=-
c=IN IP4 198.51.100.10
t=0 0
m=audio 49170 RTP/AVP 0 8 96
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-15
a=ptime:20
a=sendrecvCodecs e payload types
A linha m= lista números de payload type RTP, e cada a=rtpmap mapeia um número num codec e taxa de relógio. Os payload types 0–95 incluem atribuições estáticas (0 = PCMU/G.711 µ-law, 8 = PCMA/G.711 A-law, 9 = G722, 18 = G729), enquanto os 96–127 são dinâmicos e têm de ser definidos por um rtpmap. O a=fmtp transporta parâmetros específicos do codec, e o telephone-event (RFC 4733) é como o DTMF é negociado. Listar os codecs por ordem de preferência permite ao respondente escolher o melhor mutuamente suportado.
| PT | Codec | Clock | Nota |
|---|---|---|---|
| 0 | PCMU (G.711 µ-law) | 8000 | Estático; ~64 kbit/s, qualidade telefónica (toll quality) |
| 8 | PCMA (G.711 A-law) | 8000 | Estático; ~64 kbit/s, qualidade telefónica (toll quality) |
| 9 | G722 | 8000 | Wideband (áudio de 16 kHz) |
| 18 | G729 | 8000 | Estático; ~8 kbit/s comprimido |
| 96–127 | Dinâmico (Opus, telephone-event…) | varia | Definido por a=rtpmap |
Atributos de direção de média
Um atributo de direção a= define como a média flui para um fluxo. sendrecv é a predefinição bidirecional normal. sendonly e recvonly restringem o fluxo a uma direção — usados para espera, anúncios e média num só sentido. inactive para a média totalmente mantendo a sessão de pé. Alternar estes (por exemplo sendonly ⇄ sendrecv num re-INVITE) é como se implementam a espera de chamada, a retoma e a música em espera sem largar o diálogo.
| Atributo | Significado |
|---|---|
| a=sendrecv | Enviar e receber conteúdo multimédia (padrão) |
| a=sendonly | Somente enviar (ex.: anúncio, ou a parte em espera) |
| a=recvonly | Somente receber (ex.: a parte colocada em espera) |
| a=inactive | Sem multimédia em nenhuma direção; a sessão permanece ativa |
Perguntas frequentes
Para que serve o SDP no SIP?
O SDP descreve a sessão de média — o endereço IP, as portas, os tipos de média e os codecs que cada ponto terminal oferece. O SIP transporta dois corpos SDP numa troca de oferta/resposta para negociar que áudio ou vídeo os pontos terminais vão trocar sobre RTP. O SDP em si não transporta média.
O que é o modelo de oferta/resposta do SIP?
Definido na RFC 3264, é como o SIP negoceia média: um lado envia uma oferta SDP (frequentemente no INVITE) listando a sua média e codecs, e o outro devolve uma resposta SDP (frequentemente no 200 OK) selecionando o subconjunto que também suporta. A interseção acordada é o que flui.
O que significa a linha m= no SDP?
A linha m= (média) declara um fluxo de média: o seu tipo (áudio/vídeo), a porta para onde enviar, o transporte (por exemplo RTP/AVP ou RTP/SAVP para SRTP) e a lista de números de payload type RTP oferecidos. Cada payload type é depois descrito por uma linha a=rtpmap.
Como são escolhidos os codecs numa chamada SIP?
O ofertante lista os codecs aceitáveis por ordem de preferência no SDP. O respondente mantém apenas os que também suporta e devolve-os, selecionando efetivamente o melhor codec mutuamente suportado. Se os conjuntos não se intersetarem, a negociação falha, tipicamente com um 488 Not Acceptable Here.
Como se faz a espera de chamada com SDP?
Alterando o atributo de direção de média num re-INVITE — por exemplo definindo a=sendonly (ou historicamente um endereço de ligação a zero) para colocar a parte remota em espera, e a=sendrecv para retomar. O diálogo mantém-se de pé; só a direção da média muda.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.