RTP / SDP

RTP e SDP são componentes fundamentais das comunicações de voz e vídeo sobre IP.
Enquanto o SIP é utilizado principalmente para sinalização e controle da sessão, o SDP descreve como a mídia será estabelecida e o RTP é normalmente responsável pelo transporte dessa mídia em tempo real.
Em uma chamada VoIP, entender a relação entre esses três elementos é fundamental para diagnosticar problemas como ausência de áudio, áudio unilateral, codec incompatível, portas bloqueadas e problemas de conectividade.

01 – RTP

RTP — Real-time Transport Protocol
Categoria: RTP / Mídia
Nível: 🟢 Básico
Tipo: Protocolo
O que é?
RTP é um protocolo utilizado para transportar dados de mídia em tempo real, principalmente áudio e vídeo, em redes IP.
Em uma chamada VoIP, o RTP normalmente transporta o conteúdo da conversa enquanto o SIP fica responsável pela sinalização da sessão.
O RTP foi especificado pelo IETF no RFC 3550. O protocolo foi projetado para aplicações de tempo real e é acompanhado pelo RTCP, utilizado para funções de controle e monitoramento.
Na prática
Quando uma chamada SIP é estabelecida, podemos ter:

SIP INVITE
↓
SDP
↓
Negociação da mídia
↓
RTP
↓
Áudio

O SIP pode indicar que a chamada foi atendida, mas isso não significa necessariamente que o RTP esteja funcionando.
Por isso uma chamada pode apresentar:

SIP funcionando + chamada estabelecida + nenhum áudio.
Exemplo
Imagine:

Telefone A
10.10.10.10:4000
│
│ RTP
▼
10.20.20.20:5000
Telefone B

Se os pacotes RTP não conseguirem chegar ao destino, a chamada pode ficar estabelecida sem áudio.

Em troubleshooting

Verifique:

IP de origem;
IP de destino;
porta UDP;
fluxo nos dois sentidos;
perda de pacotes;
codec;
NAT;
firewall;
SDP negociado.

02 – RTCP

RRTCP — RTP Control Protocol
Categoria: RTP / Controle
Nível: 🟡 Intermediário
Tipo: Protocolo
O que é?
RTCP é o protocolo de controle associado ao RTP.
Enquanto o RTP transporta a mídia, o RTCP fornece informações de controle e monitoramento relacionadas à entrega dessa mídia. O RFC 3550 define RTP e RTCP como componentes associados de uma arquitetura de transporte para aplicações de tempo real. 
Na prática
Simplificando:

RTP → transporta áudio/vídeo
RTCP → informa como está a entrega dessa mídia

O RTCP pode fornecer informações relacionadas a:

perda de pacotes;
jitter;
sequência;
sincronização;
identificação das fontes;
qualidade da recepção.
Exemplo
Durante uma chamada:

A ───────── RTP ─────────→ B
A ←──────── RTCP ───────── B

Dependendo da arquitetura, os fluxos podem utilizar portas diferentes ou podem ser multiplexados.

Atenção!!!
RTP e RTCP não são a mesma coisa.
Esse é um erro comum de quem está começando.

03 – SDP

SDP — Session Description Protocol
Categoria: SDP / Sinalização de mídia
Nível: 🟢 Básico
Tipo: Protocolo/formato de descrição
O que é?
SDP é um formato utilizado para descrever uma sessão multimídia.

Ele informa aos participantes características importantes da sessão, como:

tipo de mídia;
endereço IP;
porta;
protocolo;
codecs;
parâmetros da mídia.

O RFC 8866 é a especificação atual do SDP e substituiu o RFC 4566.
Na prática
Quando você olha um INVITE SIP, provavelmente encontrará algo como:

Content-Type: application/sdp

E dentro do corpo:

v=0
o=...
s=-
c=IN IP4 192.168.1.10
t=0 0
m=audio 49170 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000

O SIP transportou o SDP.
O SDP descreveu a mídia.
O RTP posteriormente transportará a mídia.

Pense assim:

SIP: “Vamos fazer uma chamada.”
SDP: “Posso receber áudio nesse IP, nessa porta e usando estes codecs.”
RTP: “Aqui está o áudio.”

04 – SDP Offer

Offer
Categoria: SDP
Nível: 🟡 Intermediário
O que é?
É a proposta de parâmetros de mídia apresentada por uma das partes de uma sessão.

Ela pode indicar:

mídias suportadas;
codecs;
IP;
portas;
protocolos;
atributos.
Na prática
Um INVITE pode carregar um SDP Offer:

INVITE
│
└── SDP Offer
│
├── IP
├── porta
├── áudio
├── codecs
└── atributos
Exemplo
m=audio 40000 RTP/AVP 0 8 101

Isso informa, entre outras coisas, a porta e os payload types propostos para a mídia.

05 – SDP Answer

Answer
Categoria: SDP
Nível: 🟡 Intermediário
O que é?
É a resposta à proposta SDP enviada pela outra parte.
Ela informa quais parâmetros foram aceitos, rejeitados ou modificados.
Na prática
A
│
│ SDP Offer
▼
B
│
│ SDP Answer
▼
A
Exemplo
A oferece:

PCMU
PCMA
G729

B pode responder aceitando apenas:

PCMA

A mídia será estabelecida de acordo com a negociação resultante.

06 – Offer/Answer

Offer/Answer Model
Categoria: SDP / SIP
Nível: 🟡 Intermediário
O que é?
É o modelo utilizado para negociar parâmetros de uma sessão multimídia através de uma oferta e uma resposta.
Na prática
É extremamente importante durante análise de traces SIP.

Quando houver problema de áudio, compare:

SDP Offer × SDP Answer

e depois compare isso com:

RTP real observado no trace.
Exemplo
Fluxo simplificado:

A B
│
│──── SDP OFFER ─────────>│
│
│<──── SDP ANSWER ────────│
│
│========= RTP ===========│

07 – Codec

Codec
Categoria: Áudio / RTP
Nível: 🟢 Básico
O que é?
Codec é o mecanismo utilizado para codificar e decodificar o áudio ou vídeo.
O nome vem de:
COder + DECoder
Na prática
Alguns codecs comuns em voz:

PCMU / G.711 μ-law
PCMA / G.711 A-law
G.729
G.722
Opus
iLBC
Exemplo
Se um lado suporta:

PCMA PCMU G729

e o outro:

PCMA G722

um codec em comum precisa existir para que a mídia seja estabelecida usando aquela negociação.

08 – Payload Type

PT — Payload Type
Categoria: RTP
Nível: 🟡 Intermediário
O que é?
É um campo do cabeçalho RTP utilizado para identificar o formato do conteúdo transportado.
Na prática
Quando você está analisando um trace, pode encontrar:

Payload Type: 0

e relacioná-lo ao codec correspondente.
Exemplo
m=audio 40000 RTP/AVP 0 8 101

Aqui aparecem os payload types:

0 8 101

Eles podem representar diferentes tipos de mídia ou sinalização, conforme o perfil e a negociação.

09 – RTPMAP

a=rtpmap
Categoria: SDP
Nível: 🟡 Intermediário
O que é?
É um atributo SDP utilizado para associar um payload type a informações como codec e clock rate.
Na prática
Durante troubleshooting, é importante comparar:

m=audio

com:

a=rtpmap

para entender o que está sendo negociado.
Exemplo
a=rtpmap:8 PCMA/8000

Interpretando:

8 → Payload Type PCMA → Codec 8000 → Clock rate

10 – m=audio

m=audio
Categoria: SDP
Nível: 🟢 Básico
O que é?
É uma linha SDP utilizada para descrever uma seção de mídia de áudio.
Na prática
Essa é uma das primeiras linhas que você deve procurar quando estiver investigando o SDP de uma chamada.
Exemplo
m=audio 40000 RTP/AVP 0 8 101

Podemos interpretar:

audio
↓
tipo de mídia
40000
↓
porta
RTP/AVP
↓
protocolo/perfil
0 8 101
↓
Payload Types

11 – Connection Information

c= — Connection Information
Categoria: SDP
Nível: 🟢 Básico
O que é?
Linha SDP utilizada para informar informações de conexão, incluindo o endereço IP associado à mídia.
Na prática
Se o SDP indicar um IP incorreto, inexistente ou inacessível, isso pode contribuir para problemas de mídia.

Troubleshooting

Sempre compare:

IP informado no SDP

com:

IP real observado no RTP.
Exemplo
c=IN IP4 10.10.10.20

Significa, simplificadamente:

IN → Internet
IP4 → IPv4
10.10.10.20 → endereço

12 – Porta RTP

RTP Port
Categoria: RTP / UDP
Nível: 🟢 Básico
O que é?
É a porta UDP utilizada para transportar o fluxo RTP.
Na prática
Você pode encontrar:

10.10.10.1:40000 ↓ 10.10.10.2:50000

Se o firewall bloquear uma dessas portas, o SIP pode funcionar enquanto a mídia falha.
Exemplo
SDP:

m=audio 40000 RTP/AVP 0

Nesse exemplo:

porta RTP = 40000

13 – SSRC

SSRC — Synchronization Source
Categoria: RTP
Nível: 🔴 Avançado
O que é?
É um identificador utilizado dentro do RTP para identificar uma fonte de sincronização.
Na prática
Ao analisar uma captura, diferentes fluxos RTP podem ser diferenciados por seus SSRCs.

Exemplo

SSRC: 0x4A83F921

Esse valor ajuda ferramentas de análise a acompanhar determinado fluxo RTP.

14 – Sequence Number

Sequence Number
Categoria: RTP
Nível: 🟡 Intermediário
O que é?
É o número de sequência presente no cabeçalho RTP.
Ele permite identificar a ordem dos pacotes.
Na prática
Em uma captura Wireshark, a análise dos sequence numbers ajuda a identificar:

perda;
reordenação;
interrupções;
problemas de transporte.
Exemplo
1001
1002
1003
1005

O pacote:

1004

aparentemente não chegou.
Isso pode ser um indicativo de packet loss.

15 – Timestamp

Timestamp RTP
Categoria: RTP
Nível: 🟡 Intermediário
O que é?
É uma informação temporal presente no cabeçalho RTP utilizada para relacionar os dados transportados à sua posição no tempo.
Na prática
É importante para que o receptor consiga processar corretamente mídia em tempo real.

Não confundir

Timestamp ≠ Sequence Number

Sequence Number → identifica ordem dos pacotes
Timestamp → representa posição temporal da mídia

16 – Jitter

Jitter
Categoria: RTP / QoS
Nível: 🟢 Básico
O que é?
É a variação no tempo de chegada dos pacotes.

Imagine:

Pacote 1 → 20 ms
Pacote 2 → 20 ms
Pacote 3 → 21 ms
Pacote 4 → 80 ms
Pacote 5 → 20 ms

A variação pode afetar a reprodução da mídia.
Na prática
Jitter elevado pode contribuir para:

áudio entrecortado;
falhas;
atraso;
necessidade de buffering;
degradação da qualidade.

17 – Packet Loss

Packet Loss
Categoria: RTP / QoS
Nível: 🟢 Básico
O que é?
É a perda de pacotes durante o transporte.
Na prática
Pode provocar:

áudio cortado;
voz robótica;
falhas;
palavras incompletas;
degradação do MOS.
Exemplo
Enviado:
1 2 3 4 5 6 7 8 9 10

Recebido:
1 2 3 5 6 8 9 10

Pacotes:

4 e 7

foram perdidos.

18 – One-Way Audio

One-Way Audio
Categoria: Voz / RTP
Nível: 🟢 Básico
O que é?
É uma situação em que o áudio funciona em apenas uma direção.
Na prática
Causas possíveis:

firewall;
NAT;
ACL;
rota;
IP incorreto no SDP;
porta UDP bloqueada;
SBC;
media gateway;
assimetria de rede.

Procedimento

Compare:

SDP A
↓
IP/porta
↓
RTP real
SDP B
↓
IP/porta
↓
RTP real
Exemplo
A ─────── RTP ───────> B
A <────── X ────────── B

A escuta B.
B não escuta A.

19 – No Audio

No Audio
Categoria: Voz / RTP
Nível: 🟢 Básico
O que é?
É a ausência de áudio durante uma chamada que aparentemente foi estabelecida.
Na prática
Primeiras verificações:

SDP;
IP;
porta;
codec;
RTP;
firewall;
NAT;
SBC.
Exemplo
Fluxo típico

INVITE ✓
100 Trying ✓
180 Ringing ✓
200 OK ✓
ACK ✓
RTP ✗

Aqui temos uma situação clássica:

Sinalização funcionando, mídia não funcionando.

20 – RTCP-MUX

RTCP-MUX
Categoria: RTP / RTCP / SDP
Nível: 🔴 Avançado
O que é?
É a multiplexação de RTP e RTCP na mesma porta UDP.
Tradicionalmente, RTP e RTCP poderiam utilizar portas separadas. O RFC 5761 especifica como RTP e RTCP podem compartilhar uma única porta e como isso pode ser sinalizado no SDP utilizando a=rtcp-mux. 
Na prática
Isso é muito importante em análise de traces modernos e em ambientes que precisam simplificar NAT traversal e regras de firewall.
Exemplo
Sem multiplexação:

RTP → UDP 40000
RTCP → UDP 40001

Com rtcp-mux:

RTP ─┐
├── UDP
40000
RTCP ─┘

No SDP

a=rtcp-mux

21 – SRTP

SRTP — Secure Real-time Transport Protocol
Categoria: Segurança / RTP
Nível: 🔴 Avançado
O que é?
É um perfil seguro do RTP que fornece mecanismos de proteção para o tráfego RTP e também para o RTCP.

Entre as propriedades previstas estão:

confidencialidade;
autenticação/integridade;
proteção contra replay.

Essas características estão especificadas no RFC 3711. 
Na prática
Em vez de:

RTP
↓
Áudio

temos:

SRTP
↓
Áudio protegido

22 – RTCP SR

SR — Sender Report
Categoria: RTCP
Nível: 🔴 Avançado
O que é?
É um tipo de pacote RTCP utilizado por fontes que estão enviando mídia.
Ele transporta informações relacionadas à transmissão e sincronização da sessão.
Na prática
É utilizado em conjunto com outros mecanismos RTCP para fornecer informações sobre o fluxo RTP.

23 – RTCP RR

RR — Receiver Report
Categoria: RTCP
Nível: 🔴 Avançado
O que é?
É um tipo de relatório RTCP enviado por receptores para fornecer informações sobre a recepção do fluxo RTP.

Pode ajudar a analisar:

perda;
jitter;
sequência;
qualidade da recepção.

24 – Media Stream

Media Stream
Categoria: RTP
Nível: 🟢 Básico
O que é?
É o fluxo de mídia entre dois ou mais participantes de uma sessão.

Em uma chamada de voz:

Áudio A → RTP → B
Áudio B → RTP → A
Na prática
É comum termos dois fluxos RTP:

RTP A → B RTP B → A

Por isso uma chamada pode apresentar áudio em uma direção e ausência na outra.

25 – DTMF sobre RTP

DTMF Events
Categoria: RTP / Telefonia
Nível: 🟡 Intermediário
O que é?
É o transporte de eventos DTMF através do RTP.
Um método muito comum é o uso de eventos RTP associados ao payload type negociado no SDP.
Na prática
É utilizado quando o usuário pressiona:

1
2
3
#
*

durante uma chamada.

É muito importante em:

URA;
atendimento eletrônico;
call center;
serviços bancários;
consulta de saldo;
menus telefônicos.
Exemplo
a=rtpmap:101 telephone-event/8000

Isso indica que o payload type 101 está associado a eventos telephone-event.

26 – Clock Rate

Clock Rate
Categoria: RTP / Codec
Nível: 🟡 Intermediário
O que é?
É a frequência de amostragem associada à mídia/codec, expressa em Hz.
Na prática
Você encontrará frequentemente:

8000 Hz
16000 Hz
48000 Hz

dependendo do codec e da aplicação.
Exemplo
PCMA/8000

Temos:

PCMA
↓
codec

8000
↓
clock rate

27 – Media Type

Media Type
Categoria: SDP
Nível: 🟢 Básico
O que é?
É a identificação do tipo de mídia descrita no SDP.

Os exemplos mais comuns incluem:

audio
video
application
Exemplo
m=audio

indica uma seção de áudio.

m=video

indica uma seção de vídeo.

28 – RTP Profile

RTP Profile
Categoria: RTP
Nível: 🔴 Avançado
O que é?
É um conjunto de regras e convenções que define como o RTP será utilizado para determinada aplicação.

Um exemplo conhecido é:

RTP/AVP
Na prática
Você pode encontrar no SDP:

m=audio 40000 RTP/AVP 0 8 101

O perfil aparece como parte da descrição da mídia.

29 – a=rtcp

a=rtcp
Categoria: SDP / RTCP
Nível: 🔴 Avançado
O que é?
É um atributo SDP utilizado para sinalizar informações relacionadas à porta utilizada para RTCP quando RTP e RTCP não estão multiplexados.
Exemplo
a=rtcp:40001

Indica uma porta RTCP específica.

Atenção

Não confundir:

a=rtcp

com:

a=rtcp-mux

O segundo indica a utilização da mesma porta para RTP e RTCP quando negociado conforme as regras aplicáveis. 
Rolar para cima