SMU29009: Transporte de midia e codecs

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar


Nas aulas sobre sinalização SIP, a descrição de midia em uma chamada indica o protocolo a ser usado para o transporte de midia. Tanto em aplicações baseadas em SIP quanto outros tipos de sinalização (ex: RTSP), a escolha usual recai no protocolo RTP. Na aula de hoje apresenta-se esse protocolo e suas características essenciais.

O transporte de midia com protocolo RTP


O protocolo RTP (Real-Time Protocol) foi desenvolvido para possibilitar o transporte de datagramas de tempo-real contendo voz, video, ou outro tipo de dados, sobre IP. Tanto H.323 quanto o modelo SIP usam RTP para o transporte de media, tornando-o o padrão mais comum para comunicações desse tipo na Internet. Apesar desse protocolo não prover qualidade de serviço (i.e. ele não possui mecanismos para atender tais tipos de requisitos), ele torna possível a detecção de alguns dos problemas introduzidos por uma rede IP, tais como:

  • Perda de pacotes
  • Atraso fim-a-fim variável
  • Chegada de pacotes fora de ordem


Esses problemas não são novidade ... nós já os discutimos nas aulas sobre transmissão de dados multimidia. O que há de novo é um protocolo que dá subsídios para as técnicas que buscam atender requisitos de qualidade de serviço. Esses subsídios são informações providas pelo RTP para ajudar a identificar os problemas citados acima, as quais são:

  • Identificação do tipo do conteúdo que está sendo carregado (codec): isso informa ao receptor como ele deve decodificar o conteúdo transportado (ver esta tabela de identificadores de codec usados pelo RTP)
  • Numeração de sequência: essa informação possibilita identificar pacotes perdidos ou fora de ordem.
  • Marcação de tempo (timestamp): com isso é possível efetuar o cálculo de variação de atraso e implementar algum mecanismo de sincronização com a fonte (ex: atraso de reprodução).


Essas informações fazem parte da PDU RTP, como se pode ver a seguir:

Localização do RTP na camada de transporte Cabeçalho RTP
Rtp1.png Rtp-header.png

RTCP

Além do RTP, o protocolo auxiliar RTCP (Real-Time Control Protocol, também definido na RFC 3550) foi definido para o monitoramento da entrega dos pacotes (recepção da stream). Com esse protocolo, os participantes de uma sessão de media podem fazer o intercâmbio de relatórios e estatísticas. Cada tipo de relatório é transportado por um tipo de pacote RTCP. O uso de relatórios possibilita o feedback sobre a qualidade da comunicação, incluindo informações como:

  • Número de pacotes enviados e recebidos
  • Número de pacotes perdidos
  • Jitter (variação de atraso)

Os cinco tipos de relatórios são:

  • Relatório do transmissor (Sender Report - SR)
  • Relatório do receptor (Receiver Report - RR)
  • Descrição da fonte (Source Description - SDES)
  • Bye
  • Específico da aplicação (Application Specific - APP)

Como o tráfego RTCP é puramente overhead, o protocolo foi projetado para que seu consumo da capacidade da rede seja constante, não importa quantos participantes da sessão de media existam. A ideia é que quanto mais participantes houver, menos frequentemente os relatórios RTCP são enviados. Por exemplo, se em uma conferência houver somente dois participantes, os relatórios podem ser enviados a cada 5 segundos. Se houver quatro participantes, os relatórios são enviados a cada 10 segundos. Com isso o consumo de banda para relatórios se mantém constante e previsível.

Atividade

Essa atividade busca ilustrar os fluxos RTP com um exemplo:

  1. Carregue esta configuração de rede no Nekit2.
  2. Execute o Netkit2
  3. Baixe este arquivo e descompacte-o no mesmo diretório onde foi executado o Netkit2 ... note que esse diretório deve conter o subdiretório lab.
  4. Em pc1 e pc2 execute o pjsua:
    pjsua --config-file=pjsua.cfg
    
  5. Execute o wireshark em pc1 ou pc2, e ative a captura de datagramas UDP.
  6. Em pc1 faça uma chamada para um contato existente em pc2
  7. Analise a negociação da chamada feita com SIP. Em especial, observe a descrição de midia, inclusive os codecs.
  8. Observe os pacotes RTP capturados pelo Wireshark. Selecione alguns deles e investigue as informações contidas em seu cabeçalho. Procure identificar o codec usado e as marcações de tempo. Compare as marcações de tempo do RTP com os instantes de recepção desses pacotes.
  9. Estime o jitter durante a recepção de ao menos 15 segundos de audio.
  10. Observe os relatórios RTCP:
    • Que tipos de relatórios são enviados ?
    • Com que frequência esses relatórios são transmitidos ?
    • Que informações esses relatórios contêm ?

Codificação de audio

Técnicas usadas:

  • Taxa de amostragem e de quantização
  • Remoção de silêncio
  • Uso de psicoacústica
  • Remoção de redundância


Audio-codec.png

Diagrama de blocos da codificação MPEG-layer III (mp3)

Atividade

  1. Copie este arquivo de audio para seu computador. Escute-o e confira sua qualidade sonora. Veja também o tamanho do arquivo.
  2. Codifique esse arquivo com os seguintes codecs:
    • PCM: time mplayer -vc dummy -vo null -af format=s8,resample=8000:0:0,channels=1,volume=0 -ao #pcm:waveheader:file="musica2.wav" musica.wav
    • MP3: time lame musica.wav musica.mp3
    • Ogg: time oggenc -o musica.ogg musica.wav
    • Flac: time flac musica.wav -o musica.flac
    • Speex: time speexenc --bitrate 8 musica.wav musica.spx
  3. Toque os arquivos de audio codificados, comparando suas qualidades sonoras. Compare também os tamanhos dos arquivos.

Codificação de video