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


Técnicas usadas para compressão de video:

  • Remoção de redundância espacial - codificação intraquadros (ex: JPEG)
  • Remoção de redundância espacial e temporal - codificação intraquadros e interquadros (H.264, MPEG2)


Remoção de redundância temporal: iniciando com um intraquadro (quadro I), quadros sucessivos contém atualizações relativas a quadros anteriores (quadros P) ou a quadros anteriores e posteriores (quadros B). O conjunto de quadros entre quadros I se chama GOP (Group of Pictures):


Gop.png


Exemplos de codecs de video

  • MPEG-2
  • H-264
  • H-265
  • XVID
  • Theora

Exemplos de formatos de video usados em MPEG2 (i.e. em DVD): Mpeg2-video-formats.png

Atividade

1) Copie esta imagem para seu computador, e recorte uma parte com dimensões 128x128 pixels (use o gimp).

1.1) Qual o tamanho dessa imagem no formato BMP com 24 bpp ?

1.2) Qual o tamanho dessa imagem no formato PNG ? E no formato JPG ?

1.3) Crie uma nova imagem com dimensões 128x128 pixels e que seja toda preta, e determina seu tamanho nos formatos BMP com 24 bpp, PNG e JPG.

1.4) O que se pode concluir quanto à representação digital das imagens ?

2) Copie este arquivo compactado para seu computador, e em seguida descompacte-o. Note que ele contém um certo número de arquivos de imagem em formato JPG (experimente visualizar alguns deles).

2.1) Crie um video a partir dessas imagens. Esse video estará no formato MPJG (Motion JPG), que nada mais é que as imagens sequencializadas.

cd figs
mencoder mf://\*.jpg -fps 10 -ovc copy -o video.avi

2.2) Veja o tamanho do arquivo de video, e compare-o com o tamanho total das imagens. Em seguida, reproduza-o com vlc ou mplayer.

2.3) Recodifique o seu arquivo de video usando o codec XVID:

mencoder -o video2.avi -ovc xvid -xvidencopts bitrate=1024 -oac copy video.avi

... e observe o tamanho do arquivo de video resultante. Em seguida reproduza-o com vlc ou mplayer. Como você o compara com o video gerado no item 2.2 ?

3) Copie este video para seu computador. Visualize-o com mplayer ou vlc, observando sua qualidade de imagem. Veja também o tamanho desse arquivo de video, que está codificado com MJPG.

4) Codifique esse video para outros formatos de compressão:

  • MPEG-2: mencoder -o wsm-bonus4.mpg -of mpeg -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=250 -oac copy wsm-bonus4.avi
  • XVID: mencoder -o wsm-bonus4_xvid.avi -ovc xvid -xvidencopts bitrate=250 -oac copy wsm-bonus4.avi
  • H-264:
    mencoder -o wsm-bonus4_h264.mp4 -ovc x264 -x264encopts pass=1:turbo -oac mp3lame wsm-bonus4.avi
    mencoder -o sr-h264.mp4 -ovc x264 -x264encopts bitrate=250:pass=2 -oac mp3lame wsm-bonus4.avi
  • Theora:
    mencoder -o wsm-bonus4_theora.mp4 -of mpeg -ovc lavc -lavcopts vcodec=libtheora:vpass=1:turbo -oac mp3lame wsm-bonus4.avi
    mencoder -o sr-theora.mp4 -of mpeg -ovc lavc -lavcopts vcodec=libtheora:vpass=2 -oac mp3lame wsm-bonus4.avi

5) Compare os tamanhos dos arquivos de video resultantes das codificações. Toque-os e veja se há diferença de qualidade de imagem entre eles.

6) Um software de processamento de video disponível para Linux se chama gopchop. Abaixo segue um texto explicativo sobre esse programa:

Gopchop.png

Interprete as informações contidas no texto acima, e experimente usar o gopchop.