Anterior
Próximo

3. Uso de redes P2P para transmissão de vídeo

A principal motivação para o uso de redes P2P para transmissão de vídeo em tempo real (streaming) é econômica: o modelo cliente-servidor não é escalável, pois requer uma conexão ponto-a-ponto e a emissão de uma cópia da informação para cada cliente assistindo cada vídeo, o que torna os custos com infra-estrutura de rede e uso de largura de banda proibitivos (exceto por exemplo para grandes empresas como a Google, que controla o YouTube): serviços de distribuição de conteúdo multimídia nesse modelo requerem enlaces capazes de transportar dezenas a centenas de gigabits por segundo, além de servidores poderosos, capazes de atender a enormes volumes de conexões simultâneas. E tudo isso custa muito caro, tanto na aquisição quanto na manutenção.

Uma solução para o problema de escalabilidade das transmissões ponto-a-ponto é a comunicação por grupo (multicast IP). Neste modelo, a mesma informação é propagada pela rede e recebida por todos os membros do grupo, identificado por um endereço IPv4 classe D (na faixa de 224.0.0.1 a 239.255.255.255 [9]). Isto otimiza os requisitos de banda para o servidor, já que ele precisa emitir a informação apenas uma vez para todos os receptores no grupo.


Figura 3.1: Fluxo de dados em uma rede multicast. Imagem: Wikimedia Commons.

O uso de multicast IP é a solução ideal para redes privadas, porém não é uma boa solução para a Internet, por conta da escassez de roteadores que passem tráfego multicast, devida à complexidade deste tipo de roteamento, especialmente ao volume de informações de estado que cada roteador precisaria armazenar para cada grupo multicast [10], além da falta de incentivos aos provedores de infraestrutura de implementarem as mudanças necessárias para transportar esse tipo de tráfego [11].

As redes P2P ainda são baseadas em conexões ponto-a-ponto, como no modelo cliente-servidor, porém aliviam bastante o problema do uso de largura de banda no servidor, pois cada participante da rede é ao mesmo tempo consumidor e distribuidor. Ao servir outros participantes ele efetivamente acrescenta a sua largura de banda de envio (upload) à largura de banda total disponível para a rede. Como são construídas na camada de aplicação, utilizam os protocolos e alavancam a infraestrutura já existentes.


Figura 3.2: Esquema do fluxo de dados em uma rede P2P, servindo 3 fluxos diferentes. Imagem: Wikimedia Commons.

Como já discutido anteriormente neste trabalho, os sistemas P2P mais populares na Internet são sistemas de compartilhamento de arquivos, como o eMule, o BitTorrent e o Gnutella. O uso de sistemas P2P para distribuição de conteúdo audiovisual, porém, apresenta desafios adicionais, no que diz respeito a requisitos de largura de banda, tempo de entrega e qualidade de serviço. Essas características serão discutidas nas seções posteriores deste capítulo.


3.1. Especificidades

A distribuição de conteúdo multimídia apresenta um número de especificidades, que causam impactos no projeto de sistemas P2P para tal finalidade:

- esse tipo de conteúdo geralmente precisa de um certo nível de largura de banda disponível, indo desde em torno de 200 kbps para vídeos de baixa resolução (176x144 - 320x240 pixels) com áudio de baixa fidelidade, a 20 Mbps ou mais para vídeo de alta definição (1920x1080 pixels) com áudio multicanal de alta fidelidade;
- conteúdos audiovisuais são fluxos contínuos; ou seja, isso os torna sensíveis a flutuações na largura de banda disponível ou a perdas de pacotes. Isto pode ser dito especialmente para os fluxos de áudio: enquanto perdas no fluxo de vídeo ocasionarão defeitos na imagem, esses defeitos incomodam menos, e os codificadores/decodificadores (codecs) são projetados para disfarçar esse tipo de defeito; enquanto perdas no áudio imediatamente causam quebras e estalos, que são defeitos mais perceptíveis;
- também por conta da continuidade do fluxo da mídia, há um requisito de tempo de entrega, proporcional ao requisito de atraso: por mais que um pacote perdido seja retransmitido e recebido com sucesso, se ele chegar atrasado demais, o defeito na exibição já aconteceu;
- os dados binários (bits) trafegados pela rede representam sequências ordenadas de quadros de vídeo e de amostras de áudio; portanto esse tipo de aplicação se torna sensível também a flutuações no atraso (jitter) na recepção dos pacotes: pacotes chegando atrasados e fora de ordem quebrariam completamente a exibição do conteúdo. Isto é remediado nas aplicações com o uso de buffers de recepção, porém isto aumenta o atraso entre o transmissor e o receptor, o que pode ser ruim dependendo da aplicação [12].


3.2. Vantagens

Como as redes P2P são redes sobrepostas, construídas sobre a camada de aplicação, torna-se muito barato montar uma rede de distribuição, pois toda a infraestrutura já está disponível, e com conexões de banda larga "caseiras" (em torno de 500 kbps) já se consegue áudio e vídeo de qualidade razoável, com as tecnologias de compressão de áudio e vídeo hoje disponíveis (ex. AAC, H.264); além disso, como cada novo participante contribui para a largura de banda total da rede, os requisitos de largura de banda, ainda que altos em comparação com o uso de multicast, são aliviados, o que torna esse tipo de sistema mais escalável; além disso, a implantação da rede é praticamente instantânea e sem custos, tipicamente exigindo apenas baixar e instalar o software "cliente" da rede. [12].


3.3. Problemas

Para que continue sendo escalável, um protocolo P2P precisa diminuir ao máximo o volume de informações de controle (overhead) e de estado armazenado em cada nó da rede. A rede sobreposta deve ser capaz de suportar potencialmente dezenas de milhares de participantes simultaneamente. [12].

Dependendo do tipo de aplicação, pode existir um requisito de atraso muito pequeno, por exemplo, na ordem de algumas centenas de milissegundos em aplicações interativas, como videoconferência; ou uns poucos segundos, quando a aplicação não é interativa porém o vídeo está sendo gerado em tempo real (como uma transmissão de TV, por exemplo). Quando a aplicação não é interativa, por exemplo, no caso de vídeo sob demanda (VoD), isso deixa de ser crítico, passando a ser tolerado um atraso de alguns segundos no início da exibição.

Conforme já discutido anteriormente, aplicações de transmissão de vídeo exigem continuidade do fluxo; isto significa que a estrutura do sistema deve ser projetada de forma a evitar ao máximo interrupções no fluxo de dados, mesmo com nós falhando ou saindo da rede.

O ambiente de uma rede P2P é extremamente dinâmico, com nós entrando e saindo da rede a todo tempo. Isto exige que a estrutura da rede sobreposta seja capaz de se reorganizar rapidamente, e sem que isso cause aumento no overhead de controle da rede, pois isso causaria interrupções no fluxo ou mesmo uma sobrecarga geral na rede, dependendo da escala em que isso aconteça.

Além disso, ambientes de rede P2P são bastante heterogêneos: a quantidade de recursos disponíveis para cada nó da rede pode variar muito; podem coexistir numa rede P2P nós com conexões de banda larga de dezenas de megabits por segundo e nós conectados à rede por meio de enlaces pouco confiáveis e de apenas alguns kilobits por segundo, tais como enlaces de rádio ou celulares 3G.

Outro problema é a assimetria entre a banda disponível para recepção (download) e a banda disponível para transmissão (upload), que tipicamente acontece na maioria dos nós na rede, pois estes geralmente estão conectados por enlaces assimétricos, tais como ADSL ou cabo. Isto, combinado com os problemas já discutidos, causa problemas de qualidade na distribuição de vídeo na rede sobreposta, pois a banda total disponível seria menor do que a banda total requisitada, o que significaria que alguns nós não poderiam receber o vídeo com a qualidade original [12].

Um outro fator que impacta o projeto de um sistema P2P é o problema de acessibilidade potencialmente existente em grande parte dos nós "clientes", uma vez que mais de 70% das máquinas conectadas à Internet utilizam alguma forma de firewall ou NAT (Network Address Translation) (estatísticas de 2008) [13]. A existência de NATs ou firewalls pode impedir que um nó externo à rede privada de outro nó estabeleça comunicação, impedindo que este segundo nó compartilhe seus recursos. O quão impeditivo isso é depende do protocolo de transporte utilizado, e das características do firewall ou NAT usado.

Existe também um problema com nós não-cooperativos: o operador de um nó pode propositadamente informar à rede uma capacidade de upload muito menor do que a que realmente tem disponível. Como visto acima, a sustentabilidade da rede depende da cooperação entre os pares, e o excesso de nós não-cooperativos (chamados free-riders em algumas publicações) prejudica o desempenho da rede.


3.4. Exemplos

Nesta seção, serão apresentados alguns exemplos de redes de vídeo P2P, e como elas alavancam as vantagens e lidam com os problemas discutidos nas seções anteriores.

3.4.1. ESM (End System Multicast)

O ESM é um sistema de distribuição de conteúdo multimídia em tempo real (streaming) desenvolvido na Carnegie Mellon University, EUA. A rede ESM é uma rede estruturada, e utiliza um esquema em árvores para a distribuição do tráfego. O protocolo tem similaridades com o protocolo DVMRP de roteamento para IP multicast [14].


Figura 3.3. Exemplo de árvore do ESM. Fonte: [15].

As métricas do sistema são escolhidas de forma a otimizar a árvore primeiro para largura de banda, depois para atraso [12], que, como discutido na seção anterior, são requisitos para a transmissão de áudio e vídeo. A estrutura da árvore é adaptativa também com relação a desempenho.

A entrada de um nó na rede é feita da seguinte forma: o nó ingressante primeiro se conecta à fonte do fluxo, de onde obtém uma lista aleatória de nós membros da rede. Ele então seleciona um desses para ser seu pai na árvore, por um critério de desempenho. Esse nó descobre os outros através de um protocolo tipo "fofoca" (gossip): periodicamente, cada nó X escolhe aleatoriamente um outro nó Y da sua lista de nós conhecidos. Então, X envia para Y um subconjunto de sua lista de nós conhecidos, além da estampa de tempo (timestamp) da última mensagem recebida de cada um deles. Y recebe esta mensagem e atualiza sua lista de nós conhecidos conforme necessário. Um nó é removido dessa lista (ou seja, considera-se que esse nó falhou) quando deixa de enviar mensagens por um certo período de tempo [12].

Um nó da rede ESM pode trocar de posição na árvore (ou seja, escolher um novo pai) caso o desempenho do nó pai "atual" caia abaixo de um certo padrão. O novo pai é selecionado da mesma forma que quando o nó em questão acabara de entrar na rede [12]. Isto é feito de forma a tentar manter a continuidade e o nível de qualidade na recepção em situações de flutuação da largura de banda disponível ou congestionamento de enlaces.

Nós especiais, chamados de waypoints (pontos de passagem) podem ser inseridos na árvore de forma a manter o desempenho no caso de escassez de recursos (especialmente largura de banda). Esses nós são máquinas poderosas, e que têm conexões rápidas à Internet. [15]. Desta forma o ESM lida com problemas como a heterogeneidade da rede ou nós não-cooperativos.

Saídas e falhas de nós centrais da árvore podem causar problemas de descontinuidade no fluxo. Para remediar isso, os nós ESM se mantêm repassando dados por um certo período de tempo após notificar seus filhos de sua saída, enquanto a seleção de nós pai é feita novamente e a árvore se reorganiza [12]. No caso de uma falha, porém, poderá haver descontinuidade no fluxo, potencialmente para um número grande de nós, até que a falha seja detectada pelos outros nós e a árvore se reorganize [14].

3.4.2. CoolStreaming

O CoolStreaming [11] é um sistema de distribuição de conteúdo P2P orientado a dados. É uma rede não-estruturada, e pode ser pensado como uma versão em tempo real da popular rede de troca de arquivos BitTorrent [12], com a diferença que o objeto compartilhado é o buffer de dados.

Assim como no ESM, um nó entrando na rede CoolStreaming precisa contactar a fonte dos dados para obter um conjunto inicial de pares (parceiros), e cada nó da rede também precisa manter informações sobre seus parceiros. Uma vez que as parcerias sejam estabelecidas, os nós trocam entre si informações sobre a disponibilidade dos dados.


Exemplo de esquema de parcerias numa rede CoolStreaming. A fonte é o nó A. Fonte: [11].

Diferentemente do BitTorrent, no CoolStreaming os fragmentos de dados não podem ser recebidos em qualquer ordem, pois fragmentos do buffer recebidos após seu tempo de exibição são inúteis. Isto é resolvido por um módulo chamado "agendador" (scheduler), que determina quais fragmentos do buffer devem ser os próximos a serem recebidos, num instante de tempo qualquer. Ele então consulta suas tabelas para identificar os nós que têm os dados disponíveis. Isto é feito da seguinte forma: cada nó envia periodicamente para seus parceiros um mapa de seu buffer, que indica a presença ou ausência de cada fragmento de dados dentro de uma janela deslizante, que "anda" junto com o "cursor" de reprodução[12].


Exemplo de mapa de buffer num nó CoolStreaming. As células em vermelho representam fragmentos presentes. Fonte: [12].

Na implementação do CoolStreaming, se escolheu uma janela de 120 fragmentos, cada um contendo 1 segundo de vídeo. O mapa de buffer tem 1 bit para cada fragmento (presente ou ausente), gerando um total de 120 bits (15 bytes), mais 2 bytes para indicar o número de sequência do primeiro fragmento da janela. Esse número pode "rolar" (de 65.535 para 0) em casos de transmissões muito longas [12].

Uma das vantagens desta arquitetura é que a saída ou falha de nós não é muito disruptiva: os outros nós continuam obtendo os fragmentos de dados normalmente, a partir de outros nós que não aquele que falhou ou saiu [11][12]. Isto permite que a continuidade do fluxo seja mantida na maior parte do tempo, mesmo com uma dinâmica de entrada e saída de pares no sistema muito rápida [11].


Anterior
Próximo