Mudanças entre as edições de "RMU-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 596: Linha 596:
  
  
'''VoIP:''' transmissão de voz usando protocolos da arquitetura TCP/IP, com o objetivo de estabelecer chamadas semelhantes a chamadas telefônicas. Alguns exemplos de aplicações ou padrões VoIP são:
+
'''VoIP:''' transmissão de voz usando protocolos da arquitetura TCP/IP, com o objetivo de estabelecer chamadas semelhantes a chamadas telefônicas. Alguns exemplos de tecnologias VoIP são:
 
* [http://tele.sj.ifsc.edu.br/~msobral/rmu/voip/cucs-039-04.pdf Skype] (mais material [http://www.cs.columbia.edu/~salman/skype/ aqui])
 
* [http://tele.sj.ifsc.edu.br/~msobral/rmu/voip/cucs-039-04.pdf Skype] (mais material [http://www.cs.columbia.edu/~salman/skype/ aqui])
 
* [http://www.viber.com Viber]
 
* [http://www.viber.com Viber]

Edição das 10h24min de 11 de março de 2015

Redes Multimidia: Diário de Aula 2015-1

Professor: Marcelo Maia Sobral
Grupo (Facebook): RMU - IFSC
Encontros: 3a feira/7:30, 4a feira/9:40
Atendimento paralelo: 4a feira 13:30-14:30

Bibliografia

  • Livros sobre Redes de Computadores (por ordem de preferência):
    • KUROSE, James F. e ROSS, Keith W. Redes de computadores e a Internet, Uma abordagem Top-Down. 5a edição. Editora Addison Wesley SP, 2010.
    • Sérgio Colcher, Antônio Tadeu Azevedo Gomes, e Anderson Oliveira da Silva. VoIP: Voz sobre IP. Campus, 1a edição, 2005.
    • STALLINGS, W. Redes e sistemas de comunicação de dados. Editora Elsevier RJ, 2005.
    • TANENBAUM, Andrew S. Redes de Computadores, tradução da quarta edição. Editora Campus RJ, 2003
    • FOROUZAN, Behrouz. Comunicação de Dados e Redes de Computadores, 3a/4a edicão. Editora Bookman, 2004.

Curiosidades

Listas de exercícios

Avaliações

Obs: D* = não fez a avaliação.

Softwares

04/02: Apresentação

Apresentação da disciplina: conteúdo, bibliografia e avaliação, laboratório.

Redes multimidia

Uso de redes de dados para transmitir conteúdo de diferentes midias:

Mmn example2.png Mmn-intro.png
Videophone.jpg CaseStudy RealTimeTelemedicine Network Image.jpeg


Algumas questões sobre essas aplicações:

  1. Como funcionam esses serviços ? Como os conteúdos são acessados ?
  2. Como os dados são representados ?
  3. Como os dados são transportados através da rede ? Quais os protocolos envolvidos e como os dados são encapsulados em suas PDUs ?
  4. Que requisitos quanto à transmissão pela rede possuem para um bom funcionamento ?

Atividade: compartilhando video pela rede

A turma deve conceber uma forma de distribuir video usando a rede, que possibilite a reprodução de video tanto por computadores quanto dispositivos móveis (smartphones e tablets). Esse serviço precisa ter sua arquitetura devidamente descrita, para que fique claro:

  • como os videos são armazenados
  • como os videos são acessados e transmitidos
  • que requisitos os usuário do serviço devem cumprir para utilizá-lo
  • qual a infraestrutura física necessária

Exemplo 1: video streaming

Video streaming é a transmissão de video por uma rede de dados, com sua visualização ocorrendo à medida que for sendo recebido pelo cliente. Um exemplo muito conhecido de serviço de video streaming é fornecido pelo YouTube. Outros exemplos de video streaming são Netflix, que possibilita assistir filmes via Internet mediante o pagamento de uma assinatura, e a transmissão de jogos de futebol via Internet por algumas emissoras de TV aberta. Apesar de a experiência dos usuários parecer a mesma (ou quase ...) para esses serviços, existem diferenças na forma como são implementados.


Experimente visualizar os videos abaixo. Em todos eles observe quanto tempo demora para iniciar a tocar o video e sua continuidade (se ele interrompe ou degrada a imagem). Experimente também avançar o video, como por exemplo para perto de seu final.

Como é feito o acesso a esses videos, e como eles são transportados pela rede ?

  • Execute o wireshark e repita o acesso aos videos. Enquanto a captura acontece, faça um reposicionamento do video - i.e. avance-o para perto de seu final. Observe as mensagens trocadas entre sua aplicação cliente e o servidor do video.
  • Você conseguiria descrever como funcionam seus acessos e transmissões ?
  • Você pode notar alguma diferença entre as diferentes formas de transmissão do video ?

Exemplo 2: Internet radio

Atualmente muitas estações de rádio transmitem suas programações também pela Internet. Existem inclusive muitas estações cujas transmissões são feitas somente pela rede - i.e. a rigor, não fazem transmissão por rádio. Com isso, pessoas conseguem escutar a programação de uma estação de rádio de outro país. Um atrativo dessas estações via Internet é informarem o gênero de música transmitida, além de apresentarem uma boa qualidade sonora. Esse tipo de serviço se popularizou tanto que existem diretórios de estações, que podem ser acessados por aplicativos e assim possibilitar que os usuários escolham que tipo de música desejam escutar.

Um aplicativo do Linux que oferece fácil acesso a Internet radio é o Rhytmbox. Ele pode ser executado no menu Aplicativos->Som e video. Execute o Rhytmbox em seu computador, e escolha uma estação de radio. Observe quanto tempo demora para que a música comece a tocar, a qualidade do som, e sua continuidade.

Como é feito o acesso às estações de rádio, e como as músicas são transportadas pela rede ?

  • Execute o wireshark e repita o acesso à estação. Enquanto a captura acontece, observe os protocolos envolvidos e as mensagens que fluem entre seu computador e o servidor da estação. Observe também onde a estação se localiza (país/cidade).
  • Você conseguiria descrever como funcionam seus acessos e transmissões ?

TAREFA: leitura da semana

Leiam os seguintes artigos:

... sintetizem suas ideias e comparem-nas com a situação da Internet brasileira. Preparem-se para apresentar suas conclusões na próxima aula (09/02). A apresentação deverá durar de 5 a 10 minutos e deve ser composta de:

  • Um resumo sobre os conceitos-chaves contidos no texto
  • Alguns slides (não mais que 5) para auxiliar a explicação desses conceitos chaves.
    • Não carregue os slides de texto ! Priorize o uso de figuras, diagramas e frases curtas para enunciar cada ideia apresentada.

Durante a apresentação qualquer aluno ou o professor poderão fazer apartes. Em particular, o professor pode pedir a outro aluno para explicar o que entendeu sobre determinada informação apresentada.

Um aluno será sorteado para fazer sua apresentação. Caso não a tenha preparado, receberá um conceito negativo que influenciará seu conceito final (isso vale também para alunos sorteados que tiverem faltado). O sorteio será realizado até que um aluno faça a apresentação.

10/02: Apresentação do Projeto 1


O projeto 1 trata da implantação e demonstração de um sistema de compartilhamento de video semelhante ao Youtube (conhecido como CMS - Content Management System). Tal serviço deve possibilitar:

  • A visualização de videos via web
    • Os videos podem estar armazenados ou serem ao vivo (ex: fornecidos por uma câmera IP)
  • A publicação de videos por usuários cadastrados
  • A reprodução de músicas via web (opcional)
  • A publicação de músicas por usuários cadastrados (opcional)


A implantação do serviço deve ser feita em um servidor do câmpus. Há um servidor disponibilizado para cada equipe. Pode ser usado qualquer software para CMS, ficando ao gosto de cada equipe. Algumas opções são:


Estes outros não são CMS baseados em web, porém demonstram outras formas (e tecnologias) para compartilhamento e streaming:


Cada equipe (até dois alunos) devem usar um servidor dedicado na rede do Ifsc-SJ para desenvolver seu projeto, conforme a tabela a seguir:

Equipe Alunos Servidor URL
Equipe 1 Diogo,Anderson equipe1.rmu.sj.ifsc.edu.br http://equipe1.rmu.sj.ifsc.edu.br/
Equipe 2 Nathan, Raphael equipe2.rmu.sj.ifsc.edu.br http://equipe2.rmu.sj.ifsc.edu.br/
Equipe 3 Vinicius K. e Vinicius H. equipe3.rmu.sj.ifsc.edu.br http://equipe3.rmu.sj.ifsc.edu.br/


Produto a entregar: até 10/03

  • Cada equipe deve demonstrar o funcionamento do seu servidor de video. Isso inclui fornecer uma conta ao professor para ele publicar videos de teste.
  • Deve ser entregue um relatório descrevendo:
    • Como instalar o serviço de video.
    • Os requisitos (outros softwares) para que o serviço seja instalado.
    • Os formatos de video suportados (codecs e containers) tanto para importação quanto reprodução
    • Uma breve descrição de como funciona a transmissão do video: protocolos usados, tipo de reprodutor de video, funcionalidades suportadas (avançar, retroceder, pausa, seleção de qualidade de video, videos online ou armazenados, ...).

Atividade

Usando a máquina virtual de RMU, investigue os softwares sugeridos e escolha um deles para sua implantação.

11/02: Início do projeto 1; transmissão de video

Existem diversos mecanismos de transmissão de video por uma rede de computadores. Para conhecer alguns deles, pesquise como videos são transmitidos por estes sistemas:

O resultado dessa pesquisa deve ser usado para construir a seguinte tabela:

Mecanismo Protocolos de aplicação Protocolos de transporte Multicast Qualidade adaptativa Formatos de video Reprodutor de video Software/sistema servidor
Flash video HTTP TCP Não ?? ?? Flash player servidor web
HTML5 HTTP TCP Não ?? ?? Navegador (Chrome, Firefox, ...) servidor web
P2P (torrent) BitTorrent* TCP/UDP Não Não ?? Popocorn Time (Javascript/NodeJS) Popocorn Time (Javascript/NodeJS)
DASH HTTP TCP Não Sim ?? Reprodutores específicos (ex: dash.js, VLC) ??
HTLS HTTP TCP Não Sim ?? ?? Quicktime server
RTSP/RTP RTSP/RTP TCP/UDP Sim Sim ?? VLC e outros live555mediaServer, DarwinStreaming Server, ...

Formatos de video

Videos digitais podem ser representados em diferentes formatos. Isso é uma combinação da codificação de video (codec) e a forma com que o video é armazenado (container). Basicamente um codec define como a sequência de quadros de um video é representada digitalmente, e o container define como os bits de um video codificado são encapsulados de forma conveniente, seja em um arquivo ou mesmo on-the-fly. Para investigar alguns tipos de container e codecs existentes, analise os seguintes videos:

Video Container Características de armazenamento Codec Características de codificação
Video 1 m4v H.264 480x272, 24bpp, 25fps,648.8 kbps
Video 2 mpg mpeg2 720x480,29.97fps, 4509.7 kbps
Video 3 avi mjpg 720x480 24bpp 29.970 4509.7 kbps
Video 4 avi xvid 384x288 12bpp 25.000 fps 587.5 kbps
Video 5 mkv H.264 320x240,25.000 fps
Video 6 mkv mpeg2 384x286 0bpp 25.000 fps 104857.2 kbps
Video 7 asf wmv3 320x240 24bpp 1000.000 fps 372.7 kbps
Video 8 mov(quicktime) mp4v 640x480 32bpp 10.000 fps 261.8 kbps


Estes textos explicam o que contém cada container, e quais suas estruturas de armazenamento:


Já a codificação de video é muito mais complexa ...

24/02: Compressão de video

Fomos assistir as apresentações de TCC.

25/02: Compressão de video

Técnicas usadas para compressão de video:

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


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
  • 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.

3.1) Codifique-o para outros formatos de compressão:

  • MPEG-2: mencoder -o turning-mpg2.mpg -of mpeg -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=250 -nosound tunrning_pages.avi
  • XVID: mencoder -o turning-xvid.avi -ovc xvid -xvidencopts bitrate=250 -nosound tunrning_pages.avi
  • H-264:
    mencoder -o turning1.mp4 -ovc x264 -x264encopts pass=1:turbo -nosound tunrning_pages.avi
    mencoder -o turning-h264.mp4 -ovc x264 -x264encopts bitrate=250:pass=2 -nosound tunrning_pages.avi

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

  • MPEG-2: mencoder -o wsm-bonus4_mpg2.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.mp4 -ovc x264 -x264encopts pass=1:turbo -oac mp3lame wsm-bonus4.avi
    mencoder -o wsm-bonus4_h264.mp4 -ovc x264 -x264encopts bitrate=250:pass=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.

03/03: Caracterização de midias

Compressão de audio

Técnicas usadas:

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


Exemplo de codificação:

Audio-codec.png


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.

Transmissão de dados multimidia

A transmissão de dados multimidia está sujeita a alguns fatores, destacando-se:

  • Banda disponível: cada tipo de transmissão demanda uma certa banda mínima (ver o exemplo dos videos gerados na aula anterior, que demandam em torno de 250 kbps). A banda requerida depende do codec, podendo mesmo ser variável (ver figura abaixo). Se a banda disponível na rede não for suficiente, a reprodução dos dados transmitidos não será possível (quer dizer, a reprodução contínua simultânea ao recebimento dos dados).
    Rt-transmission.png
  • Atrasos fim-a-fim: alguns tipos de transmissão são mais sensíveis a atrasos fim-a-fim, como por exemplo conversações VoIP, porém todas transmissões de dados multimidia apresentam pouca tolerância a variações de atraso. A variação de atraso excessiva causa a perda de sincronismo entre a transmissão e a recepção, impedindo a reprodução contínua dos dados recebidos.

Componentes do atraso fim-a-fim

O atraso fim-a-fim, contado portanto desde a origem de um pacote até seu destino, se compõe de um conjunto de tempos despendidos ao longo de sua transmissão. Alguns desses tempos são constantes, porém outros são variáveis.

Atraso Descrição Tipo Expressão
(F: tamanho de um pacote em bytes,
B: taxa de bits do link)
Transmissão Tempo entre o início da saída do 1o bit até a saída do último bit de um pacote pela interface de rede. Depende basicamente da taxa de bits do link onde se dá a transmissão. Variável (depende do tamanho do pacote)
Propagação Tempo entre a saída do 1o bit de um pacote da interface de rede do equipamento transmissor, e sua chegada na interface de rede do equipamento receptor. Depende basicamente da latência do meio de transmissão. Constante
Processamento Tempo entre a recepção de um pacote e a ação a ser feita sobre ele dentro de um equipamento de rede (seja encaminhá-lo por outro link, ou entregá-lo a uma aplicação que o consumirá) Usualmente desprezível
Enfileiramento Tempo de espera de um pacote na fila de saída de uma interface de rede por onde deve ser transmitido. Depende de quantos pacotes (e quantos bytes) estão na sua frente nessa fila. Variável


No exemplo abaixo, os links LAN (link1, link2, link7 e link8) possuem taxa de 1 Gbps, e os links WAN (demais links) possuem taxa de 10 Mbps. As filas dos roteadores podem conter até 100 pacotes de 1500 bytes (tamanho máximo de pacote). Os links WAN possuem latência de 2 ms (a dos links LAN é desprezível). Sendo assim, calcular o atraso mínimo e máximo que cada pacote pode sofrer entre sua saída do servidor de video e sua chegada no reprodutor. Os pacotes de vídeo têm tamanho de 1500 bytes:

Componentes-atraso.png

Atrasos de transmissão nos links WAN:
Atrasos de transmissão nos links LAN:
Atraso de enfileiramento em roteador: melhor caso
(fila vazia)
Atraso de enfileiramento em roteador: pior caso
(fila cheia):

O menor atraso pode ser calculado assim:


... e o maior atraso possível é:

Com isso, uma transmissão de video nessa rede está sujeita a atrasos máximo de cerca de 492 ms por pacote, e variação de atraso de até . Note-se que, nessa rede, a variação de atraso se deve essencialmente a atrasos de enfileiramento nos roteadores. Em outras redes pode haver fatores adicionais para variações de atraso: perdas de pacotes por erros de transmissão ou congestionamento, priorização de pacotes, e até o controle de congestionamento TCP (se esse protocolo for usado para a transmissão).

O exemplo acima diz respeito a uma pequena rede com bons links WAN e pequeno número de saltos (roteadores intermediários) entre origem e destino. Em um cenário mais realista, como um usuário doméstico acessando videos no Youtube, a situação pode ser bem pior. Para fins de comparação, da rede da escola até o Youtube foram contados 9 saltos, e de casa se contaram 8 saltos (o caso do Youtube é um pouco mais complicado, pois sua infraestrutura é baseada em um tipo de CDN).

Se cada pacote está sujeito a um atraso variável, o reprodutor de video no receptor precisa de algum mecanismo para compensar essas variações e apresentar o video de forma contínua. O mesmo raciocínio vale para transmissões de audio.

04/03: Estratégias para tratar a variação de atraso

Mecanismos para compensar atraso e variação de atraso da rede:

  • Numerar cada mensagem com um número de sequência.
  • Registrar o instante em que cada mensagem foi gerada (i.e. registrar seu timestamp).
  • Atrasar a reprodução do conteúdo no receptor, para compensar variações de atraso.

Rt-traffic.png
Atrasos devido a transmissão


Esses mecanismos são combinados nas seguintes estratégias para compensar variação de atraso:


Atraso de reprodução fixo

Compensa atrasos de mensagens com a imposição de um atraso fixo q no reprodutor de midia. Mensagens recebidas após seu instante de reprodução (i.e. chegam após timestamp + q) são descartados.


Atraso-de-reproducao-fixo.png
Atraso de reprodução: midia será tocada somente no instante , sendo que . O atraso q corresponde ao atraso de reprodução imposto do lado do cliente, para compensar variações de atraso das mensagens.


Por exemplo, uma sequência de mensagens pode ser reproduzida da seguinte forma se for imposto um atraso fixo:

Atraso-de-reproducao-fixo2.png

Atraso de reprodução adaptativo

Procura minimizar o atraso de reprodução, estimando o atraso da rede e sua variação. O atraso de reprodução assim calculado é imposto no receptor antes de cada rajada de mensagens (isso faz mais sentido em transmissão de voz).


Por exemplo, uma sequência de mensagens pode ser reproduzida da seguinte forma se for imposto um atraso adaptativo:

Atraso-de-reproducao-adaptativo-1.png


Se uma determinada mensagem se atrasar além do tolerável, será descartada (não reproduzida):

Atraso-de-reproducao-adaptativo-2.png

Exercícios

Atividade: atraso de reprodução

Podemos experimentar o efeito do buffer de reprodução modificando seu tamanho em um reprodutor de video:

  1. Visualize um video usando o mplayer:
    mplayer -cache 200 -framedrop http://tele.sj.ifsc.edu.br/~msobral/rmu/videos/video.avi
    
  2. Experimente variar o tamanho do buffer por meio da opção -cache. Experimento inclusive remover o buffer (use a opção -nocache).


Quais devem ser o atraso e variação de atraso do streaming de video que fizemos na aula de 04/02 ? Poderíamos estimar essas características de transmissão para o video que estava em um servidor dentro do IF-SC São José, e para aquele outro que estava em um computador fora do câmpus.

  1. Qual deveria ser o atraso de reprodução mínimo, em cada caso, para que o video pudesse ser reproduzido sem perdas ?
  2. Qual seria o valor desse atraso mínimo, se fosse calculado segundo o procedimento para determinar o atraso de reprodução adaptativo ?

Obs: a medição dos atrasos de pacotes pode ser feita com wireshark ou tcpdump. Este pequeno programa auxilia esta tarefa.

Estratégias para abrandar a perda de mensagens

Reprodução de mensagens perdidas inadequada para aplicações interativas

  • Mensagens que realmente não chegaram
  • Mensagens que chegaram após instante de reprodução


Técnicas para abrandar a perda de mensagens e preservar uma boa (?!) qualidade de áudio

  • Correção antecipada de erros (FEC - Forward Error Correction)
  • Intercalação

Correção antecipada de erros

Emissor envia dados redundantes em suas mensagens, também conhecidos como um código de correção de erro.

Exemplo 1: envio de uma mensagem redundante para cada grupo de n mensagens. A mensagem redundante é calculada fazendo XOR das demais mensagens do grupo.

  • Tolera a perda de 1 mensagem
  • Aumento de banda de 1/n

Rmu-fec.png
Uso de mensagem redundante com XOR


Exemplo 2: envio de fluxos redundantes de diferentes qualidades.

  • Pode-se enviar um fluxo de qualidade inferior junto com o fluxo principal.

Intercalação

Consiste no resequenciamento das unidades de áudio antes de transmiti-las, de forma que unidades que estavam originalmente próximas sejam separadas por uma certa distância no fluxo a ser transmitido.

No exemplo abaixo, cada unidade de áudio tem 5 ms, e cada mensagem contém quatro unidades (totalizando 20 ms).


Rmu-intercalacao.png

Atividade

Pesquise sobre o uso de técnicas de abrandamento de perdas de mensagens em diferentes tipos de transmissão de midia: VoIP, video, radio on-line, ...

TAREFA: pesquisa sobre modelos e mecanismos de distribuição de midia

Faça uma breve pesquisa sobre sistemas de distribuição de conteúdo multimidia na Internet (ex: CDN, P2P, ...), apresentando suas características e exemplos de sistemas que os implementem. Em seguida, pesquise também sobre ao menos dois mecanismos de distribuição de midia, que pode estar armazenada ou ser ao vivo. Explique como os dados são codificados, que protocolos são usados e que mensagens são trocadas para que o acesso a midia se realize. Inclua diagramas para ajudar a explicar seu funcionamento, e forneça exemplos de sua aplicação.

Algumas sugestões de mecanismos:

  • HTTP Live streaming
  • HTTP Pseudo-streaming
  • HTTP Dynamic-streaming
  • RTSP streaming
  • P2P streaming
  • ... outros ?
  • Prazo de entrega da pesquisa por email: 09/03.
  • Na aula de 10/03 os resultados das pesquisas serão discutidos em aula.

Lista de exercícios

Os exercícios do capítulo 7 do livro "Redes de Computadores e a Internet, 5a edição", do Kurose, devem ser resolvidos:

  • Exercicios de fixação: 1, 2, 4, 5, 6, 7, 9, 10, 11, 12
  • Problemas: 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19


10/03: Projeto 1: conclusão

Aula utilizada para que as equipes trabalhassem no projeto 1.

11/03: Projeto 2: um serviço de videophone usando a rede de computadores

Um serviço de videophone possibilita realizar chamadas com audio e video sincronizados. Tal serviço pode ser implantado para utilizar uma rede computadores (ver figura abaixo), se apresentando como uma aplicação para redes multimidia. Existem vários aparelhos telefônicos e softphones capazes de realizar chamadas desse tipo. A infraestrutura necessária para implantar tal serviço também já existe, bastando integrar alguns componentes da rede. No entanto, tal integração ainda demanda um certo esforço e conhecimento.

Rmu-Videophone1.gif


O projeto 2 propõe a implantação de um serviço de videophone, o qual deve atender estes requisitos:

  • Possibilitar a realização de chamadas com video e audio sincronizados.
  • Possibilitar a realização de múltiplas chamadas simultâneas.
  • Realizar chamadas independente da localização dos usuários (ex: dentro ou fora do IFSC, em casa com link ADSL, usuário móvel com link 3G ou 4G, ...)
  • Realizar alguma forma de autenticação forte dos usuários do serviço.
  • Encriptar as comunicações realizadas (sinalização, audio e video).
  • Atender necessidades de qualidade de serviço das chamadas.

O desenvolvimento deste projeto envolve o conhecimento de muitas tecnologias, técnicas e softwares.


A realização do projeto deve ser em equipes de até três alunos.

Tarefa 1: definição da arquitetura do sistema

No início de um projeto, devem-se esclarecer seus objetivos, seus requisitos funcionais e não-funcionais, e suas restrições. Essa especificação não precisa ser completa, pois nem sempre há um total domínio dos conhecimentos e necessidades envolvidos no projeto. Alguns requisitos mais gerais foram apresentados na introdução, os quais podem ser refinados. De forma geral, os requisitos e restrições podem ser entendidos desta forma:

  • Funcionais: o que o sistema deve ser capaz de fazer ?
  • Não-funcionais: o que o sistema deve ser ? Que propriedades ele deve possuir ?
  • Restrições: sob quais condições o sistema deve funcionar ? o que obrigatoriamente deve ser usado, ou não pode ser utilizado ?

Havendo uma visão razoavelmente clara sobre essas questões, pode-se conceber uma arquitetura do sistema. Essa arquitetura apresenta o sistema compostos por um certo número de blocos funcionais, os quais se relacionam de alguma maneira. A arquitetura do sistema é assim apresentada como um diagrama de blocos.

Sendo assim, faça o seguinte:

  1. Refine os requisitos e restrições do sistema
  2. Esboce uma arquitetura do sistema, identificando seus blocos funcionais

Introdução a Voz sobre IP (VoIP)


VoIP: transmissão de voz usando protocolos da arquitetura TCP/IP, com o objetivo de estabelecer chamadas semelhantes a chamadas telefônicas. Alguns exemplos de tecnologias VoIP são:

Fone-call.png

Uma chamada VoIP entre dois telefones IP é feita através da rede de dados.


A realização de chamadas VoIP implica a necessidade de alguns mecanismos:

  • Sinalização: deve haver alguma forma de um usuário iniciar uma chamada para outro usuário, de forma parecida com uma chamada telefônica convencional. A sinalização é responsável por possibilitar que um usuário convide outro para o estabelecimento de uma chamada, e para notificar sobre sua aceitação ou não. Além disso, a sinalização deve participar da definição sobre as características da chamada, tais como o codec de áudio.
  • Transmissão de midia: a voz precisa ser digitalizada com algum codec então transmitida entre os participantes da chamada. O transporte da voz digitalizada implica o uso protocolos capazes de encapsulá-la e de atender ou dar subsídios ao atendimento de seus requisitos de qualidade de serviço (atrasos fim-a-fim e variação de atraso, taxa de perdas).

Em RMU será estudado o modelo SIP para VoIP, o qual se compõe de um conjunto de padrões abertos para tratar dos vários aspectos envolvidos na realização de chamadas. Esse modelo, como diz seu nome, tem como principal elemento o protocolo de sinalização SIP (Session Initiation Protocol).

O protocolo SIP

O protocolo SIP segue um modelo P2P (peer-to-peer), em que dois ou mais participantes, chamados de agentes, trocam mensagens com a finalidade de estabelecerem algum tipo de sessão (de voz no nosso caso, mas pode ser de video, mensagem instantânea, ou algum outro tipo de serviço). Assim, cada agente em uma sessão SIP se comporta tanto como cliente (quando envia requisições SIP) quanto servidor (quando responde a requisições SIP). A parte que inicia requisições se chama UAC (User Agent Client), e a que responde requisições é denominada UAS (User Agent Server), estando ambas implementadas nos telefones IP e similares.

Uma sessão SIP envolve a interação entre duas entidades lógicas, que no caso de chamadas VoIP são por vezes chamadas simplesmente de usuários. A diferença entre entidade lógica e agente é que a primeira é o usuário (recurso) que inicia ou recebe chamadas, e o segundo é a aplicação que contém os mecanismos para efetuar e receber chamadas - pense que a entidade seria uma pessoa, e o agente o aparelho telefônico em uma chamada telefônica convencional. Cada entidade é identificada por uma URI (Uniform Resource Indicator) SIP, semelhante a um número de telefone. Além de identificar uma entidade lógica, a informação em uma URI SIP indica a forma com que essa entidade deve ser contatada via SIP. Exemplos de URI SIP seguem abaixo:

# Uma URI simples, tipicamente usada em mensagens INVITE (que iniciam sessões SIP)
sip:1234@biloxi.example.com

# Uma URI mais elaborada, tipicamente usada em alguns cabeçalhos SIP (ex: Contact ou Refer-to)
sip:joseph.fourier@transform.org:5060;transport=udp;user=ip;method=INVITE;ttl=1;
maddr=240.101.102.103?Subject=FFT

As comunicações SIP seguem uma hierarquia, cujos níveis são:

  • Mensagens: mensagens de texto individuais trocadas entre agentes.
  • Transação: sequência de mensagens entre dois agentes iniciando com uma requisição e terminando com uma resposta final.
  • Diálogo: uma relação entre dois agentes que persiste por algum tempo, e identificada por um Call-ID.
  • Chamada: composta por todos os diálogos originados por um agente.

Sip-relation.gif
'Mensagens, transações, diálogos e chamadas

Mensagens SIP

O protocolo SIP tem uma estrutura simplificada com mensagens de pedido e resposta, assemelhando-se ao protocolo HTTP. Essas mensagens possuem a seguinte estrutura:

Linha inicial
Cabeçalho1: valor do cabeçalho 1
Cabeçalho2: valor do cabeçalho 2
...
CabeçalhoN: valor do cabeçalho N
<linha em branco>
corpo da mensagem (opcional)

A diferença básica entre pedidos e respostas SIP está na linha inicial: pedidos contém um método SIP e seus parâmetros, e respostas possuem um código de status junto com um curto texto informativo. Abaixo são mostradas duas mensagens SIP: um pedido e sua respectiva resposta. Nesse exemplo, ambas mensagens não possuem um corpo de mensagem (lembre que isso é opcional):


Sip-example1.png


Pedido:

REGISTER sips:ss2.biloxi.example.com SIP/2.0
Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashds7
Max-Forwards: 70
From: Bob <sips:bob@biloxi.example.com>;tag=a73kszlfl
To: Bob <sips:bob@biloxi.example.com>
Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
CSeq: 1 REGISTER
Contact: <sips:bob@client.biloxi.example.com>
Content-Length: 0

Resposta:

SIP/2.0 200 OK
Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashd92
 ;received=192.0.2.201
From: Bob <sips:bob@biloxi.example.com>;tag=ja743ks76zlflH
To: Bob <sips:bob@biloxi.example.com>;tag=37GkEhwl6
Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
CSeq: 2 REGISTER
Contact: <sips:bob@client.biloxi.example.com>;expires=3600
Content-Length: 0

O pedido exemplificado foi uma mensagem do tipo REGISTER, que é um tipo de método SIP. Um método pode ser entendido como um comando enviado de um participante a outro. A resposta contém o status 200 OK, que significa que o pedido foi atendido com sucesso. Por fim, ambas mensagens contiveram um conjunto de cabeçalhos necessários para caracterizá-las, dentre eles Via, From, To, Call-Id, CSeq, Contact e Content-Length. As tabelas a seguir descrevem resumidamente os principais métodos e cabeçalhos SIP.

Método SIP Descrição
REGISTER Usado por um agente para notificar a rede SIP (outros agentes) sobre sua URI de contato
INVITE Usado para estabelecer sessões entre dois agentes
ACK Confirma respostas finais a requisições INVITE
BYE Termina uma sessão previamente estabelecida
CANCEL Encerra tentativas de chamadas
OPTIONS Consulta um agente sobre suas capacidades

Tabela de métodos SIP (não exaustiva ... apenas os principais métodos)


Cabeçalho SIP Descrição Obrigatoriedade Uso
Via Registra a rota seguida por uma requisição, sendo usado para que respostas sigam o caminho inverso Requisição e resposta Requisição e resposta
To Identifica o destinatário de uma requisição Requisição e resposta Requisição e resposta
From Identifica o originador da requisição Requisição e resposta Requisição e resposta
Call-Id Identifica univocamente uma chamada entre um UAC e um UAS. Requisição e resposta Requisição e resposta
CSeq Numera as requisições de uma mesma chamada de um mesmo UAC Requisição Requisição e resposta
Contact Identifica o originador da requisição ou o recurso requisitado Requisição e resposta
Max-Forwards Máximo número de saltos que a requisição pode atravessar Requisição Requisição
Content-Length Informa a quantidade de bytes do corpo da mensagem Requisição e resposta
Date Informa a data e horário de uma requisição ou resposta Requisição e resposta
Supported Lista uma ou mais opções suportadas por um UAC ou UAS Requisição e resposta
User-Agent Informa sobre o agente (o programa) originador de uma requisição
Allow Informa os métodos SIP aceitos pelo UAS Resposta
Content-type Informa o tipo de conteúdo contido no corpo da mensagem
WWW-Authenticate Informa que o UAC deve se autenticar para o UAS (e como isso deve ser feito) Resposta
Authorization Contém as credenciais para autenticar o UAC para o UAS Requisição

Tabela de cabeçalhos SIP (não exaustiva ... apenas os principais cabeçalhos)

Diagramas de chamadas

Alguns tipos de chamadas VoIP com SIP são recorrentes, estando representadas nas subseções a seguir.

Registro de agente SIP em um proxy SIP

Esta chamada ocorre entre um agente SIP e um servidor de registro SIP (SIP Registar), que está implementado tipicamente em um proxy SIP, um gateway de media, ou um PBX IP (este último incorpora as funções dos dois primeiros com as de um PBX). O registro do agente SIP tem por finalidade fazer com que o servidor de registro SIP conheça a localização do agente (endereço IP e port usado pelo UAS).

Fone 1                      Proxy SIP ou PBX IP
     |                             |
     |          REGISTER           |
     |---------------------------->|
     |      401 Unauthorized       |
     |<----------------------------|
     |          REGISTER           |
     |---------------------------->|
     |            200 OK           |
     |<----------------------------|
     |                             |

Chamada direta entre dois agentes SIP

Uma chamada direta entre dois agentes envolve uma transação INVITE, em que um agente convida o outro a estabelecer uma sessão SIP com um determinado tipo de media (ex: audio). A chamada é finalizada quando um dos agentes inicia uma transação BYE.

 Fone 1                    Fone 2
     |                        |
     |       INVITE           |
     |----------------------->|
     |    180 Ringing         |
     |<-----------------------|
     |                        |
     |       200 OK           |
     |<-----------------------|
     |         ACK            |
     |----------------------->|
     |      RTP Media         |
     |<======================>|
     |                        |
     |         BYE            |
     |<-----------------------|
     |       200 OK           |
     |----------------------->|
     |                        |

Chamada entre dois agentes SIP com intermediação de um Proxy SIP

A principal diferença entre este tipo de chamada e o anterior é o uso de um (ou mais) proxy SIP entre os dois agentes. O proxy SIP tem por finalidade ajudar na realização das chamadas, uma vez que usualmente incorpora a função de servidor de registro. Um proxy SIP encaminha chamadas para o agente chamado, ou para outro proxy mais próximo do destino, podendo aplicar regras de controle de acesso quanto a quem pode realizar chamadas para quem.

Fone 1      Proxy SIP ou PBX IP     Fone 2  
             (directmedia=yes)          
     |                |                |                
     |   INVITE       |                |                
     |--------------->|   INVITE       |                
     |  100 Trying    |--------------->|    
     |<---------------|   100 Trying   |
     |                |<---------------|                
     |                |                |     
     |                |  180 Ringing   |
     |  180 Ringing   |<---------------|                
     |<---------------|                |    
     |                |    200 Ok      |
     |     200 Ok     |<---------------|                
     |<---------------|                |                
     |     ACK        |                |                
     |--------------->|    ACK         |                
     |                |--------------->|    
     |                |                |
     |         RTP Media               |
     |<===============================>|
     |                |                |
     |                |    BYE         |
     |     BYE        |<---------------|                
     |<---------------|                |                
     |     200 Ok     |                |                
     |--------------->|     200 Ok     |                
     |                |--------------->|    
     |                |                |
     |                |                |

Chamada entre dois agentes SIP com intermediação de um gateway de media

Este caso é parecido com o anterior, que usa um proxy SIP. A diferença está na intermediação do fluxo de media, que é feita pelo gateway de media. Isso possibilita que dois agentes estabeleçam uma chamada mesmo usando codecs diferentes, pois o gateway de media fará a tradução entre codecs.

Fone 1            PBX IP              Fone 2
              (directmedia=no)        
     |                |                |
     |   INVITE       |                |
     |--------------->|   INVITE       |
     |  100 Trying    |--------------->| 
     |<---------------|  100 Trying    |
     |                |<---------------| 
     |                |   180 Ringing  |
     |   180 Ringing  |<---------------|                
     |<---------------|                |      
     |                |    200 Ok      |
     |     200 Ok     |<---------------|
     |<---------------|                |
     |     ACK        |                |
     |--------------->|    ACK         |
     |                |--------------->|
     |    RTP Media   |   RTP Media    |
     |<==============>|<==============>|
     |     BYE        |                |
     |--------------->|    BYE         |
     |                |--------------->|
     |                |    200 Ok      |
     |     200 Ok     |<---------------|
     |<---------------|                |
     |                |                |

Chamada entre dois agentes SIP com intermediação de um gateway de media e uso de re-INVITE

O uso de re-invite possibilita que o fluxo de media seja estabelecido diretamente entre os agentes SIP, caso usem o mesmo codec. Assim, evita-se a carga de processamento envolvida na intermediação pelo gateway de media. Isso é feito com o envio pelo gateway de media (representado abaixo por um PBX IP) de um novo INVITE para cada agente SIP, após a sessão SIP estar estabelecida. Esse novo INVITE contém uma descrição de media (mensagem SDP embutida no corpo da mensagem INVITE) com a localização do outro agente SIP - isso é, seu endereço IP, port UDP para a stream RTP e codec a ser usado.

Fone 1            PBX IP              Fone 2
              (directmedia=yes)        
     |                |                |
     |   INVITE       |                |
     |--------------->|   INVITE       |
     |  100 Trying    |--------------->| 
     |<---------------|  100 Trying    |
     |                |<---------------| 
     |                |  180 Ringing   |
     |  180 Ringing   |<---------------|                
     |<---------------|                |      
     |                |    200 Ok      |
     |     200 Ok     |<---------------|
     |<---------------|                |
     |     ACK        |                |
     |--------------->|    ACK         |
     |    INVITE      |--------------->|
     |<---------------|   INVITE       |
     |    200 OK      |--------------->|
     |--------------->|    200 OK      |
     |    ACK         |<---------------|
     |--------------->|    ACK         |
     |                |<---------------| 
     |                                 |
     |              RTP Media          |
     |<===============================>|
     |     BYE        |                |
     |--------------->|    BYE         |
     |                |--------------->|
     |                |    200 Ok      |
     |     200 Ok     |<---------------|
     |<---------------|                |
     |                |                |

Atividade 1: Ligação SIP ponto a ponto

O primeiro experimento com uma chamada VoIP envolve estabelecer uma chamada diretamente entre dois softphones. Cada par de alunos deve fazer o seguinte:

  1. Executar o Jitsi (ver em Aplicativos->Internet).
  2. Definir uma conta SIP contendo somente um identificador de usuário (sem a localização).
  3. Um dos alunos deve iniciar uma chamada para o outro aluno, que deve atendê-la.
  4. Experimente falar ao microfone e escutar o som no fone de ouvido.
  5. Encerre a chamada.


A sequência de passos acima estabelece uma chamada VoIP do tipo mais simples possível. Para ver os detalhes da comunicação entre os softphones faça o seguinte:

  1. Execute o wireshark e inicie a captura de datagramas UDP pela interface eth0.
  2. Repita a chamada.
  3. Após encerrar a chamada, analise mensagens SIP no wireshark (menu Telephony -> Voip Calls -> Graph)
  4. Disseque a sinalização SIP entre os softphones.
  5. Identifique como foi transportada a voz digitalizada.


Questões:

  1. Quem foram o UAC e UAS nesse experimento ?
  2. Quantas requisições SIP foram realizadas para uma chamada completa ?
  3. Quantas mensagens, transações, diálogos e chamadas foram realizadas ?
  4. Como a voz digitalizada foi transportada ? Foi usado algum protocolo em especial ?
  5. Qual o CODEC selecionado por cada parte? Onde isso foi feito ?
  6. Qual a lista de CODECS suportados?