! ! "! % #$" ! & ! " ' &( ) " !" ! ! ' ! Universidade Federal de Pernambuco [email protected] www.cin.ufpe.br/~posgraduacao RECIFE, ABRIL/2004 #$" ' ! * UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO FÁBIO PEREIRA BOTELHO “INFRA-ESTRUTURA DE TRANSCODIFICAÇÃO PARA DISTRIBUIÇÃO DE ÁUDIO EM UMA INTRANET ADAPTÁVEL AO ESTADO DA REDE” ESTE TRABALHO FOI APRESENTADO À PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO. ORIENTADOR: DR. DJAMEL FAWZI HADJ SADOK RECIFE, ABRIL/2004 ii Botelho, Fábio Pereira de transcodificação para Infra-estrutura distribuição de áudio em uma Intranet adaptável ao estado da rede / Fábio Pereira Botelho. – Recife : O Autor, 2004. xv, 122 folhas : il., fig., gráf., quadros. Dissertação (mestrado) – Universidade Federal de Pernambuco. CIn. Ciência da Computação, 2004. Inclui bibliografia , apêndices e anexo. 1. Redes de computadores – Sistemas distribuídos. 2. Convergência digital – Transcodificação. 3. RTP (Real Time Transport Protocol) – Aplicação para distribuição de áudio. 4. Intranet – Adaptabilidade ao estado da rede. I. Título. 004.75 004.68 CDU (2.ed.) CDD (20.ed.) UFPE BC2004-470 A meu filho Emanuel e a minha esposa Iraci Botelho iii Agradecimentos Gostaria de agradecer a Deus e a Nossa Senhora Aparecida pela condução nesta importante fase de minha vida; a minha esposa Iraci Botelho pela paciência, carinho e amizade; a meu filho Emanuel Botelho pela sua presença em minha vida e na vida de Iraci, no oitavo mês gestacional; a minha cunhada Iolanda Fontenele pelos conselhos e orações sempre oportunas; a minha mãe pelo apoio e amizade incondicionais; a meu pai por ter lançado o barco à água não sem os cuidados de minha mãe; a meus caros amigos e irmãos; enfim, a todas as pessoas que dispensaram atenção no auxílio a escrita dessa dissertação, em especial aos Professores Dr. Djamel Sadok e Dra. Judith Kelner pelos direcionamentos pontuais e precisos. iv Sumário Abreviações e Acrônimos Resumo Abstract xi xiv xv 1. Introdução 01 1.1. Motivação ............................................................................................................ 1.2. Problemática ........................................................................................................ 1.3. Organização da Dissertação ................................................................................ 2. Projetos Relacionados 2.1. Transcodificação Baseada em Proxy .................................................................. 2.2. Projeto KISS ......................................................................................................... 2.3. Projeto ICEBERG ............................................................................................... 2.4. Projeto COMCAR ............................................................................................... 3. Real-Time Transport Protocol (RTP) 3.1. Apresentação ....................................................................................................... 3.2. Objetivos do RTP ................................................................................................ 3.3. Transporte de Dados Multimídia e de Controle .................................................. 3.4. Funções RTP ....................................................................................................... 3.5. Misturador e Tradutor RTP ................................................................................. 3.6. Pacote RTP .......................................................................................................... 3.7. Protocolo RTCP .................................................................................................. 3.8. Representação Digital dos Dados de Áudio ........................................................ 3.8.1. Codificação de Áudio .................................................................................... 3.8.2. Intervalo de criação dos Pacotes ................................................................... 3.9. Formatos de Codificação de Áudio RTP Disponíveis na API JMF 2.1.1e ......... 3.9.1. DVI ................................................................................................................ 3.9.2. Compressão de Áudio -LAW ...................................................................... 3.9.3. G.723 ............................................................................................................. 3.9.4. GSM .............................................................................................................. 3.9.5. MPEG-1 / MPEG-2 ...................................................................................... 4. IP Multicast 4.1. Apresentação ....................................................................................................... 4.2. Outros Tipos de Transmissão comparados à Multicast ...................................... 4.3. Multicast em Diferentes Camadas ...................................................................... 4.4. Filtro Multicast nos Switchs ......................................................................... 4.5. O Processo Multicast .................................................................................... 4.6. Conceitos de Roteamento Multicast ............................................................. 01 02 03 05 05 08 10 12 17 17 19 19 20 20 21 24 30 31 32 32 33 35 35 36 36 41 41 41 43 43 45 46 v 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 5.1. Transcodificador ................................................................................................. 5.2. Serviços da Infra-Estrutura de Transcodificação ................................................ 5.3. Arquitetura e Implementação .............................................................................. 5.3.1. Classes Identificadas ..................................................................................... 5.3.2. Papéis Exercidos pelo Cliente ....................................................................... 5.3.3. Casos de Uso Identificados e Situação de Implementação ........................... 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 6.1. Entendendo o Problema ...................................................................................... 6.2. Associação da Sessão Multicast mais Adequada dada a Informação da Capacidade do Enlace .......................................................................................... 6.3. Eleição do Responsável pelo Controle de Troca de Sessão para uma dada Sub-rede ............................................................................................................... 6.4. Troca de Sessão em caso de Congestionamento ................................................. 6.5. Troca de Sessão na Ausência de Congestionamento ......................................... 6.6. Algoritmo de Adaptabilidade do Receptor Gerente ............................................ 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcodificação 7.1. Cenário Utilizado ................................................................................................ 7.2. Análise dos Formatos de Áudio RTP para as Sessões Multicast da Infraestrutura de Transcodificação Proposta ............................................................... 7.3. Análise dos Formatos de Áudio RTP Candidatos às Sessões Disponibilizadas pelo Transcodificador .......................................................................................... 49 49 52 54 56 59 60 70 70 72 72 74 75 76 78 78 80 86 8. Conclusão e Trabalhos Futuros 91 Referências 93 Apêndice A. Jitter em Redes de Pacotes de Voz 97 A.1. Definição ............................................................................................................ A.2. O que pode causar o Jitter ? ............................................................................... Apêndice B. Qualidade de Serviço (QoS) B.1. Mecanismos usados para se implementar Qualidade de Serviço (QoS) ............ B.2. Type of Service (ToS) ........................................................................................ B.3. Serviços Diferenciados ....................................................................................... B.4. IEEE 802.1P ....................................................................................................... B.5. Infra-Estrutura de Rede Necessária a Distribuição de Áudio com QoS ............. 97 99 100 100 101 101 104 108 vi Anexo A. Java Media Framework (JMF) An.1. Modelo de tempo .............................................................................................. An.2. Objetos Manager .............................................................................................. An.3. Modelo de Evento ............................................................................................ An.4. Modelo de Dados ............................................................................................. An.4.1. PushDataSources e PullDataSources ......................................................... An.5. Objetos DataSource Especiais .......................................................................... An.6. Formatos de Dados ........................................................................................... An.7. Controls ............................................................................................................ An.8. Componentes da Interface com o Usuário ....................................................... An.9. Apresentação de Áudio e Vídeo ....................................................................... An.10. Player ............................................................................................................. An.11. Estados do Player ........................................................................................... An.12. Processor ........................................................................................................ An.13. ControllerEvent .............................................................................................. An.14. Processamento ................................................................................................ 110 111 111 112 112 113 114 114 115 117 117 118 118 119 119 121 vii Lista de Figuras Figura 2.1. Arquitetura Básica do Transcodificador Baseado em Proxy .................................. Figura 2.2. Visão Simplificada dos Componentes da Infra-Estrutura de Rede do Projeto KISS .......................................................................................................................................... Figura 2.3. Um Cenário Ilustrativo do APC no Projeto ICEBERG ......................................... Figura 2.4. Área de Interesse do Projeto COMCAR ................................................................ Figura 2.5. Arquitetura do Sistema COMCAR ........................................................................ Figura 2.6. Infra-estrutura de Transcodificação Implementada como parte do Projeto COMCAR .................................................................................................................... Figura 3.1. Posicionamento e Interações dos Protocolos RTP/RTCP e RTSP no Modelo TCP/IP ...................................................................................................................................... Figura 3.2. Atuação de um Misturador nos Streams Multimídia de Entrada ........................... Figura 3.3. Atuação de um Tradutor nos Streams Multimídia de Entrada ............................... Figura 3.4. Pacote RTP ............................................................................................................. Figura 3.5. Extensão do Cabeçalho do Pacote RTP .................................................................. Figura 3.6. Pacote RTCP SR ..................................................................................................... Figura 3.7. Pacote RTCP RR .................................................................................................... Figura 3.8. Processamento de Áudio Digital ............................................................................ Figura 3.9. Compressão e Descompressão ADPCM ................................................................ Figura 3.10. Compressão e Descompressão de Áudio MPEG .................................................. Figura 3.11. Limites de Bandas Críticas X Filtros de Banda para Áudio MPEG ..................... Figura 4.1. Comparação entre Multicast e Unicast ................................................................... Figura 4.2. Filtro Multicast nos Switchs ................................................................................... Figura 4.3. Processo Multicast .................................................................................................. Figura 4.4. Efeito da Aplicação do Spanning Tree a uma Rede IP .......................................... Figura 5.1. Infra-Estrutura de Transcodificação Utilizada nesta Dissertação ........................... Figura 5.2. Arquitetura de Infra-Estrutura de Serviços de Rede para Transcodificação de Streams Multimídia ................................................................................................................... Figura 5.3. Diagrama de Classes da Infra-Estrutura de Transcodificação para Distribuição de Áudio .................................................................................................................................... Figura 5.4. Múltiplas Funcionalidades Assumidas pelo Cliente em Uma Dada Sub-Rede ...... Figura 5.5. Diagrama de Seqüência do Caso de Uso Transmitir Áudio ao Transcodificador .. Figura 5.6. Inicialização do Serviço Transmissor ..................................................................... Figura 5.7. Diagrama de Seqüência do Caso de Uso Iniciar as Três Sessões Multicast de Áudio RTP ................................................................................................................................ Figura 5.8. Inicialização do Serviço Transcodificador e Criação das Três Sessões de Áudio RTP Após Recepção do Stream de Áudio Oriundo do Transmissor ........................................ Figura 5.9. Diagrama de Seqüência do Caso de Uso Receber Stream de Áudio no Receptor .................................................................................................................................................... Figura 5.10. Recepção e Apresentação do Stream de Áudio RTP de Uma das Sessões de Áudio Multicast Iniciadas pelo Transcodificador ..................................................................... Figura 6.1. Cenário Ilustrativo da Adaptabilidade dos Receptores e Controle do Transcodificador ....................................................................................................................... Figura 6.2. Cenário Ilustrativo do Problema da Adaptabilidade dos Receptores e Controle do Transcodificador em Situação de Congestionamento .......................................................... 06 09 11 13 15 15 18 20 21 21 23 25 28 30 34 38 39 42 44 46 47 50 53 55 60 62 63 64 65 67 68 71 71 viii Figura 6.3. Receptores Gerente e Agente para Troca de Sessão em Uma Dada Sub-Rede ...... Figura 6.4. Troca de Sessão em Caso de Congestionamento ................................................... Figura 6.5. Diagrama de Seqüência para Troca de Sessão pelo Receptor Gerente em Situação de Congestionamento ................................................................................................. Figura 6.6. Algoritmo de Adaptabilidade do Receptor – Gerente ............................................ Figura 7.1. Cenário Utilizado na Análise .................................................................................. Figura 7.2. Vazões Observadas para as Sessões Multicast Mantidas pelo Transcodificador ... Figura 7.3. Jitter Observado para as Sessões Multicast Mantidas pelo Transcodificador ........ Figura 7.4. Quantidade de Bytes Recebidos das Sessões Multicast Mantidas pelo Transcodificador ....................................................................................................................... Figura 7.5. Pacotes RTP Recebidos das Sessões Multicast Mantidas pelo Transcodificador .. Figura 7.6. Pacotes RTCP Recebidos das Sessões Multicast Mantidas pelo Transcodificador Figura 7.7. Vazões Observadas para os Formatos de Áudio RTP Candidatos ......................... Figura 7.8. Maiores Valores de Jitter Observados para os Formatos de Áudio RTP Candidatos ................................................................................................................................. Figura 7.9. Menores Valores de Jitter Observados para os Formatos de Áudio RTP Candidatos ................................................................................................................................. Figura 7.10. Quantidade de Bytes Recebidos para os Formatos de Áudio RTP Candidatos ... Figura A.1. Efeito do Jitter em um Stream de Pacotes de Voz ................................................ Figura A.2. Buffer para Compensação do Jitter ....................................................................... Figura A.3. Pacote Perdido Devido a Jitter Excessivo ............................................................. Figura B.1. Formato do Byte TOS no Cabeçalho Ipv4 ............................................................. Figura B.2. Visão Lógica do Classificador de Pacotes e Condicionador de Tráfego ............... Figura B.3. Formato do Byte Diffserv ...................................................................................... Figura B.4. Cabeçalho da Camada 2 Ethernet sem a Informação 802.1 P/Q ........................... Figura B.5. Cabeçalho da Camada 2 Ethernet 802.1 com a Informação 802.1 P/Q.................. Figura B.6. Configuração de uma Placa Ethernet com Suporte a 802.1P Vista no S.O Windows 2000 .......................................................................................................................... Figura B.7. Software de Configuração da Marcação de Pacotes 802.1P Disponibilizado pelo Sistema Operacional Windows 2000/XP .................................................................................. Figura B.8. Infra-Estrutura de Rede Necessária a Distribuição de Áudio com QoS ................ Figura An.1. JMF é Baseado no Modelo de Captura e Apresentação de Vídeo Tradicionais .. Figura An.2. API JMF .............................................................................................................. Figura An.3. Modelo de Tempo JMF ....................................................................................... Figura An.4. Modelo de Eventos .............................................................................................. Figura An.5. Modelo de Dados ................................................................................................. Figura An.6. Formato de Mídias JMF ...................................................................................... Figura An.7. JMF Controls ...................................................................................................... Figura An.8. Objetos JMF Controller ...................................................................................... Figura An.9. Modelo JMF Player ............................................................................................ Figura An.10. Estados do Player .............................................................................................. Figura An.11. Modelo JMF Processor ..................................................................................... Figura An.12. Eventos JMF ...................................................................................................... Figura An.13. JMF Processors ................................................................................................. Figura An.14. Estágios do Processor ....................................................................................... 73 74 75 76 79 81 83 84 85 85 87 88 89 90 97 98 98 101 102 102 104 105 107 108 109 110 111 111 112 113 114 116 117 118 118 119 120 121 121 ix Lista de Tabelas Tabela 3.1. Codificadores de Áudio RTP Disponíveis na API JMF 2.1.1e ............................. Tabela 3.2. Diferentes Tamanhos de Quadros Especificados no Algoritmo G.723 ................. Tabela 3.3. Limite Aproximado de Bandas Críticas ................................................................ Tabela 5.1. Diferentes Configurações de Alguns Dispositivos Computacionais ..................... Tabela 5.2. Algoritmos de Compressão de Áudio .................................................................... Tabela 5.3. Algoritmos de Compressão de Vídeo .................................................................... Tabela 6.1. Formatos de Áudio RTP Disponíveis na API JMF2.1.1e ...................................... Tabela 6.2. Formatos de Codificação mais Adequados as Capacidades de Enlace ................. Tabela 6.3. Quadro de Mensagens Oriundas do Gerente para os Agentes em uma Sub-rede Tabela 7.1. Quadro de Mensagens Oriundas do Gerente para os Agentes em uma Sub-Rede qualquer .................................................................................................................................... Tabela 7.2. Formatos de Codificação mais Adequados dada a Capacidade do Enlace ............ 33 36 37 50 51 51 69 72 73 80 87 x Abreviações e Acrônimos ADPCM A-LAW APC API CBT CCITT CIF CNAME COMCAR CRC CSRC DiffServ DLSR DM DAB DVB-T DVI DVMRP Ethernet FDDI FTP G.711 G.721 G.723 GPRS GSM GSTN H.324 HTML HTTP ICEBERG IEEE IETF IGMP IMA Internet2 IP IPv4 IPv6 ISDN ISO/IEC Adaptative Delta Pulse Code Modulation Padrão ITU-T para conversão de áudio analógico para digital usando codificação PCM usado na Europa Automatic Path Creation Application Program Interface Core Based Trees Comité Consultatif Internationale de Télégraphique et Téléphonique Common Intermediate Format (Video) Canonical Name Communication and Mobility by Cellular Advanced Radio Cyclic Redundancy Code Contributing Source Differentiated Services Delay Since Last SR Dense Mode Digital Audio Broadcast Digital Video Broadcast Digital Video Interactive Distance Vector Multicast Routing Protocol Um tipo de rede para interconexão de dispositivos computacionais (IEEE 802.3) Fibre-Distributed Data Interface File Transfer Protocol Recomendação do CCITT para freqüência de voz PCM Recomendação do CCITT para compressão de áudio Definição do ITU-T H.324 GSTN para terminais de vídeo-fone General Packet Radio Service Group Special Mobile Global Switched Telephone Network Um grupo de padrões aprovados pelo ITU que define video conferência sobre a rede telefônica Hipertext mark-up language Hipertext Transport Protocol An Internet-core Network Architecture for Integrated Communications Institute for Eletrical and Eletronics Engineers Internet Engeneering Task Force Internet Group Management Protocol Interactive Multimedia Association Projeto para rede norte americana de alta velocidade Internet Protocol Internet Protocol Version 4 Internet Protocol Version 6 Integrated Services Digital Network Internacional Organization for Standardization/International xi ITU-T JMF KISS LAN LSR MAC MDCT MIB MMUSIC MOSPF MPEG MPE-LPC NAP NCM NTP OSI PCM PDA PIM-DM PIM-SM PT QCIF RAM RC RFC RMI RNP2 RPC RPE/LTP RR RTCP RTP RTSP SA SDES SID SM SNMP SR SSRC TCP Electrotechnical Commission International Telecommunication Union Java Media Framework Communication Infrastructure for Streaming Services in a Heterogeneous Environment Local Area Network Last SR (timestamp) Media Accesss Control (IEEE 802) Modified Discrete Cosine Transform Management Information Base Multiparty Multimedia Session Control Multicast Open Shortest Path First Motion Picture Experts Group Multipulse-Excitation Linear Predictive Coding Network Access Points Network Connector Monitor Network Time Protocol Open System Interconnection Pulse Code Modulation Personal Digital Assistant Protocol Independent Multicast-Dense Mode Protocol Independent Multicast-Sparse Mode Payload Type Quarter Common Intermediate Format, um formato para videoconferência apresentando ¼ da resolução do CIF Random Access Memory Reception Report Count Request for Comments Remote Method Invocation Projeto brasileiro para redes de alta velocidade de iniciativa da Rede Nacional de Pacotes Remote Procedure Call Regular Pulse Excitation / Long Term Prediction Receiver Report Real-Time Transport Control Protocol Real-Time Transport Protocol Real-Time Streaming Protocol Service Applications Source description itens Silence Insertion Descriptor Sparse Mode Simple Network Management Protocol Sender Report Synchronization Source Transmission Control Protocol xii Token Ring UDP UML UTC VLAN WAN -LAW Um tipo de rede em que os computadores são arranjados esquematicamente em um círculo User Datram Protocol Unified Modeling Language Coordinated Universal Time Virtual Local Area Network Wide Area Network Padrão ITU-T para conversão de áudio analógico para digital usando codificação PCM usado na América do Norte xiii Resumo Com o advento das Redes de Computadores e a sua popularização, principalmente nas décadas de 80 e 90, a tradicional, segura e robusta arquitetura centralizada personificada nos mainframes, deu lugar rapidamente a uma arquitetura descentralizada que além “correr atrás do prejuízo” quando se analisa os benefícios já consolidados da arquitetura centralizada, ainda se volta a partir da década de 90 para a disponibilização de serviços ditos de nova geração, caracterizados por tratar além da mídia textual, ainda áudio e vídeo. Comparativamente ao ambiente complexo, amplo e heterogêneo observado na Internet, o ambiente de uma Intranet é “bem comportado” para se disponibilizar os serviços de nova geração uma vez que o universo de equipamentos e tecnologias envolvidos, para se garantir os requisitos necessários aos novos serviços, é previsível. A presente dissertação possui como principal contribuição o desenvolvimento de uma infra-estrutura de transcodificação e a implementação de uma aplicação para distribuição de áudio em uma rede corporativa (Intranet) adaptável ao estado da rede que se utiliza da infra-estrura elaborada. Embora focada na distribuição apenas da mídia de áudio, a infraestrutura proposta pode evoluir para permitir a criação de aplicações de distribuição de áudio e vídeo e ainda áudio e vídeo conferências. Usa-se o protocolo de Aplicação/Transporte RTP - Real Time Transport Protocol, disponível em vários formatos de áudio existentes na API JMF - Java Media Framework, além de se abordar as necessidades a nível de rede, tais como Multicast e mecanismos de priorização de quadros e pacotes nas camadas 2 e 3 do modelo de referência OSI (i.e. IEEE 802.1P e DiffServ). São identificados quatro Casos de Uso básicos na infra-estrutura proposta: Transmitir ao Transcodificador; Iniciar Sessões de Áudio no Transcodificador; Receber Stream de Áudio RTP no Receptor; e, Trocar a Sessão Multicast de Recepção. Os três primeiros são especificados, implementados e validados; o quarto, é apenas especificado, sendo a sua implementação e validação em cenário com filas diferenciadas de priorização de pacotes na camada de rede, um trabalho futuro. O trabalho explora o conceito de transcodificação como ideal para lidar com a heterogeneidade de recursos de rede existentes em uma Intranet. Palavras-chave: RTP, Distribuição de Áudio, Adaptabilidade, Intranet, Multicast, JMF xiv Abstract With the advent of Computer Networks and their popularization, principally in 80 and 90’s decades, the traditional, secure and reliable centralized architecture, represented by mainframes, was rapidily substituted by a descentralized architecture characterized by tring to resolve old problems already resolved by the old architeture and facing new problems, demanded after 90’s decade, to offer Next Generation services, i.e. services which treat audio, video and text medias. Comparatively to the wide, complex and heterogeneous Internet environment, an Intranet is a better place to offer Next Generation Services because of the previsible variables like equipments and technologies involved to guarantee necessary requirements of newer services. The principal contribution of this thesis is the project and implementation of a transcoding infrastructure and an aplication prototype to distribute audio in an Intranet with adaptability to network computer’s state. Only audio media is treated but in future works, other medias can be treated, like video, to develop not only media distribution but audio/video conferences applications too. The application and Transport RTP - Real Time Transport Protocol, implemented in various audio formats in JMF - Java Media Framework is used to improve adaptable mechanism. Network necessities, like Multicast and priorization queues in layers 2 and 3 of OSI reference model (e.g, IEEE 802.1P and DiffServ), are explained. Four basics Use Cases are identifieds: Transmit to the Transcodifier; Start up of audio sessions in the Transcodifier; Receive Audio Streams in the Receptor; and Change Reception Multicast Session. First three of then are specified, implemented and validated. The other, is only specified and its implementation and validation in scenery with various queues of packet priority in the net layer are a future work. This Master thesis exploits the concept of transcodification to treat in a good way the problem of heterogeneous network resources in an Intranet. Keywords: RTP, Audio Distribution, Adaptability, Intranet, Multicast, JMF xv 1 Introdução Neste capítulo é apresentada a motivação para o uso de infra-estruturas de transcodificação em rede, a problemática envolvida e a organização dos capítulos, apêndices e anexo. 1.1. Motivação Com o advento das Redes de Computadores e a sua popularização, principalmente nas décadas de 80 e 90, a tradicional, segura e robusta arquitetura centralizada representada pelos mainframes, deu lugar rapidamente a uma arquitetura descentralizada, interligada por uma infra-estrutura de comunicação e representada pelas redes de computadores, caracterizada por uma série de questões em aberto a serem resolvidas para que se pudesse usufruir os ganhos financeiros decorrentes dessa mudança, sem abrir mão da simplicidade, segurança e robustez da antiga arquitetura. Além da premente necessidade de “correr atrás do prejuízo” quando são analisados os benefícios já consolidados da arquitetura centralizada, surge fortemente a partir da década de 90 a preocupação em se tratar mídias que até então não tinham sido objeto de atenção dos serviços disponibilizados nas redes de computadores. Estas, tradicionalmente voltadas a tratar a mídia textual, tendo como principal protocolo o TCP (parte integrante da pilha de protocolos TCP/IP que se tornou o padrão de fato nas redes), deparam-se agora com a crescente demanda para tratar também as mídias de voz e vídeo – mudança esta que é estruturalmente influenciada pelo crescimento exponencial dos recursos de largura de banda e confiabilidade dos meios de transmissão disponíveis. Movido por esta preocupação, surgiu a iniciativa do governo americano para a criação de um projeto denominado Internet2 em 1997, que além de disponibilizar alta largura de banda, ainda incentiva o estudo de mecanismos, protocolos e aplicações que até então não estavam disponíveis na Internet convencional: reserva de recursos; filas variadas de priorização de pacotes nas camadas 2 e 3 do modelo de referência OSI que possibilitariam a oferta de diferenciação de serviços; aplicações e protocolos para tratar as mídias textual, voz e vídeo de forma eficiente, disponibilizando serviços tais como conferências de áudio e vídeo, áudio e vídeo sob demanda. A 1. Introdução 2 criação desta nova geração de redes refletiu em vários países do mundo com o surgimento de backbones de alta velocidade que se interligariam formando uma rede internacional de alta velocidade voltada a atender prioritariamente a comunidade científica, representada no Brasil pelo projeto RNP2. A última milha sempre será um problema para que os serviços ditos de nova geração se tornem corriqueiros e usuais. O ambiente de uma Intranet é “bem mais comportado” para se usar os serviços de nova geração uma vez que se diminui o universo de equipamentos e tecnologias envolvidas para se garantir os requisitos necessários. A transcodificação é o processo pelo qual um stream multimídia de origem é convertido em um ou vários streams de destino, alterando sua qualidade e propriedades, tais como vazão e jitter. Este processo é útil para atender à heterogeneidade de recursos tanto da rede onde o stream irá trafegar quanto de dispositivos receptores que irão recuperar e reproduzir o stream. Esta dissertação desenvolve uma infra-estrutura de transcodificação para atender ao problema da heterogeneidade dos recursos de rede existentes em uma Intranet com várias subredes, cada uma com capacidade de enlace diferente. Para tanto, é concebido uma infra-estrutura de transcodificação e um protótipo de aplicação para distribuição de áudio que se utiliza da infraestrutura concebida. Na infra-estrutura de transcodificação proposta é especificado um mecanismo de adaptação ao estado da rede, retirando da aplicação e do usuário esta responsabilidade. Este mecanismo de adaptação, usa o protocolo RTP - Real Time Transport Protocol implementado em diversos formatos de áudio e vídeo disponíveis na API JMF - Java Media Framework. A distribuição de áudio, implementada e validada, subentende que a rede implemente multicast tanto em roteadores quanto em switchs. 1.2. Problemática A distribuição de áudio e vídeo em uma Intranet, além de aplicações de áudio e vídeo conferências, podem envolver diversos participantes em várias sub-redes membros. O uso de multicast, conforme visto no capítulo 4 se torna imprescindível para a otimização do uso dos recursos de rede quando há um grande número de receptores. Esta dissertação propõe uma infra-estrutura de transcodificação que usa multicast para atender apenas à distribuição de áudio em uma Intranet, definindo no entanto um modelo 1. Introdução 3 genérico para atender também às aplicações de distribuição de áudio/vídeo e áudio e vídeoconferências, conforme visto no capítulo 5. O diferencial do presente trabalho é o controle por parte do transcodificador acerca de qual formato de codificação de áudio é mais adequado às sub-redes por ele atendidas, não se levando em conta as características computacionais dos dispositivos clientes mas sim o impacto da transmissão na rede. A transcodificação, conforme visto no capítulo 5, se utiliza do fato de que os formatos de codificação de áudio, possuem qualidades e requisitos de largura de banda diferentes. A infraestrutura proposta especifica como seria a implementação da auto-adaptação coletiva dos receptores, ao definir qual codificação utilizar para a transmissão de áudio a todos os receptores em cada sub-rede diante de uma situação de congestionamento. A troca de sessão de recepção de áudio de todos os participantes de uma dada sub-rede enfrentando problemas de congestionamento, pode complicar ainda mais a situação de congestionamento que disparou o mecanismo de adaptação dos receptores caso não haja um protocolo que realiza esta troca de forma eficiente. No capítulo 6 este protocolo é definido. 1.3 Organização da Dissertação O capítulo 2 apresenta os trabalhos que tal qual esta dissertação apresentam infra-estrutura de transcodificação em rede, realizando breve comparativo com a apresentada. O capítulo 3 aborda o protocolo de aplicação / transporte RTP explicitando o mecanismo de envio de relatórios usado para manter informado tanto o transmissor quanto o receptor a respeito da qualidade dos dados multimídia (dentre outras informações) que é capaz de transportar com o auxílio do Protocolo de Transporte UDP da pilha TCP/IP. Cada um dos formatos de áudio RTP disponíveis na API JMF 2.1.1e, usados para implementar o mecanismo de transcodificação dessa dissertação, é introduzido brevemente. O conceito de multicast é abordado no capítulo 4. O mecanismo de distribuição de áudio dessa dissertação subentende a disponibilidade de multicast ao menos nos roteadores e idealmente também nos switchs em uma Intranet. O capítulo 5 apresenta a infra-estrutura de transcodificação usada, contribuição desta dissertação, explicitando as responsabilidades básicas de transmissão, transcodificação e recepção implementadas. Descreve-se o diagrama de classes e suas responsabilidades, além do protótipo 1. Introdução 4 de implementação. Usa-se Java e a API JMF 2.1.1e para a implementação da transmissão, transcodificação e recepção de áudio RTP. O mecanismo de adaptabilidade é apenas especificado. O capítulo 6 apresenta o mecanismo de adaptação ao estado da rede usado na dissertação através da definição de um protocolo para o controle de sessão no transcodificador e troca de sessão nos receptores. Ressalte-se que não foi encontrado na literatura mecanismo similar uma vez que o transcodificador guarda informações a respeito do formato de áudio RTP mais adequado a cada sub-rede onde se encontram os receptores que solicitam sincronizadamente a todos os pares de suas sub-redes a sessão multicast mais adequada à sub-rede em dado instante. Os formatos de áudio RTP, disponíveis na API JMF 2.1.1e, são analisados no capítulo 7 no ambiente de uma rede corporativa com suporte a multicast nas camadas 2 e 3, sem tráfego de background, usando-se a implementação realizada. São coletadas principalmente as estatísticas a respeito da vazão, jitter e perda de pacotes. Em um primeiro momento, são analisados os formatos de áudio RTP disponibilizados em cada uma das 3 sessões multicast do mecanismo de transcodificação e adaptação ao estado da rede projetados. Os demais formatos são analisados em seguida no mesmo capítulo. Finaliza-se no capítulo 8 com a conclusão e sugestão de trabalhos futuros. Segue o Apêndice A, explicando o processo de formação do jitter; o Apêndice B, descrevendo qualidade de serviço implementada basicamente nas camadas 2 e 3 do modelo de referência OSI através dos mecanismos de filas de priorização de quadros (IEEE 802.1P) e pacotes (DiffServ). Em anexo encontra-se ainda descrição da API JMF. 2 Projetos Relacionados Este capítulo apresenta os projetos relacionados ao conceito de transcodificação, explorado nesta dissertação, melhor detalhados a seguir: Transcodificação Baseada em Proxy [2-1]; Projeto KISS [2-2,2-3]; Projeto ICEBERG [2-4,2-5]; e, Projeto COMCAR [2-6,2-7]. 2.1. Transcodificação Baseada em Proxy Em [2-1] é proposta uma infra-estrutura de transcodificação baseada em proxy que usa um princípio denominado pelo autor de “destilação sob demanda”, cujo propósito é melhorar a qualidade de serviço e reduzir o atraso percebido pelos receptores resultando em uma melhor performance fim-a-fim e melhor qualidade dos dados de saída. O mecanismo altera os parâmetros das mídias, por exemplo no caso do vídeo, reduz as informações de cores, freqüência, resolução de pixels e taxa de quadros (frames), além de usar compressão com perda dos dados multimídia para atender às restrições impostas por diferentes clientes, tais como estações de trabalho, computadores de bolso, notebooks, cujas características de hardware, software e qualidade da conectividade variam bastante. Os autores fazem distinção entre o conceito de destilação e o de refinamento. Entende-se o primeiro como a compressão com perda de determinados tipos de dados, preservando contudo seu conteúdo semântico enquanto adaptados às restrições de largura de banda ou características computacionais dos dispositivos clientes. O segundo, refere-se à separação de partes de um objeto para serem tratados em determinado instante de forma separada do contexto total do objeto como por exemplo a realização de zoom em partes de um objeto gráfico ou a apresentação de uma determinada página ao invés de todo um documento. É definida uma arquitetura conforme ilustra a figura 2.1, abaixo, cujos principais componentes são: proxy; um ou mais destiladores de dados; monitor de conexão de rede, conhecido como NCM - Network Connector Monitor, opcional; e, a biblioteca de aplicação. 2. Projetos Relacionados 6 Figura 2.1. Arquitetura Básica do Transcodificador Baseado em Proxy [2-1] Proxy O proxy é um componente que se comunica diretamente com os clientes e os servidores, localizado estrategicamente entre eles. A tarefa dele é recuperar o conteúdo do servidor e de acordo com as características do cliente definir qual mecanismo de destilação ou tratamento dos dados multimídia será usado. A infra-estrutura de rede - através do mecanismo de destilação - é implementada no proxy, aliviando a complexidade dos componentes cliente e servidor, possibilitando o gerenciamento inteligente dos formatos de texto, áudio e vídeo mais adequados ao cliente levando-se em conta a variabilidade dos recursos da rede, do hardware e software suportados, de forma transparente à aplicação. Destiladores Os destiladores de dados são processos controlados pelo proxy que realizam adaptação tanto dos dados textuais quanto de imagens e vídeos, observando as variações nos parâmetros de rede, hardware e software que o cliente pode suportar (formatos de áudio e vídeo). NCM O monitor de conexão de rede, NCM, realiza o monitoramento fim-a-fim da largura de banda e a conectividade entre os clientes e o proxy, de forma que o proxy possa dinamicamente reagir às mudanças nas condições da rede. 2. Projetos Relacionados 7 Biblioteca de Aplicação A arquitetura do lado cliente suporta tanto aplicações modificadas quanto não modificadas. Estas últimas são auxiliadas por um agente do lado cliente. Ao invés de se preocupar com questões de formato e transporte de dados, a aplicação cliente lida com tipos de dados a nível de camada de aplicação em quaisquer formatos de codificação. Os processos de destilação e refinamento ocorrem de forma transparente à aplicação. As aplicações modificadas dispõem de uma API para interagir com o proxy e manipular dados influenciando as decisões tomadas no proxy. Sistemas legados devem ser modificados caso queiram usar as vantagens da biblioteca de suporte para interação com o proxy. Contudo, podem permanecer inalterados com o auxílio de agentes do lado cliente. O agente é um processo que funciona no dispositivo cliente e se comunica diretamente com o proxy usando a biblioteca de suporte à aplicação. A transcodificação baseada em proxy possui as seguintes desvantagens: Ausência de escalabilidade: o cliente depende de um único proxy para transcodificar o stream. Caso o número de clientes aumente muito, o proxy pode ficar sobrecarregado; Único ponto de falha: o proxy representa o único ponto de falha. Caso apresente algum problema, todos os clientes dele dependentes não receberão os streams transcodificados. Como vantagens, pode-se identificar: Cada servidor tem como papel oferecer um único conteúdo de alta qualidade ao invés de múltiplas versões do mesmo conteúdo; A complexidade do mecanismo de transcodificação é posto no proxy, aliando os componentes servidor e cliente; Servidores legados não precisam ser alterados; Os clientes confiam no proxy para a definição do conteúdo mais adequado a eles; Os clientes precisam conhecer unicamente o proxy, sem se preocupar em manter múltiplas sessões com diversos servidores. A arquitetura de transcodificação proposta nesta dissertação nos capítulos 5 e 6 possui os mesmos problemas apresentados. Caso um transcodificador falhe, o receptor precisará esperar 2. Projetos Relacionados 8 pelo retorno do serviço ou obter o serviço de um outro transcodificador, necessitando neste caso saber a sua localização através do endereço IP. O mecanismo de adaptação é separado da detecção de mudanças na rede, tal qual a implementação realizada nesta dissertação. Diferentemente da Transcodificação baseada em Proxy, a implementação realizada apresenta no cliente maior complexidade, uma vez que o mecanismo de adaptação coletiva, tendo como escopo a sub-rede IP é de sua responsabilidade. 2.2. Projeto KISS O Projeto KISS [2-2,2-3] propõe uma estrutura de comunicação para serviços de transmissão de stream em uma rede heterogênea, movendo a complexidade da aplicação para a rede como forma de enfrentar o problema da grande quantidade de formatos de codificação e compressão para aplicações que lidam com streaming e visando aliviar os componentes cliente e servidor. Esta nova abordagem para ambientes de multimídia streaming tem como conseqüência que o formato de apresentação no lado receptor não é completamente dependente do formato que é distribuído pelo transmissor, pois ao passo que o transmissor escolhe o formato mais adequado a ele, o receptor também toma a decisão de qual formato lhe é mais apropriado, levando em conta a rede, a sua capacidade de processamento e as características de hardware. Para melhorar a qualidade de recepção, o projeto KISS propõe adaptação e transcodificação na infra-estrutura de rede que são demandadas por requisitos de cada receptor. Para resolver o problema da heterogeneidade entre equipamentos de redes, servidores e clientes, vários serviços de rede transparentes à aplicação são elaborados. Assim, uma aplicação receptora ou transmissora pode usar uma conexão ponto-a-ponto entre si e uma outra aplicação conhecida como NAP – Network Access Point. O NAP geralmente se encontra na mesma LAN onde se encontra o transmissor e o receptor ou na borda entre a LAN e a WAN para enviar e receber dados. O NAP é a única aplicação a se comunicar com a aplicação do usuário através de uma interface denominada CNI – Client Network Interface. O CNI oferece métodos para encontrar um NAP, estabelecer e controlar conexões e oferecer ou obter informações da rede. Uma aplicação pode funcionar como transmissora ou receptora ao mesmo tempo. 2. Projetos Relacionados 9 Entre os NAPs há uma interface denominada NNI – Network to Network Interface que oferece métodos para propagar e requisitar informações a respeito de serviços disponíveis e são úteis para que o receptor encontre o transmissor do stream desejado. Um outro componente desta arquitetura é a aplicação provedora do serviço, conhecida como SA – Service Providing Application. Um SA oferece através do NNI um serviço bem definido para outras aplicações na rede. Este serviço pode ser um transcodificador, detecção e correção de erro, sincronização de stream ou multicast. Ressalte-se que nenhuma das aplicações finais está diretamente envolvida em qualquer dos aspectos de rede, multicast ou transcodificação. Ao invés disso, uma aplicação transmissora informa à rede através do NAP acerca do serviço oferecido. A aplicação receptora pode requisitar uma lista de serviços disponíveis, ou seja, requisitando diferentes formatos de codificação. Toda esta complexidade é deixada a cargo da infra-estrutura de rede elaborada. A figura 2.2 ilustra, simplificadamente, os componentes presentes na infra-estrutura de rede do Projeto KISS. Figura 2.2. Visão Simplificada dos Componentes da Infra-Estrutura de Rede do Projeto KISS [2-3] O NAP, como vimos, é o mediador entre as aplicações-fim e o SA. O SA oferece ao NAP seus serviços. As aplicações cliente se conectam ao NAP e requisitam os serviços. Caso o serviço solicitado não coincida com os serviços anunciados ao NAP, este tenta encontrar um serviço na rede que se adapte à solicitação. Em um cenário real, um servidor pode anunciar ao NAP mais próximo (NAP 1), por exemplo, “Audio / Vídeo ao vivo 4 Mbps, MPEG-2”. Um cliente requisita a outro NAP (NAP 2), “Áudio / Vídeo 64 kbps H.263”. NAP 2 envia mensagens multicast na rede perguntando por um 2. Projetos Relacionados 10 transcodificador que possa converter os streams de 4 Mbps para 64 kbps, ao obter a resposta de NAP1, repassa a informação a respeito da localização do serviço. A vantagem da infra-estrutura proposta no projeto KISS é que as aplicações cliente obtêm os serviços de transcodificação de uma forma transparente em relação aos SAs que podem estar instalados em qualquer lugar da rede. Novos serviços de transcodificação podem ser adicionados sem que as aplicações cliente sejam notificadas. Nesta dissertação, novos transcodificadores podem ser adicionados, no entanto, os clientes precisam saber as suas localizações através do endereço IP para poderem usar seus serviços, ou seja, este procedimento não é transparente. O mecanismo de adaptação está implementado do lado cliente, uma vez que o objetivo é otimizar o uso dos recursos da rede quando o link está saturado. O mecanismo de transcodificação é implementado no componente denominado transcodificador que também mantém informações acerca de formatos de streams mais adequados às sub-redes participantes. 2.3. Projeto ICEBERG O Projeto ICEBERG visa o desenvolvimento de uma infra-estrutura para integrar a variedade de serviços de dados e telefonia disponíveis em diversas redes de acesso e acessados por diferentes dispositivos. Implementa o conceito de portabilidade de serviço, ou seja, a possibilidade de acessar serviços usando quaisquer dispositivos, em qualquer lugar, sem interrupção, com suporte a mobilidade e adaptação dinâmica à variação dos recursos. Um componente chave proposto no Projeto ICEBERG é a infra-estrutura de serviço denominada APC - Automatic Path Creation que automaticamente adapta os dados de saída para o dispositivo do usuário, levando em consideração as atuais condições da rede. O APC permite que os serviços sejam acessados transparentemente de qualquer dispositivo em qualquer rede. Além do APC, um outro componente encontrado na arquitetura é conhecido como Operator, entendido como todo serviço baseado na Internet responsável pela transformação e adaptação dos dados. Assim, existe um Operator que realiza a conversão do formato PCM para o formato GSM dos usuários de telefonia celular; outro que implementa a correção de erro necessária ao serviço de transmissão de dados para usuários de rede sem fio; etc. 2. Projetos Relacionados 11 As propriedades de transporte, tais como confiabilidade, ordem de entrega, mecanismo de buffering e política de perdas de pacotes são encapsuladas em um componente da arquitetura conhecido como Connector. Além da conversão de formato, APC oferece ainda suporte ao conceito de mobilidade pessoal necessário aos usuários móveis, permitindo que um usuário mude de uma rede sem fio para uma rede com fio por exemplo, com mudança de endereço IP, sem que ocorra interrupção no serviço ou troca de sessão. Devido aos usuários poderem experimentar degradação da performance do serviço, ocasionado por mudanças nas condições da rede em situação de congestionamento, ou por problemas relacionados à memória e capacidade de processamento, o APC é responsável pela devida adaptação à nova condição detectada. O APC permite que os serviços sejam acessados transparentemente a partir de quaisquer dispositivos e redes, conforme pode ser observado na figura 2.3. Figura 2.3. Um Cenário Ilustrativo do APC no Projeto ICEBERG [2-4] Neste cenário, um usuário tenta recuperar informações de um serviço de mapas disponível na Internet usando um celular GSM. O APC realiza a conversão do formato HTML para o formato GSM através da extração de conteúdo, sintetização de voz e operação de codificação GSM. 2. Projetos Relacionados 12 Como desvantagem, podemos identificar que a manutenção da sessão em caso de handoff necessita da existência de um proxy, único ponto de falha. Caso ocorram problemas, o serviço fica indisponível. Como vantagens, a arquitetura bem definida; a complexidade dos serviços de adaptação e controle de sessão serem postos no APC, aliviando os componentes que ofertam os serviços daqueles que os recebem; e a disponibilização de serviços variados de transcodificação de áudio, vídeo e texto para diversos formatos. Esta dissertação implementa o mesmo conceito do APC realizando a transcodificação do stream de áudio de origem em três streams diferentes de áudio mais adequados às restrições de enlace com as diferentes sub-redes onde se encontram os receptores. O conceito de mobilidade pessoal não é aqui implementado. Caso um dispositivo mude de uma sub-rede para outra, tal mudança não mantém a sessão já iniciada que precisaria ser novamente criada. 2.4. Projeto COMCAR Foi patrocinado até 2002 pelo ministério de educação e pesquisa do governo alemão com o objetivo de conceber e implementar protótipos de rede de comunicação móvel que satisfaçam à demanda por multimídia baseada em IP e serviços de telecomunicações para trens e carros. Um aspecto importante enfocado é a qualidade de serviço, tratada através da concepção de aplicações móveis adaptativas. É parte do Projeto UMTSplus, um novo conceito de sistemas que tenta resolver o problema da universalidade e mobilidade de redes e sistemas de telecomunicação. A figura 2.4 ilustra a área de abrangência do Projeto COMCAR. 2. Projetos Relacionados 13 Figura 2.4. Área de Interesse do Projeto COMCAR [2-7] O foco está nos serviços assimétricos e interativos baseados em IP. As tecnologias de rádio e infra-estruturas tais como GSM, GPRS e UMTS são usadas e otimizadas para a oferta de serviços de alta qualidade tendo por base o IP. Também são usados sistemas de broadcast digital tais como DAB ou DVB-T. Oferece um ambiente de comunicação flexível aos parâmetros de QoS propondo para isto o desenvolvimento de um middleware para oferecer adaptação às aplicações multimídia móveis. As funcionalidades do COMCAR estão divididas em três camadas: Uma API de baixo nível para acessar as informações de rede, mapeamento de IP QoS e suporte a módulos para descoberta de serviço; Um modelo de componente para a oferta de serviços multimídia de rede. O modelo separa os componentes de manuseio das mídias daqueles de controle da aplicação. Uma API de alto nível permitindo à aplicação requisitar os serviços de comunicação multimídia. A aplicação pode definir as restrições de QoS e comportamentos alternativos para os serviços de comunicação. Uma parte da API define a interface de controle que permite à aplicação checar o status dos serviços multimídia; outra parte permite ao middleware sinalizar mudança nos serviços de comunicação para a aplicação; e, por fim, uma opcional que permite a negociação entre a aplicação e o middleware no caso do QoS requisitado não poder ser oferecido. 2. Projetos Relacionados 14 A figura 2.5 mostra a arquitetura do sistema COMCAR, onde podemos identificar os seguintes componentes: CM - Communication Manager, é a entidade central da plataforma de comunicação. Seleciona e regula a comunicação configurando parâmetros de QoS para atender às necessidades dos usuários baseado em informações dadas pelo Commom Coordination Channel e pelo Gerenciador de Profile do Usuário. Possui um componente denominado QoS-M - QoS Manager para gerenciamento do QoS; CCC-M - Commom Coordination Channel Manager é responsável por oferecer informações sobre a disponibilidade dos sistemas de comunicação e suas capacidades; SM - Session Manager oferece suporte a mudança do serviço de forma transparente ao usuário, realizando o vertical handoff, ou seja, a mudança de provedor de serviço, do sistema de comunicação ou do dispositivo de apresentação ao usuário, sem perda da sessão estabelecida; PM - Presentation Manager é responsável por gerenciar diferentes componentes de hardware e software, tais como, monitores sensíveis ao toque, dispositivos de conversão de texto para voz e vice-versa e dispositivos de áudio, etc; AH - Application Handling realiza o planejamento do serviço de entrega, o controle da aplicação e as conexões de comunicação/streams multimídia associados, além de tarefas como download de componentes necessários à aplicação. Interage com o SM, o CCC-M e o CM; MM - Media Manager são componentes usados para enviar, receber, controlar, monitorar, processar e apresentar streams multimídia, tentando manter ao máximo os requisitos de QoS. 2. Projetos Relacionados 15 Figura 2.5. Arquitetura do Sistema COMCAR [2-7] Em [5-1] é definido como parte do Projeto COMCAR [2-6] uma infra-estrutura de transcodificação especialmente para atender as limitações de recursos disponíveis em clientes móveis como celulares, palms e notebooks, conforme ilustra a figura 2.6. Figura 2.6. Infra-estrutura de Transcodificação Implementada como parte do Projeto COMCAR [5-1] Na figura, podemos observar que o stream MP3 44Khz é convertido em diferentes transcodificadores para formatos diversos mais adequados às restrições computacionais dos dispositivos clientes. Cada formato de codificação de áudio possui diferentes características quanto à qualidade e largura de banda ocupada. Como desvantagem, observe-se mais uma vez que para a implementação do serviço de vertical handoff, há a necessidade da existência de um proxy que representa um único ponto de 2. Projetos Relacionados 16 falha. As vantagens são uma API e arquitetura bem definidas; um ambiente de comunicação flexível aos parâmetros de QoS; a existência de um middleware no qual se concentra toda a complexidade, aliviando os componentes que demandam serviços e os que os ofertam. A infra-estrutura de transcodifcação do Projeto COMCAR é semelhante à implementada nesta dissertação, atendendo mais à problemática das características computacionais dos diferentes dispositivos receptores e os formatos de codificação e decodificação que estes dispositivos podem processar. O diferencial do presente trabalho é o controle por parte do transcodificador acerca de qual formato de codificação de áudio é mais adequado às sub-redes por ele atendidas não sendo levado em conta as características computacionais dos dispositivos receptores, embora o modelo apresentado no capítulo 5 esteja aberto para isto através do componente ClientConditions. 3 Real-Time Transport Protocol (RTP) Neste capítulo é abordado o protocolo de aplicação / transporte RTP explicitando o mecanismo de envio de relatórios usado para manter informado tanto o transmissor quanto o receptor a respeito da qualidade dos dados multimídia (dentre outras informações) que é capaz de transportar com o auxílio do protocolo de transporte UDP. Introduz-se ainda, brevemente, cada um dos formatos de áudio RTP disponíveis na API JMF 2.1.1e usados para implementar o mecanismo de transcodificação desta dissertação. 3.1. Apresentação RTP - Real-Time Transport Protocol é definido pelo Grupo de Trabalho Audio/Video Transport do IETF - Internet Engeneering Task Force [3-4] nas RFC 1889 [3-1] e RFC 3550 [3-2]. Esta última torna obsoleta a primeira não realizando modificações no formato dos pacotes mas somente modificações nas regras e algoritmos que regulam como o protocolo é usado. Oferece serviços de entrega fim-a-fim de dados com características de tempo real, tais como áudio e vídeo interativo. Estes serviços incluem identificação do tipo da carga útil, números de seqüência, marcas de tempo e monitoramento de entrega. Aplicações usam o RTP no topo do protocolo de transporte UDP (figura 3.1) para fazer uso de suas características de multiplexação e checksum. RTP suporta transferência de dados para múltiplos destinos usando distribuição multicast disponibilizada pela camada de rede. RTP não oferece nenhum mecanismo para garantir o tempo de entrega ou outras garantias de qualidade de serviço, confiando nas camadas inferiores para isso. Não garante entrega ou previne entrega fora da ordem, nem assume que a camada de rede abaixo seja confiável e entregue pacotes em seqüência. O número de seqüência incluso no pacote RTP permite ao receptor reconstruir a seqüência de pacotes do transmissor, além de permitir que os pacotes sejam 3. Real-Time Transport Protocol (RTP) 18 decodificados fora da seqüência para depois serem seqüenciados antes da apresentação do áudio no receptor. A figura 3.1, a seguir, ilustra o posicionamento dos protocolos RTP e RTSP - Real-Time Streaming Protocol no modelo TCP/IP. O protocolo RTSP é um protocolo de aplicação mantido pelo grupo de trabalho MMUSIC do IETF [3-6] e definido na RFC 2326 [3-7]. É referenciado por ser ideal e exclusivo para a negociação da distribuição de áudio e vídeo sob demanda funcionando como um controle remoto para a recepção dos streams distribuídos na rede. O RTSP geralmente se utiliza do protocolo RTP embora não seja dele dependente. Em aplicações de áudio e vídeo conferências, o uso do RTSP pode contribuir através de requisições semelhantes às do protocolo HTTP a servidores multimídia que então iniciam o processo de transmissão de streams que podem ser distribuídos para os participantes da conferência. Figura 3.1. Posicionamento e Interações dos Protocolos RTP/RTCP e RTSP no Modelo TCP/IP [3-3] A RFC 2508 [3-8], trata da compressão dos cabeçalhos dos datagramas IP/UDP/RTP a fim de melhorar a performance em enlaces de baixa velocidade. Tanto o cabeçalho do RTP, formado 3. Real-Time Transport Protocol (RTP) 19 por no mínimo 12 bytes, quanto o cabeçalho composto, formado por um mínimo de 40 bytes, são comprimidos para tamanhos que variam de 2 a 4 bytes. 3.2. Objetivos do RTP Inicialmente projetado para satisfazer as necessidades de conferências multimídia com vários participantes, não é limitado apenas a esta funcionalidade podendo ser também usado para armazenamento de dados contínuos, simulações interativas distribuídas entre outras. O RTP é desenvolvido para ser flexível a fim de oferecer a informação necessária para as aplicações, sendo geralmente integrado ao processamento da aplicação ao invés de ser implementado como uma camada em separado. Pode ser usado com outros protocolos das camadas de transporte, não limitado ao UDP, e de rede, não limitado ao IP, embora seja esta a combinação mais comum. É escalar, podendo ser usado tanto em aplicações unicast quanto multicast, com número de participantes variando de 2 a O(107). Conforme visto no tópico 3.3 a seguir, possibilita o transporte de dados multimídia e de controle e ainda o uso de criptografia e autenticação [3-2]. 3.3. Transporte de Dados Multimídia e de Controle O protocolo RTP é formado por duas partes intimamente ligadas: RTP - Real-Time Transport Protocol, responsável pelo transporte de dados com propriedades de tempo real, dentre os quais se encontram dados multimídia. Cada pacote RTP possui uma marcação de tempo usada para sincronização de diferentes streams de áudio e vídeo, número de seqüência usado para detecção de perda de pacotes, indicação do tipo de dado encapsulado pelo RTP, entre outros; RTCP - RTP Control Protocol, usado para transportar dados de controle com a finalidade de monitorar a qualidade de serviço e oferecer informações a respeito dos participantes em uma dada sessão RTP. participantes. O envio de pacotes RTCP é periódico e depende do número de 3. Real-Time Transport Protocol (RTP) 20 3.4. Funções RTP As funções disponibilizadas pelo protocolo RTP são: Fragmentação e remontagem de pacotes realizada pelo protocolo da camada de transporte, UDP ou similar; Reseqüenciamento, caso haja necessidade; Detecção de perda de pacotes para verificação da qualidade ou recuperação de pacotes; Sincronização intra-mídia para a remoção do jitter através do uso de buffer no receptor; Sincronização entre mídias para apresentação de streams de áudio e vídeo relacionados; Disponibilização de informações que sirvam de base para mecanismos de adaptação a fim de garantir qualidade de serviço e adaptação da taxa de transferência de áudio e vídeo; Identificação da origem de streams multimídia. 3.5. Misturador e Tradutor RTP Um misturador resincroniza os pacotes de áudio que estão chegando a fim de reconstruir o espaçamento constante de 20 ms gerado pelo transmissor, podendo mudar ou não o formato de codificação dos streams multimídia de entrada, misturando-os em um simples stream de saída. Observe na figura 3.2 que o campo SSRC - Synchronization Source, responsável por identificar a origem do stream de pacotes RTP é mudado no Misturador recebendo um novo valor para o novo stream gerado a partir dele, SSRC=52, preservando-se contudo a identificação de quais fontes de streams RTP contribuíram, CSRC - Contributing source = {6,23}. O misturador realiza ajustes de tempo entre os streams e gera seu próprio tempo para o stream combinado. Pode ser usado para atender a exigência de transmitir áudio e vídeo oriundos de várias fontes para enlaces com restrições de largura de banda. Figura 3.2. Atuação de um Misturador nos Streams Multimídia de Entrada. [3-2] 3. Real-Time Transport Protocol (RTP) 21 Um tradutor pode ser entendido como um sistema intermediário que retransmite pacotes RTP deixando intactos os campos SSRC dos streams multimídia de origem, conforme se verifica na figura 3.3 abaixo. É usado para atravessar filtros de firewall e quando não há possibilidade de retransmissão de pacotes destinado a grupos multicast localizados além do firewall. Pode ainda mudar ou não o formato de codificação do dado multimídia que chega ao tradutor, sem no entanto alterar o campo SSRC que identifica a origem do stream. Figura 3.3. Atuação de um Tradutor nos Streams Multimídia de Entrada. [3-3] 3.6. Pacote RTP O pacote RTP tem o formato observado na figura 3.4, cujos campos possuem o seguinte significado: Figura 3.4. Pacote RTP [3-2] Versão (V): Representado por 2 bits, é o identificador da versão do RTP que neste caso é a versão 2; 3. Real-Time Transport Protocol (RTP) 22 Enchimento (P): Possui apenas 1 bit que em apresentando valor 1, significa que o pacote possui um ou mais octetos adicionais no final que não fazem parte da carga útil. O último octeto do enchimento possui um contador de quantos octetos de enchimento precisam ser ignorados, incluindo ele próprio. Este campo é necessário para alguns algoritmos de criptografia ou para carregar vários pacotes RTP em uma unidade de protocolo de camada mais baixa; Extensão (X): Tem apenas um bit que se possuir valor 1 significará que o cabeçalho fixo será seguido de apenas uma extensão ao cabeçalho; Contador CSRC (CC): Possui 4 bits e representa o número de identificadores CSRC que seguem o cabeçalho fixo; Marcação (M): É representado por 1 bit cuja interpretação é definida por um profile, podendo significar, dentre outras coisas, os limites do quadro a ser marcado no stream de pacotes; Tipo da carga útil (PT): Definido por 7 bits, este campo identifica o formato da carga útil do RTP, determinando a sua interpretação pela aplicação. Um conjunto de mapeamentos padrão entre códigos de tipos de carga útil e os formatos de áudio e vídeo podem ser encontrados na RFC 3551 [3-9]. Uma fonte RTP pode mudar o tipo de carga útil durante uma sessão; sequence number: Representado por 16 bits, este número incrementa em um a cada pacote RTP enviado, sendo usado pelo receptor para detectar perda de pacotes e restaurar o seu seqüenciamento; timestamp: Definida por 32 bits, a marca de tempo reflete o instante do primeiro octeto no pacote de dados RTP. A marca de tempo é derivada do relógio do computador e é usada para a sincronização de streams multimídia e para permitir o cálculo do jitter; SSRC: Representado por 32 bits, este campo identifica a origem do stream transmitido. É escolhido aleatoriamente com a intenção de que não haja duas fontes na mesma sessão RTP que tenham o mesmo identificador. As implementações RTP estão preparadas para detectar e resolver os casos de repetições; Lista CSRC: Varia de 0 a 15 itens, cada um com 32 bits. Identifica as fontes contribuintes para a carga útil contida no pacote. O número de identificadores é dado pelo campo CC. Caso haja mais que 15 fontes contribuintes, apenas as 15 primeiras são representadas; Header extension: É um mecanismo que permite a certas implementações com novos formatos de carga útil (áudio, vídeo, etc) que necessitem de informações adicionais de 3. Real-Time Transport Protocol (RTP) 23 comprimento variável serem carregadas no cabeçalho do pacote RTP. Este mecanismo é projetado de tal forma que a extensão possa ser ignorada por outras implementações que não necessitem dela. Caso o bit X possua valor 0 é ignorado. Veja figura 3.5, adiante; payload: É o dado transportado pelo pacote RTP, tais como amostras de áudio e dados comprimidos de vídeo. Os doze primeiros octetos (figura 3.4 acima) estão presentes em cada pacote RTP, enquanto que a lista de identificadores CSRC está presente somente quando inserida por um misturador. O referencial de tempo é representado usando a marca de tempo definida para o NTP Network Time Protocol, que é apresentado em segundos relativo a 0h UTC de 1 de janeiro de 1900 [3-5]. A marca de tempo NTP é representada por um número de ponto fixo não sinalizado de 64-bit com a parte inteira representada pelos primeiros 32 bits e a fracional representada pelos últimos 32 bits. Uma implementação não necessita usar o NTP para usar RTP, a não ser quando sincronizar streams transmitidos de diferentes computadores. Os primeiros 16 bits da extensão do cabeçalho (figura 3.5 abaixo) são deixados em aberto para a definição de parâmetros, cujo formato é definido pela especificação do profile em que a implementação está operando. O campo comprimento possui 16 bits que contam o número de palavras de 32 bits, excluindo os 4 octetos da extensão do cabeçalho. Figura 3.5. Extensão do Cabeçalho do Pacote RTP [3-2] 3. Real-Time Transport Protocol (RTP) 24 3.7. Protocolo RTCP O protocolo RTCP é baseado em transmissões periódicas de pacotes de controle para todos os participantes em uma sessão usando o mesmo mecanismo de distribuição de pacotes de dados. O protocolo de transporte utilizado (geralmente UDP) abaixo deve realizar a multiplexação dos pacotes de dado e controle, como por exemplo através do uso de números de portas UDP diferentes. Suas quatro funções básicas são: Oferece à fonte de streams RTP informações dadas pelos receptores a respeito da qualidade de distribuição dos dados. Os receptores também podem usar estas informações para implementar mecanismos de adaptação ou simplesmente para apresentar informações sobre a recepção; O RTCP carrega um identificador da fonte RTP chamado de CNAME - Canonical Name. Uma vez que o identificador SSRC dos participantes pode ser modificado devido a conflitos, os receptores necessitam do CNAME para identificar o stream de cada participante. Os receptores também utilizam o CNAME para associar sessões RTP relacionadas (sincronização entre mídias), por exemplo áudio e vídeo. A sincronização entre mídias também necessita das marcas de tempo NTP e RTP; As duas funções acima requerem que todos os participantes enviem pacotes RTCP, contudo a periodicidade de transmissão dos pacotes RTCP é controlada a fim de que o RTP seja escalar a um grande número de participantes. Para isso, cada participante observa o número de participantes e usa esta informação para calcular a taxa de transmissão; RTP permite o transporte de informações mínimas de controle de sessão, por exemplo informações de identificação dos participantes que são mostradas na interface do usuário. As funções acima podem ser usadas tanto em ambiente unicast quanto multicast. Para grande número de participantes o uso de multicast torna-se imprescindível. Formato do Pacote RTCP Há vários tipos de pacotes RTCP para carregar as informações de controle: Relatório SR - Sender Report, para transmissão e recepção de estatísticas a respeito dos participantes que são transmissores ativos; Relatório RR - Receiver Report, para recepção de estatísticas dos participantes que não são transmissores; 3. Real-Time Transport Protocol (RTP) 25 Informações SDES – Source Description Itens, referentes à fonte dos streams, incluindo o CNAME; Indicação de fim de participação, BYE; Funções de Aplicações específicas, APP. Receptores RTP retornam informações a respeito da qualidade de recepção usando pacotes RTCP que podem assumir uma de duas formas dependendo do receptor ser também transmissor. A única diferença entre os relatórios de transmissão (SR) e os de recepção (RR) além do tipo de código do pacote é que o SR inclui 20 bytes de informação do transmissor, usados pelos transmissores ativos. Tanto o SR quanto o RR incluem 0 ou mais blocos de relatórios de recepção, um para cada fonte de stream do qual dado receptor recebeu pacotes de dados RTP desde o último relatório enviado. Cada bloco de relatório de recepção provê estatísticas a respeito dos dados recebidos de uma fonte indicada no bloco. Uma vez que no máximo 31 blocos de relatórios de recepção caberão em um pacote SR ou RR, pacotes RR podem ser empilhados após o pacote SR ou RR inicial a fim de conter os relatórios de recepção de todas as fontes escutadas durante o intervalo desde o último relatório enviado. A figura 3.6 abaixo ilustra o formato do pacote RTCP SR: Figura 3.6. Pacote RTCP SR [3-2] 3. Real-Time Transport Protocol (RTP) 26 O pacote SR é formado por três sessões que podem ser seguidas de uma quarta dependente do profile. A primeira, o cabeçalho, é formado por 8 bytes cujos campos possuem o seguinte significado: Versão (V): Formado por 2 bits, identifica a versão do RTP que neste caso é a versão 2; Enchimento (P): Composto por 1 bit, caso possua valor 1 significará que este pacote RTCP possui alguns octetos de enchimento adicionais no final que não fazem parte das informações de controle mas que são incluídos no campo comprimento. O enchimento é necessário para alguns algoritmos de criptografia; Contador RC - Reception Report Count: Formado por 5 bits, informa o número de blocos de relatórios de recepção contidos no pacote; PT - Packet type: Seus 8 bits contêm a constante 200 para identificar que este é um pacote RTCP SR; Comprimento: Composto por 16 bits, informa o comprimento do pacote RTCP incluindo o cabeçalho e o eventual enchimento; SSRC: Identificado por 32 bits, representa a origem do pacote SR. A segunda sessão, contém informações do transmissor e é representada por 20 octetos que estão presentes em cada pacote SR. Apresenta um resumo das transmissões realizadas por determinado transmissor. Os campos possuem o seguinte significado: Marca de tempo NTP: Composta de 64 bits, indica o tempo em que um dado relatório foi enviado de tal forma que ele possa ser comparado à marca de tempo retornada pelos RR de outros receptores a fim de medir o tempo médio de propagação até os receptores; Marca de tempo RTP: Formada por 32 bits, corresponde ao mesmo tempo indicado na marca de tempo NTP, na mesma unidade e em compatibilidade com as marcas de tempo RTP dos pacotes de dados. É usada para sincronização intra-mídia e entre mídias; Contador de pacotes do transmissor: Composto de 32 bits, corresponde ao número total de pacotes de dados transmitidos por uma fonte qualquer desde o início da transmissão até o momento em que o pacote SR foi gerado; Contador de octetos do transmissor: Possui 32 bits e representa o número total de octetos de carga útil, isto é, não incluindo cabeçalho e enchimento transmitidos em pacotes de dados 3. Real-Time Transport Protocol (RTP) 27 RTP pela fonte de streams desde o início da transmissão até o momento em que o pacote SR foi gerado. A terceira sessão contém zero ou mais blocos de relatórios de recepção dependendo do número de receptores escutados pelo transmissor desde o último relatório enviado. Cada bloco de relatório de recepção carrega informações estatísticas a respeito da recepção dos pacotes RTP de uma única fonte de transmissão. As estatísticas são: SSRC_n (identificação da fonte): Formado por 32 bits, representa o identificador SSRC da fonte a que a informação no bloco de recepção pertence; Percentual de perda: Representado por 8 bits, significa o percentual de pacotes de dados RTP originados a partir de uma fonte identificada pelo SSRC_n perdidos desde o último pacote SR ou RR enviado; Somatório do número de pacotes perdidos: Composto de 24 bits, representa o número total de pacotes de dados RTP oriundos da fonte SSRC_n que foram perdidos desde o início da recepção; Mais alto número de seqüência extendido recebido: Formado por 32 bits, os 16 bits menos significativos contêm o número de seqüência com valor mais alto recebido em um pacote de dados RTP vindo de uma fonte SSRC_n. Os 16 bits mais significativos são usados pelo receptor; Jitter: Formado por 32 bits, é uma estimativa da variação estatística do tempo de chegada entre pacotes, medido em unidades de marca de tempo e expressado como um inteiro sem sinal; Marca de tempo do último SR (LSR): Seus 32 bits são retirados da marca de tempo NTP do mais recente pacote RTCP SR recebido de uma dada fonte SSRC_n. Caso nenhum pacote RTCP SR tenha sido recebido, este campo assume valor 0; Atraso desde o último SR (DLSR): Representado por 32 bits que significam o atraso, expresso em unidades de 1/65536 segundos, entre a recepção do último pacote SR vindo da fonte SSRC_n e o momento de envio do bloco de relatório de recepção atual. Caso nenhum pacote SR tenha sido recebido, DLSR assume valor 0. Permite à fonte calcular o atraso médio do tempo de propagação até o receptor. 3. Real-Time Transport Protocol (RTP) 28 O pacote RTCP RR, figura 3.7 abaixo, é o mesmo que o SR, exceto que o campo tipo do pacote contem a constante 201 e os 20 bytes de informação do transmissor são omitidos. O restante dos campos possuem o mesmo significado. Figura 3.7. Pacote RTCP RR [3-2] Cálculo do Jitter Denomina-se tempo relativo de trânsito, à diferença entre a marca de tempo RTP e o relógio do receptor no instante de chegada do pacote, medido nas mesmas unidades. Considere Si a marca de tempo RTP para o pacote i, e Ri o tempo de chegada em unidades de tempo RTP para o mesmo pacote i, então para dois pacotes i e j, o atraso D pode ser expresso da seguinte forma: D(i,j) = (Rj – Ri) – (Sj – Si) = (Rj – Sj) – (Ri – Si) O jitter deve ser calculado continuamente, cada vez que um pacote de dados i é recebido de uma fonte SSRC_n, usando a diferença D para este pacote e o anterior, i-1, na ordem de chegada de acordo com a fórmula: J(i) = J(i-1) + ( | D(i-1,i) | - J(i-1))/16 Sempre que um pacote RR é enviado o valor J é calculado. 3. Real-Time Transport Protocol (RTP) 29 Intervalo de Transmissão RTCP RTP é projetado para permitir a aplicações se adaptarem automaticamente ao tamanho da sessão que pode variar desde poucos participantes até milhares. A quantidade de pacotes de dados multimídia é relativamente mais previsível que a quantidade de pacotes de controle. Com efeito, em uma aplicação de áudio conferência com distribuição multicast para vários participantes, é previsível que haja no máximo dois participantes falando ao mesmo tempo enquanto que os outros apenas escutam. Assim, a sessão de dados RTP possui apenas no máximo 2 participantes enquanto que os pacotes RTCP trocados crescerá linearmente com o número de participantes. O intervalo de transmissão de pacotes RTCP é então ajustado a fim de controlar a taxa de transferência quando há um número muito grande de participantes. Um conceito chave para o cálculo do intervalo de transmissão é a largura de banda da sessão. Esta, pode ser estabelecida com base no conhecimento prévio da largura de banda da rede disponível. Geralmente é representada pelo somatório das larguras de banda nominais dos transmissores esperados para serem concorrentemente ativos. A largura de banda utilizada pelo tráfego de controle (largura de banda RTCP) é fixa em 5% da largura de banda da sessão. Da largura de banda RTCP, 25% é reservada para os participantes que são transmissores de dados, enquanto que os 75% restante são reservados para os receptores caso o número de transmissores seja menor que 1/4 do número total de membros. Caso o número de transmissores seja maior que este valor, então há uma separação igual entre todos os participantes. Caso o participante não tenha enviado ainda um pacote RTCP, o intervalo mínimo para a transmissão assume valor de 2,5 segundos. A partir do instante em que o participante envia um pacote RTCP, o intervalo mínimo de transmissão assume valor de 5 segundos. O intervalo assume valor aleatório para cada participante e na média distribui o uso da largura de banda RTCP conforme explicitado no parágrafo anterior. A maior parte das modificações realizada pela RFC 3550 [3-2] frente a RFC 1889 [3-1] ocorreu no algoritmo para o cálculo do intervalo de transmissão de pacotes RTCP visando melhorar a performance para grupos muito grandes de participantes. Dentre outras alterações, podemos citar: Foi incluída uma “reconsideração” para minimizar o excesso de transmissão quando muitos participantes entram em uma sessão simultaneamente, e “reconsideração reversa” para reduzir 3. Real-Time Transport Protocol (RTP) 30 a incidência e duração do tempo de expiração de falsos participantes quando o número de participantes cai drasticamente. Esta última também pode ser usada para diminuir o atraso no envio de pacotes RTCP SR quando um participante muda de receptor para transmissor; Novas regras são definidas a fim de controlar quando um pacote RTCP BYE deve ser enviado quando um número muito grande de participantes deixa a sessão simultaneamente; Apenas os identificadores SSRC dos participantes devem ser armazenados permitindo atender a sessões com um número muito grande de participantes. 3.8. Representação Digital dos Dados de Áudio A representação digital dos dados de áudio tem a vantagem de ter alta imunidade a ruído, ser estável e reprodutível. Áudio na forma digital permite ainda a implementação de muitas funções de processamento, tais como a junção de várias fontes de áudio em uma única fonte; filtragem de determinadas freqüências de um sinal original; e, equalização, entendida como o aumento da intensidade de determinados sinais e a diminuição da intensidade de outros recuperando o sinal original perdido devido a distorções. A conversão do sinal analógico para o digital tem início separando-se o áudio de entrada em intervalos de tempo regulares e criteriosos e associando-se os valores do sinal amostrado a uma seqüência de valores binários. O método para representar cada amostra a uma palavra de código independente é chamado PCM - Pulse Code Modulation. Veja a figura 3.8. Figura 3.8. Processamento de Áudio Digital [3-12] As taxas de amostra variam entre 8 kilohertz (kHz) e 48 kHz. A taxa de 8 kHz cobre uma faixa de freqüência acima de 4 kHz, o que significa a maioria das freqüências produzidas pela voz humana. A taxa de 48 kHz cobre uma faixa de freqüência acima de 24 kHz, ou seja, adequadamente a faixa de freqüência audível que para os humanos não ultrapassa os 20 kHz. 3. Real-Time Transport Protocol (RTP) 31 Dados de áudio em um compact disk com dois canais amostrados a 44,1 kHz e 16 bits por amostra produzem uma taxa de dados de aproximadamente 1,4 megabits por segundo. Este exemplo ilustra claramente a necessidade de compressão dos dados de áudio para uma transmissão e armazenamento eficientes. Existem várias técnicas de compressão de dados de áudio com diferentes níveis de complexidade, qualidade e quantidade dos dados comprimidos. A RFC 3551 [3-9] que torna obsoleta a RFC 1890 tece algumas considerações sobre os formatos de áudio RTP [3-1] abordados nesta dissertação, presentes na API JMF 2.1.1e [An-1], conforme passamos a explicitar nos tópicos a seguir. 3.8.1. Codificação de Áudio A codificação de áudio RTP pode ser baseada em amostras ou em quadros. Codificação de Áudio Baseada em Amostra Na codificação baseada em amostra, cada amostra de áudio é representada por um número fixo de bits. Um pacote de áudio RTP pode conter qualquer número de amostras de áudio, observando que o número de bits por amostra multiplicado pelo número de amostras por pacote resulta em um número de octetos inteiro. Codificações fracionais produzem menos de um octeto por amostra. A duração de um pacote de áudio é determinada pelo número de amostras no pacote. Para codificação baseada em amostra produzindo um ou mais octetos por amostra, amostras de diferentes canais em um mesmo instante são empacotadas em octetos consecutivos. A marca de tempo RTP reflete o instante em que a primeira amostra do pacote foi amostrada, que é a informação mais antiga no pacote. Codificação de Áudio Baseada em Quadro Codifica um bloco de áudio de comprimento fixo dentro de outro bloco de dados comprimido, geralmente também de comprimento fixo. Na codificação baseada em quadro, o transmissor pode escolher combinar vários quadros em um pacote RTP único. O receptor pode saber quantos quadros estão contidos em um pacote RTP caso todos os quadros possuam o mesmo tamanho, simplesmente dividindo o tamanho da carga útil (payload) do pacote RTP pelo 3. Real-Time Transport Protocol (RTP) 32 comprimento do quadro que é definido como parte do codificador. Isto não funciona quando o tamanho do quadro é variável. Para codificadores baseados em quadro, a ordem do canal é definida para um bloco inteiro. Assim, para dois canais de áudio, amostras esquerda e direita podem ser codificadas independentemente, com o quadro codificado para o canal esquerdo precedendo o do canal direito. Todos os codificadores de áudio orientados a quadros devem estar aptos a codificar e decodificar vários quadros consecutivos dentro de um único pacote. Pacotes RTP podem conter vários quadros que são inseridos no pacote à medida que são criados, de tal forma que o quadro mais antigo e que deverá ser reproduzido primeiro no receptor ocorre imediatamente após o cabeçalho do pacote RTP. A marca de tempo RTP reflete o instante em que a primeira amostra do primeiro quadro foi amostrada, que é a informação mais velha no pacote. 3.8.2. Intervalo de Criação dos Pacotes Para pacotes de áudio, o intervalo de empacotamento padrão tem duração de 20 ms ou o tempo de criação de um quadro. O intervalo de empacotamento determina o mínimo atraso fim-a-fim. Pacotes muito longos possuem menos overhead de cabeçalho, no entanto possuem um atraso maior e sofrem mais com a perda de pacotes. Para aplicações não tempo-real ou para enlaces com restrições de largura de banda pode ser usado um intervalo de empacotamento alto. Um receptor pode aceitar pacotes contendo entre 0 e 200 ms de dados de áudio. Para codificadores de áudio baseados em quadro, um receptor deve aceitar pacotes com um número de quadros igual a 200 ms dividido pela duração de cada quadro, com o resultado arredondado para cima. Estas restrições permitem um tamanho de buffer de recepção razoável. 3.9. Formatos de Codificação de Áudio RTP Disponíveis na API JMF 2.1.1e A tabela 3.1, abaixo, apresenta os codificadores de áudio RTP disponíveis na API JMF 2.1.1e que em seguida são descritos. 3. Real-Time Transport Protocol (RTP) 33 Tabela 3.1. Codificadores de Áudio RTP Disponíveis na API JMF 2.1.1e * possuem boa qualidade para fala humana ** 16 bits por amostra na implementação disponível na API JMF 2.1.1e ND – Informação não disponível 3.9.1. DVI Usa o esquema de codificação ADPCM - Adaptative Delta Pulse Code Modulation que foi especificado pelo IMA - Interactive Multimedia Association. O IMA desenvolveu uma série de algoritmos incluindo codificadores de áudio conhecidos como ADPCM DVI ou simplesmente DVI no início dos anos 90 [3-11]. A RFC 3551 [3-9] recomenda algumas alterações do formato original ADPCM DVI. A figura 3.9 mostra um diagrama de blocos simplificado para a codificação ADPCM. O codificador ADPCM aproveita-se do fato das amostras de áudio vizinhas serem geralmente parecidas umas com as outras. Ao invés de representar cada amostra de áudio de modo independente como no PCM, um codificador ADPCM verifica a diferença entre cada amostra de áudio e a anterior de forma a gerar como saída apenas a diferença. Pela observação da figura 3.9(a) em relação à figura 3.9(b) podemos verificar que a codificação é mais complexa que a decodificação. 3. Real-Time Transport Protocol (RTP) 34 (a) Codificador ADPCM (b) Decodificador ADPCM Figura 3.9. Compressão e Descompressão ADPCM [3-11] Note-se que o codificador (figura 3.9a) usa a maioria dos componentes do decodificador (figura 3.9b), blocos Adaptative Dequantizer e Adaptative Predictor, para obter os valores previstos. A saída do bloco Quantizer é geralmente apenas uma representação do número de níveis de quantificação do sinal. O bloco Dequantizer reconstrói o valor da amostra quantificada. Alguns sistemas ADPCM requerem que o codificador forneça informações adicionais à diferença dos valores PCM. Esta informação pode servir para dois propósitos. Primeiro, em alguns esquemas ADPCM, o decodificador necessita de informações adicionais tanto para o PREDICTOR quanto para o QUANTIZER. Segundo, os dados podem oferecer informação redundante para o decodificador poder recuperar os erros em streams de bits. Um dos objetivos do algoritmo IMA ADPCM é ser simples o suficiente para permitir descompressão por software de áudio estéreo 44,1 kHz em tempo real com um mínimo de recursos computacionais. A simplicidade do IMA ADPCM reside em seu PREDICTOR. O valor previsto da amostra de áudio é o valor decodificado da amostra de áudio imediatamente anterior. 3. Real-Time Transport Protocol (RTP) 35 3.9.2. Compressão de Áudio -LAW A transformação -LAW é uma técnica básica de compressão de áudio especificado pelo CCITT - Comité Consultatif Internationale de Télégraphique et Téléphonique, recomendação G.711 [313]. É uma transformação essencialmente logarítmica por natureza com amostras de 8 bits que equivalem a 14 bits de dados de áudio linear. O espaçamento logarítmico, ao contrário da quantização linear, representa amostras de baixa amplitude de áudio com maior precisão que os valores de amplitudes mais altas. A transformação -LAW é representada pela seguinte equação: Onde x é o valor do sinal de entrada normalizado para ter um valor máximo de 1. A recomendação CCITT G.711 também especifica uma transformação A-LAW semelhante. A transformação -LAW é comumente usada para serviços de telefonia digital de 8 kHz ISDN - Integrated Services Digital Network na América do Norte e Japão enquanto que a transformação A-LAW é usada na telefonia ISDN no restante do mundo. Cada octeto G.711 é alinhado em um pacote RTP. O bit de sinal de cada octeto G.711 corresponde ao bit mais significativo do octeto em um pacote RTP (assumindo que as amostras G.711 são manuseadas como octetos nas diversas arquiteturas de computadores existentes, o bit de sinal deve ser o bit mais significativo do octeto na forma como é definido em cada arquitetura de computador). Uma descrição detalhada pode ser vista em [3-14]. 3.9.3. G.723 É especificado na recomendação ITU G. 723.1. Foi definido pelo ITU-T H.324 GSTN para aplicações de terminal de vídeo-fone. O algoritmo possui em seus anexos uma especificação de ponto flutuante, supressão de silêncio e um esquema de codificação escalar a aplicações wireless. O áudio é codificado em quadros de 30 ms com um atraso adicional de 7,5 ms (introduzidos para uso futuro). Um quadro G.723.1 pode ter três tamanhos diferentes: 24 octetos, 20 octetos, ou 3. Real-Time Transport Protocol (RTP) 36 4 octetos. Os quadros de 4 octetos são chamados SID - Silence Insertion Descriptor, usados para indicar quadros de silêncio (aplicações podem considerar a perda de pacotes contendo este tipo de quadro como irrelevante). Os últimos dois bits menos significativos do primeiro octeto no quadro determinam o tamanho do quadro e o tipo de codificador, conforme mostra a tabela 3.2. Tabela 3.2. Diferentes Tamanhos de Quadros Especificados no Algoritmo G.723 [3-9] Bits de identificação Octetos / quadro 00 24 01 20 10 4 11 Este codificador foi otimizado para representar a fala com boa qualidade e pouca complexidade. A recomendação para áudio comprimido CCITT G.721 e a G.723 são ainda esquemas de ADPCM para compressão interativa padrão de áudio compact disk [3-15, 3-16]. 3.9.4. GSM GSM - Group Special Mobile é o padrão Europeu GSM 06.10 ETS 300 961 para codificação de voz. É baseado na RPE/LTP - Regular Pulse Excitation / Long Term Prediction, onde blocos de 160 amostras de áudio de 13 bits (260 octetos) são comprimidos em 33 octetos. O RPE/LTP é um caso especial do sistema MPE-LPC - Multipulse-Excitation Linear Predictive Coding. O MPE-LPC oferece uma boa qualidade de fala a taxas de 8 a 16 kbps. A performance dos sistemas RPE é semelhante à obtida pelos codificadores MPE. No empacotamento RTP, os bits são empacotados a partir do mais significativo. 3.9.5. MPEG-1 / MPEG-2 O algoritmo de compressão de áudio MPEG - Motion Picture Experts Group, tem a codificação definida nos padrões ISO/IEC 11172-3 e 13818-3 e o encapsulamento especificado na RFC 2250 [2-17]. Permite a compressão de áudio com alta fidelidade. Assim como -Law e ADPCM, a compressão de áudio MPEG é uma compressão com perda. Testes realizados mostraram que mesmo com uma taxa de compressão de 6 para 1 (áudio estéreo de 16 bits por amostra a 48 kHz comprimidos) consegue-se alta fidelidade de reprodução de clipes de áudio especialmente escolhidos pela dificuldade de compressão [3-18]. 3. Real-Time Transport Protocol (RTP) 37 A alta performance deste algoritmo de compressão se deve à exploração de camuflagens auditivas. Esta camuflagem explora a fraqueza do ouvido humano exposto a sinais fortes de áudio que tornam os sinais fracos imperceptíveis. Este fenômeno de camuflagem do barulho foi observado e comprovado através de experimentos psico-acústicos [3-19]. O espectro audível pode ser quebrado em bandas críticas, como mostra a tabela 3.3 abaixo, que reflete a perspicácia do ouvido humano a determinadas freqüências. Sabe-se que o ouvido humano percebe freqüências que variam entre 100 Hz e 20.000 Hz. Tabela 3.3. Limite Aproximado de Bandas Críticas [3-12] Número da Banda Freqüência (Hz) * Número da Banda Freqüência (Hz) 00 50 14 1.970 01 95 15 2.340 02 140 16 2.720 03 235 17 3.280 04 330 18 3.840 05 420 19 4.690 06 560 20 5.440 07 660 21 6.375 08 800 22 7.690 09 940 23 9.375 10 1.125 24 11.625 11 1.265 25 15.375 12 1.500 26 20.250 13 1.735 * Limite superior da faixa de freqüência A figura 3.10 mostra o diagrama de blocos para o codificador e decodificador de áudio MPEG [3-20,3-21]. O stream de áudio de entrada passa filter bank, que representa um conjunto de filtros cuja função é dividir a entrada em várias sub-bandas. Simultaneamente, o áudio de entrada é submetido ao psychoacoustic model, um modelo psico-acústico [3-23,3-25,3-26,3-27], que faz a associação do sinal a uma máscara para cada sub-banda. O bloco bit or noise allocation determina quais sub-bandas são mais importantes que as outras de forma a minimizar a audibilidade de determinadas freqüências. Por fim, o último bloco - bit stream formatting, formata os dados em um stream de bits decodificável. Opcionalmente, ancillary data, ou seja, dados auxiliares de áudio não necessariamente relacionados aos dados de áudio, podem ser inseridos no stream de bits codificado. 3. Real-Time Transport Protocol (RTP) 38 O decodificador faz o inverso, reconstrói os valores quantificados para cada sub-banda para em seguida transformar o conjunto de valores de sub-banda em um sinal de áudio. Dados auxiliares são extraídos caso existam. (a) Codificação de áudio MPEG (b) Decodificação de áudio MPEG Figura 3.10. Compressão e Descompressão de Áudio MPEG [3-12] A codificação pode possuir três níveis de complexidade, denominados camada 1, 2 e 3. A camada selecionada assim como a taxa de amostragem e a indicação do canal são encontradas no payload. Áudio MPEG-1 suporta taxas de amostragem de 32; 44,1 e 48 kHz enquanto MPEG-2 suporta taxas de amostragem de 16; 22,05 e 24 kHz. O número de amostras por quadro é fixo, mas o tamanho do quadro varia com a taxa de amostragem e a quantidade de bits por amostra. Podemos ver pela tabela 3.1 que a API JMF 2.1.1e implementa MPEG-1 com taxa de amostragem de 44.100 e 48.000 Hz e MPEG-2 com taxas de amostragem de 22.050 Hz. Camada 1 Para a camada 1, o algoritmo usa um banco de filtros básicos encontrados em todas as outras camadas. O banco de filtros divide o sinal de áudio em 32 bandas de freqüência constante. Os filtros são relativamente simples e oferecem uma boa resolução de tempo com resolução de freqüência razoável em relação à percepção do ouvido humano. Possui três características principais: Primeiro, as 32 bandas de comprimento de onda constante não refletem com precisão as bandas críticas ao ouvido humano (tabela 3.3, acima). A figura 3.11 ilustra esta discrepância. 3. Real-Time Transport Protocol (RTP) 39 Podemos observar pela figura que o banco de filtros reflete com maior fidelidade as bandas críticas ao ouvido humano de freqüências mais baixas; Banco de Filtros de Banda para Áudio MPEG Limites de Bandas Críticas Figura 3.11. Limites de Bandas Críticas X Filtros de Banda para Áudio MPEG [3-12] Segundo, o banco de filtros e seu inverso não são transformações sem perda. Contudo o erro introduzido pelo banco de filtros é pequeno e inaudível; Por fim, filtros de bandas adjacentes possuem uma sobreposição de freqüência significativa, ou seja, um sinal em uma dada freqüência pode afetar dois bancos de filtros adjacentes. O codificador formata os 32 grupos de 12 amostras em um quadro com 384 amostras. Além dos dados de áudio, cada quadro contém um cabeçalho, um CRC - Cyclic Redundancy Code para checagem de palavra, opcional, e possivelmente ancillary data com dados auxiliares. Camada 2 Este algoritmo é uma melhora do definido na camada 1. Ele codifica dados em grupos mais largos de forma a melhorar a performance da compressão, formando quadros de 3 grupos de 12 amostras de áudio para cada sub-banda (32 no total), em um total de 1.152 amostras por canal de áudio. Camada 3 É um algoritmo muito mais refinado que nas outras abordagens [3-22,3-23], embora também seja baseado no mesmo banco de filtros encontrados nas duas outras camadas, a camada 3 compensa algumas deficiências do banco de filtros processando a saída dos filtros através de uma transformação discreta conhecida como MDCT. A API JMF 2.1.1e não disponibiliza áudio 3. Real-Time Transport Protocol (RTP) 40 MPEG-3 devido a problemas legais embora já o tenha feito em versões anteriores. Mais informações em [3-12]. 4 IP Multicast Neste capítulo é discutido o conceito de Multicast, necessário à distribuição de áudio implementada nesta dissertação. 4.1. Apresentação IP Multicast é uma extensão ao protocolo IP definida na RFC 1112 [4-1] cuja principal funcionalidade é permitir a transmissão de datagramas IP de uma fonte para vários destinos em uma LAN ou WAN. Com o uso do IP Multicast, aplicações enviam uma cópia da informação para o endereço do grupo permitindo que todos os receptores que tenham interesse na informação possam recebê-la. Cabe à rede fazer com que os pacotes endereçados ao grupo possam chegar às sub-redes destinatárias e aos computadores específicos. O padrão IP Multicast suporta milhares de usuários simultaneamente sem afetar substancialmente a largura de banda disponível. Os protocolos de roteamento IP Multicast oferecem entrega eficiente de datagramas IP destinados a qualquer número de participantes em uma rede heterogênea e com uma quantidade muito grande de nós. Caso o hardware de rede ofereça suporte multicast, então um único pacote destinado a vários participantes pode ser entregue sem que haja necessidade várias cópias destinadas a cada participante. 4.2. Outros Tipos de Transmissão comparados à Multicast Além do Multicast, há outros dois tipos fundamentais de endereços IPv4 associados a diferentes mecanismos de transmissão: Unicast, usado para transmitir um pacote a um único destino. Caso um nó queira enviar a mesma informação para muitos destinatários, precisará enviar uma cópia do mesmo dado a todos os destinatários. A mesma informação trafegará várias vezes pela rede e será gerada repetidas vezes pelo transmissor consumindo além dos recursos de rede, capacidade de processamento e a memória do transmissor; 4. IP Multicast 42 Broadcast, permite o envio de datagramas IP para toda uma sub-rede. Neste caso há apenas um stream de dados que é entregue a cada estação membro da sub-rede; Na trasmissão multicast, um computador não envia um tráfego a outro computador e sim a um grupo. Isto é feito através do envio de tráfego a um endereço cuja localização física é dentro de um roteador. Um cliente que deseje receber o stream multicast deverá informar ao roteador que por sua vez replicará o dado a todos os participantes. Enviar a informação apenas uma vez a um grupo de usuários gera uma economia muito grande de largura de banda. Cópias da mensagem são feitas apenas onde os caminhos divergem em outros roteadores que também precisam retransmiti-las para que cheguem até os clientes que desejam recebê-las. Veja a figura 4.1 abaixo onde as transmissões Unicast e Multicast são comparadas. Figura 4.1. Comparação entre Multicast e Unicast Membros de um grupo multicast podem estar presentes em qualquer ponto de uma rede que tenha suporte a multicast. Computadores usam o IGMP - Internet Group Management Protocol [4-1] para informar a roteadores, com suporte a multicast, quaisquer sessões multicast em que desejem participar ou sair. Se todos os membros de uma sessão multicast em uma dada sub-rede saírem do grupo, o roteador deixa de retransmitir os dados multicast para aquele segmento. 4. IP Multicast 43 4.3. Multicast em Diferentes Camadas Multicast pode ser implementado tanto na camada de enlace de dados quanto na camada de rede do modelo de referência OSI. Na camada de enlace de dados além do Ethernet, possuem também suporte a multicast outras tecnologias tais como FDDI e Token Ring. Caso a implementação de multicast seja restrita a uma LAN, basta o suporte a multicast na camada 2. Para que uma implementação multicast possa ultrapassar os limites de uma LAN, é necessário que haja suporte a multicast na camada 3. Para tanto há a necessidade de se atentar para o seguinte: Tradução de endereços da camada 3 para a camada 2; Registro dinâmico realizado pelo computador junto a um roteador para indicar que o computador é membro de um dado grupo. Para tanto a RFC 1112 [4-1] define o protocolo IGMP que especifica como um computador deve informar à rede que é membro de um dado grupo; Roteamento Multicast definido em vários padrões: o A RFC 1075 [4-2] define o DVMRP - Distance Vector Multicast Routing Protocol; o A RFC 1584 [4-3] define o Protocolo MOSPF - Multicast Open Shortest Path First que é uma extensão ao OSPF com suporte a multicast; o A RFC 2362 [4-4] define o Protocolo PIM-SM - Protocol Independent Multicast-Sparse Mode; o A Internet Draft [4-5] define o Protocolo PIM-DM - Protocol Independent Multicast-Dense Mode. 4.4. Filtro Multicast nos Switchs O comportamento padrão de um switch nível 2 seria retransmitir todo o tráfego multicast para cada porta, porém isto fere o princípio de uso do switch que é retransmitir o tráfego apenas às portas que de fato necessitam recebê-lo. IP Multicast pode ser otimizado em uma LAN pelo uso de switchs com filtro multicast. Um switch com suporte a multicast possui os mesmos benefícios que um roteador com suporte a multicast só que dentro de uma LAN. O switch pode automaticamente configurar filtros multicast 4. IP Multicast 44 de tal forma que o tráfego multicast é retransmitido apenas às portas que possuem computadores conectados que requisitaram participar da sessão, como mostra a figura 4.2 abaixo. Figura 4.2. Filtro Multicast nos Switchs IGMP Snooping é o método utilizado para tratar multicast de uma forma eficiente na camada 2. Ele requer que os switchs em uma LAN examinem algumas informações da camada 3 nos pacotes IGMP enviados entre os computadores e o roteador. Quando o switch escuta o relatório IGMP de um computador para um grupo multicast em particular, o switch adiciona o número da porta em que o computador está associado à tabela multicast mantida por ele. As mensagens de controle IGMP são transmitidas como pacotes multicast. Para os switchs implementando IGMP Snooping não há maneira de distinguir na camada 2 quais pacotes são mensagens IGMP dos que são dados multicast de tal forma que todos os pacotes de dados são examinados para saber se há informações IGMP neles. Esta análise pode provocar sérios problemas de desempenho em alguns switchs com baixa capacidade de processamento quando a 4. IP Multicast 45 taxa de transmissão dos dados é alta. A solução é implementar IGMP Snooping em switchs com hardware especial para checar os pacotes IGMP. 4.5. O Processo Multicast O processo pelo qual um cliente recebe dados multicast oriundos de um servidor através de uma rede com suporte a multicast é representado pelos seguintes passos esboçados na figura 4.3 adiante: 1. O cliente envia uma mensagem IGMP join ao roteador. O endereço MAC de destino é mapeado para o endereço classe D do grupo ao qual se deseja associar ao invés do endereço MAC do roteador. O corpo do pacote IGMP também inclui o endereço classe D do grupo; 2. O roteador registra a mensagem join e usa o protocolo PIM ou outro protocolo de roteamento multicast para adicionar o segmento à árvore de distribuição multicast; 3. O tráfego multicast transmitido a partir do servidor é agora distribuído pelo roteador para a sub-rede cliente. O endereço MAC de destino corresponde ao endereço classe D do grupo; 4. O switch recebe o pacote multicast e examina a sua tabela de retransmisão. Caso não exista nenhuma entrada para o endereço MAC, o pacote será retransmitido para todas as portas dentro do domínio broadcast. No caso de existir uma entrada na tabela do switch, o pacote será retransmitido apenas para as portas necessárias; 5. Com IGMP versão 2, o cliente pode sair do grupo multicast através do envio de uma mensagem IGMP leave ao roteador. Na versão 1 do IGMP, o cliente permanece participando do grupo até que ele falhe em retornar uma mensagem em resposta a uma consulta feita a ele pelo roteador. Roteadores multicast enviam periodicamente consultas IGMP a todos os computadores participantes do grupo multicast para determinar quais grupos ainda permanecem ativos. Cada computador atrasa a resposta à consulta por um período pequeno e aleatório. Este mecanismo previne congestionar a rede e a inundação do roteador com respostas simultâneas 4. IP Multicast 46 Figura 4.3. Processo Multicast 4.6. Conceitos de Roteamento Multicast O protocolo IP é o responsável por permitir que uma mensagem enviada a partir de uma sub-rede chegue a um destino em outra sub-rede. Cada computador possui ao menos um endereço IP que o identifica univocamente. Os roteadores enviam periodicamente mensagens de atualização aos roteadores adjacentes transportando o estado da rede conforme percebido por eles. Esta informação é armazenada em tabelas de roteamento IP que são então utilizadas para determinar os caminhos mais adequados para a retransmissão de mensagens através da rede. Em unicast, o processo de direcionamento dos datagramas ao destino não é tão complexo devido à localização física do destino ser identificada por um endereço simples. Um endereço multicast identifica uma sessão de transmissão em particular ao invés de um endereço físico específico. No roteamento multicast, os roteadores interagem uns com os outros para trocar a informação a respeito dos roteadores vizinhos. Para evitar duplicação de esforços, um único roteador é selecionado via IGMP como o roteador designado para cada sub-rede. Para transmitir a informação multicast de forma eficiente os roteadores designados constroem uma estrutura Spanning Tree que conecta todos os membros de um grupo IP multicast de tal forma que há apenas um caminho, livre de loop, entre cada par de roteadores, conforme 4. IP Multicast 47 visto na figura 4.4 adiante. A construção da árvore de distribuição é para garantir que uma cópia de cada pacote seja retransmitida para cada ponto terminal da árvore. Caso cada roteador conheça qual de suas portas pertença à árvore, ele pode copiar um datagrama multicast de entrada para cada ponto de saída gerando uma quantidade mínima de cópias, replicando os dados apenas onde há bifurcação. Isto minimiza o número de mensagens que são transmitidas através da rede. Uma vez que os grupos multicast são dinâmicos, onde os membros se associam ou desassociam a qualquer momento, é também necessário para a árvore ser atualizada dinamicamente. Galhos onde não há mais membros são cortados. O algoritmo spanning tree usado e como os roteadores multicast interagem dependem de cada protocolo de roteamento. Figura 4.4. Efeito da Aplicação do Spanning Tree a uma Rede IP Os algoritmos de roteamento multicast seguem uma de duas abordagens básicas: Modo Denso (DM): assumem que os membros de grupos multicast estão densamente distribuídos através da rede e que há alta largura de banda disponível. As árvores de 4. IP Multicast 48 distribuição DM são construídas pela inundação inicial da rede por inteiro para então cortar o pequeno número de caminhos sem receptores. Entre os protocolos dessa categoria estão incluídos: DVMRP - Distance Vector Multicast Routing Protocol [4-2], MOSPF - Multicast Open Shortest Path First [4-3], e PIM-DM - Protocol Independent Mutlicast - Dense Mode [4-5]. Modo Esparso (SM): Assume que há relativamente poucos roteadores na rede que estarão envolvidos em cada sessão multicast e que a largura de banda é pequena. Os participantes do grupo estão vastamente dispersos em WANs. Protocolos nessa categoria começam com uma árvore de distribuição vazia e adicionam galhos apenas como resultado a requisições explícitas de associação dos membros. É o caso do CBT - Core Based Trees [4-6] e PIM-SM - Protocol Independent Multicast - Sparse Mode [4-4]. 5 Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio Neste capítulo é apresentada a Infra-Estrutura de Transcodificação usada, explicitando as responsabilidades básicas de transmissão, transcodificação e recepção implementadas, descrevendo-se a Arquitetura de Classes e o Protótipo de Implementação, contribuições dessa dissertação. 5.1. Transcodificador Um transcodificador realiza a tarefa de mudar a codificação de um stream multimídia de origem em um dado formato para um stream de destino em um formato mais adequado a trafegar na rede ou a ser processado no receptor. A figura 5.1 abaixo ilustra a Infra-Estrutura de Transcodificação implementada nesta dissertação. A transcodificação é útil para que o stream de distribuição de dados multimídia possa chegar até o receptor em um formato mais adequado seja para trafegar na rede ou para ser processado em uma dada estação. As estações-fim podem ter diversas características computacionais as mais variadas possíveis como clock do Processador (Hz), capacidade de memória RAM (byte), dentre outras, conforme ilustra a tabela 5.1; a infra-estrutura de rede também pode ser caracterizada por fatores diferentes como capacidade do enlace (bits/s), atraso de propagação na rede (ms), variação estatística do atraso – jitter (ms), quantidade de pacotes perdidos. Esta dissertação, focará apenas na adaptabilidade em relação aos estados da rede não observando a adaptabilidade com relação à capacidade de processamento dos dispositivos receptores (tabelas 5.1, 5.2 e 5.3). A Infra-estrutura de transcodificação é definida em três partes como mostra a figura 5.1: transmissor, transcodificador e receptor. É concebida de uma forma genérica para os diversos tipos de aplicações multimídia, isto é, distribuição de áudio e vídeo ou aplicações de áudio e vídeo conferências. Para as aplicações de distribuição de áudio e vídeo não haveria necessidade de se ter o transmissor separado do transcodificador. Nas aplicações de áudio e vídeo conferências, esta separação se faz necessária uma vez que dois participantes podem estar 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 50 transmitindo ao mesmo tempo enquanto vários outros apenas estão recebendo os streams originados da conversação. A sincronização dos streams oriundos do transmissor em uma conferência poderia ser feita no transcodificador que então distribuiria o stream sincronizado a todos os participantes. Transmissor ... Não Concorrente ... Fonte do Stream RTP Fonte do Stream RTP Fonte do Stream RTP MPEG/RTP 44.100 Hz Transcodificador ... ... MPEG/RTP 44.100 Hz MPEG/RTP 22.050 Hz GSM/RTP 8.000 Hz Receptor Cliente A Sub-rede A Cliente B Sub-rede B Cliente C Sub-rede C Figura 5.1. Infra-Estrutura de Transcodificação Utilizada nesta Dissertação Tabela 5.1. Diferentes Configurações de Alguns Dispositivos Computacionais [5-1] Dispositivos Velocidade do Memória Tamanho da Color Depth Caixas de Cliente Processador RAM (MB) tela (pixels) (bit) som Estação de 2 GHz 512 1.600 x 1.024 32 Stereo trabalho PC 1 GHz 256 1.024 x 768 24 Notebook Stereo PC PDA 200 MHz 32 240 x 320 12 Mono O tempo para codificar ou decodificar um stream multimídia é influenciado pela velocidade do processador e pela disponibilidade de memória RAM. Os formatos de codificação possuem diferentes características com relação ao poder computacional exigido pelos dispositivos 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 51 computacionais uma vez que são baseados em algoritmos de compressão diferentes, como mostram as tabelas 5.2 e 5.3: Tabela 5.2. Algoritmos de Compressão de Áudio [5-1] Formato de Taxa de Bits por Poder Compressão de Amostra Amostra (bits) Computacional Áudio (kHz) Exigido G.711 (u-Law) 8 8 Baixo G.721 8 8 Baixo G.723 8 8 Baixo DVI 8 4 Baixo GSM 06.10 Baixo MPEG-1 Layer 1 32, 44 e 48 16 Alto MPEG-1 Layer 2 32, 44 e 48 16 Alto MPEG-1 Layer 3 32, 44 e 48 16 Alto Tabela 5.3. Algoritmos de Compressão de Vídeo [5-1] Compressão de Formato de Resolução Poder Computacional Vídeo Exigido H.261 CIF,QCIF Baixo H.263 CIF,QCIF,SQCIF,4CIF,16CIF Baixo MPEG-1 352 x 240 pixels, 30 fps Alto MPEG-1 352 x 288 pixels, 25 fps Alto MPEG-2 720 x 480 pixels, 30 fps Muito Alto MPEG-2 1920 x 1080 pixels, 30 fps Muito Alto MPEG-4 Alto Em [5-2] há maiores informações a respeito de algoritmos de compressão de áudio e vídeo. Esta dissertação aborda apenas a distribuição de áudio, no entanto, trabalhos futuros podem também envolver áudio e vídeo. O capítulo 7 aborda os formatos de codificação de áudio RTP disponíveis na API JMF e usados nesta dissertação. Heterogeneidade e Mobilidade dos Receptores A heterogeneidade tanto de dispositivos quanto de suas conexões é um sério problema para as comunicações multimídia. Uma estação de trabalho PC conectada a uma LAN de 100 Mbps pode receber um vídeo no formato MPEG sem maiores problemas; um notebook PC conectado a uma LAN sem fio pode ter problemas para reproduzir este formato de vídeo pois esta não é uma conexão adequada. Um 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 52 PDA por sua vez não conseguirá reproduzir o vídeo pois o display é muito pequeno e a conexão também pode não ser adequada. A mobilidade dos clientes também é um outro problema. Os clientes podem mudar suas conexões para outras redes congestionadas ou com largura de banda não apropriada [5-4]. Em [5-1] são descritos dois tipos de abordagens para o problema da heterogeneidade e mobilidade: foco no servidor e foco na rede. A primeira, tem a vantagem da facilidade de implementação e a desvantagem de que para cada novo formato multimídia disponibilizado, há necessidade de espaço em disco para armazená-lo; diversos serviços de distribuição multimídia na Internet implementam este tipo, permitindo ao próprio usuário selecionar o formato e o tipo de conexão mais adequado. A segunda, usa o conceito de transcodificação, ideal para o problema da heterogeneidade e mobilidade, onde há apenas um formato multimídia em disco que é convertido para outros formatos de streams multimídia; a abordagem com foco na rede é mais flexível pois o servidor armazena o dado multimídia em um único formato, no entanto tem a desvantagem de uma maior complexidade. Esta dissertação implementa o conceito de transcodificação, onde os receptores são responsáveis pela adaptabilidade, selecionando o formato mais adequado às sub-redes em que participam dentre as disponibilizadas pelo Transcodificador em diferentes sessões multicast. 5.2. Serviços da Infra-Estrutura de Transcodificação Os três serviços básicos da infra-estrutura de transcodificação são: servidor, cliente e transcodificador. Para aprimorar a infra-estrutura básica, realizando ainda a transparência de localização em uma rede, [5-1] implementou os serviços de broker e lookup. Esta dissertação implementa apenas a infra-estrutura básica. A figura 5.2, a seguir, ilustra a infra-estrutura de transcodificação. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 53 Servidor Lookup 2 1 Transcodificador 4 5 7 8 3 Cliente Broker 6 1. Transcodificador registra-se no lookup Servidor Oferece streams multimídia ao transcodificador Cliente Solicita serviço de transcodificação ao Broker 4. Broker busca localização do transcodificador no serviço de diretório 5. Lookup informa localização ao Broker 6. Broker informa localização do serviço ao cliente 7. Cliente acessa o transcodificador 8. Transcodificador oferece stream com formato de codificação mudado 2. 3. Figura 5.2. Arquitetura de Serviços de Rede para Transcodificação de Streams Multimídia [5-1] Servidor Oferece streams multimídia seja para aplicações conversacionais ou de distribuição de dados multimídia. Há vários protocolos que podem ser usados para distribuir o stream, por exemplo: HTTP, FTP, RTP. Transcodificador Muda a codificação do stream multimídia de um formato para outro que seja mais apropriado a trafegar na rede ou a ser processado no cliente. O transcodificador pode se registrar no serviço de lookup com alguns atributos, tais como endereço, formatos suportados, localização, entre outros. Em algumas implementações pode ser controlado pelo cliente que pode executar qualquer das ações play, pause, stop, rewind ou fast forward no stream, quando disponível. Em aplicações de distribuição de áudio e vídeo, o cliente apenas pode optar por receber os streams atualmente transmitidos ou não (este é o caso da implementação realizada nesta dissertação). 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 54 Cliente É um usuário final que requisita o stream e o reproduz. O cliente pode enviar informações para o broker que lhe responde informando a localização do transcodificador após consultar o serviço de lookup. Nesta dissertação a comunicação se dá diretamente entre o cliente e o transcodificador (há transparência de distribuição mas não de localização). Broker Tem por finalidade encontrar a localização do transcodificador e retornar a informação para o cliente. Ele encontra o transcodificador após realizar uma busca em um diretório armazenado no serviço de lookup. Lookup É um serviço de diretório que armazena informações sobre transcodificadores. Uma vez que o serviço de lookup é bastante crítico, é recomendado que uma rede tenha vários. O lookup também não é implementado nesta dissertação. 5.3. Arquitetura e Implementação Esta sessão apresenta a arquitetura de classes Java utilizada para a construção da infra-estrutura de transcodicação usada pela aplicação para distribuição de áudio implementada nesta dissertação. A presente dissertação possui como principais contribuições a implementação de um protótipo de software para entrega de áudio no ambiente de uma rede corporativa plana (com apenas uma sub-rede) ou com várias sub-redes e a definição de uma infra-estrutura de transcodificação, baseada em JMF, utilizada para a implementação do protótipo visto adiante. Embora com modestos objetivos a princípio, tratando apenas a distribuição de áudio, o resultado deste trabalho deve ser visto como parte de um processo que, se continuado, pode evoluir para aplicações mais avançadas, uma vez que a arquitetura apresentada é genérica, que lidem também com a distribuição de vídeo e ainda áudio e vídeo conferências. Uma vez distribuído como software livre pode ser aproveitado por instituições públicas e privadas que necessitem de aplicações semelhantes. Mencione-se ainda os custos bastante elevados para aquisição de licenças de softwares comerciais que muitas vezes inviabilizam iniciativas governamentais, 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 55 principalmente em países em vias de desenvolvimento, para a popularização de serviços característicos da Terceira Geração da Internet. Um conceito chave implementado pela infra-estrutura de transcodificação é conhecido como reflexão que pode ser entendida como a capacidade que uma determinada aplicação possui para inspecionar e adaptar o seu comportamento automaticamente em resposta a ocorrência de algum evento. Oferece o nível necessário de adaptação para as emergentes áreas de aplicações de sistemas distribuídos, ou seja, multimídia e computação móvel [5-10]. A figura 5.3, apresenta o diagrama de classes UML [5-11,5-12] da infra-estrutura de transcodificação proposta nesta dissertação, adaptado de [5-15]. Para um melhor entendimento veja também a figura 5.1. Figura 5.3. Diagrama de Classes da Infra-Estrutura de Transcodificação para Distribuição de Áudio Pela figura, pode-se identificar as camadas da Aplicação e da Infra-Estrutura de Transcodificação e a existência de dois planos fundamentais: 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 56 Plano de Controle, implementado usando RMI - Remote Method Invocation [5-13], versão Java de RPC - Remote Procedure Call, através das classes DelegateClient, CommClient, CommServer, InterfaceControleCCS, Sessoes e Participantes - melhor explicitadas a seguir. Utiliza-se ainda do protocolo RTCP/RTP [3-2], para a obtenção de informações a respeito de perda de pacotes RTP que caracteriza situação de congestionamento. Plano Multimídia, utiliza-se da API JMF que lida com o protocolo RTP e é implementado pelas classes CommClient, AVReceiveClient, AVTransmit2, CommServer, AVReceive2, Clone, AVTransmitClone. 5.3.1. Classes Identificadas As classes identificadas de acordo com responsabilidades bem definidas associam-se a dois grupos: as que assumem os papeis de transmissor, receptor ou agente-gerente de troca de sessão para a sub-rede; e, as que implementam a transcodificação. Transmissor, Receptor ou Agente-Gerente de Troca de Sessão para a Sub-rede Estas classes estão representadas em azul na figura 5.3. Suas responsabilidades são as seguintes: PlayerClientGui, permite ao usuário iniciar o serviço cliente, ou seja, transmissor ou receptor. Faz a interface gráfica com o usuário apresentando as opções transmitir e finalizar transmissão quando estiver transmitindo áudio ao transcodificador; e, escutar e finalizar escuta quando se associar a uma das três sessões de áudio iniciadas pelo transcodificador; CommClient, Possui funcionalidades tanto do transmissor, do receptor de áudio e do par gerente-agente responsável pela troca de sessão multicast de recepção - em caso de congestionamento – para toda a sub-rede IP da qual participa. Para a transmissão de áudio ao Transcodificador, instancia a classe AVTransmit2. Quando recebe áudio de uma das três sessões multicast iniciadas pelo Transcodificador, usa a classe AVReceiveClient. CommClient guarda informações a respeito da sessão multicast da qual está recebendo áudio, quando da recepção de áudio; recebe informações acerca do estado da recepção dos streams de áudio, informado por DelegateClient, e troca a sessão multicast de recepção de áudio para toda a sub-rede em caso de troca de estado, caso seja o gerente eleito para isso. Implementa 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 57 além do plano multimídia, recebendo ou enviando streams de áudio, o plano de controle pela comunicação com CommServer usando a interface RMI, InterfaceControleCCS; AVReceiveClient, responsável pela recepção dos streams de áudio RTP oriundos de uma das três sessões de áudio multicast iniciadas pelo transcodificador; AVTransmit2, é responsável pela transmissão do stream de áudio RTP ao transcodificador que ao recebe-lo, inicia três sessões multicast de áudio RTP; DelegateClient, recebe informações a respeito da quantidade de pacotes RTP perdidos e jitter, repassadas por NetConditionsGui, realizando a troca de estado e informando a troca para CommClient a fim de que seja providenciada a troca de sessão multicast de recepção para toda a sub-rede (realizado apenas pelo receptor eleito como gerente de troca de sessão para a sub-rede); NetConditionsGui, repassa para DelegateClient as informações sobre as condições da rede entre o receptor e o transcodificador, a saber: quantidade de pacotes perdidos e jitter. Apresenta uma interface gráfica para o usuário com as estatísticas RTP coletadas por RtpStats; ClientConditions, é responsável por coletar informações Management Information Base – MIBs através do protocolo Simple Network Management Protocol - SNMP a respeito do estado do computador cliente, uso de memória RAM disponível e paginação, a fim de que seja escolhida uma sessão de áudio mais apropriada às condições de processamento do computador cliente. Esta funcionalidade não será implementada nesta dissertação uma vez que a escolha da sessão de áudio se dará para todos os computadores existentes em uma subrede IP. Transcodificador As classes que assumem os papéis do transcodificador podem ser vistas em vermelho na figura 5.3. Suas responsabilidades são as seguintes: AudioDistributor, permite a inicialização do serviço transcodificador, instancia CommServer e uma interface gráfica para a indicação da inicialização do serviço; CommServer, implementa todas as funcionalidades Multimídia do transcodificador, tanto para o plano multimídia quanto para o plano de controle. Com relação ao primeiro, usa AVReceive2 para receber os streams de áudio oriundos do Transmissor. Com relação ao 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 58 segundo, usa a classse Sessoes como repositório de informações acerca das sessões multicast iniciadas, tais como endereço IP multicast, porta RTP, codificador de áudio RTP (disponível na API JMF) usado na sessão multicast; usa a classe Participantes como repositório de subredes participantes, guardando informações tais como endereço IP da sub-rede, máscara de sub-rede, endereço IP do gerente responsável pela troca de sessão RTP multicast de recepção para toda a sub-rede e sessão multicast mais adequada. Por fim, registra o serviço RMI acessado por CommClient no RMIRegistry, realizando a interface InterfaceControleCCS; Participantes, é um repositório com informações a respeito de todas as sub-redes que estão recebendo streams de áudio; Participante, representa cada sub-rede recebendo áudio RTP multicast oriundo do transcodificador. Guarda informações acerca do endereço IP da sub-rede, máscara de subrede, formato de áudio RTP (disponível na API JMF) associado à sub-rede dentre os três disponíveis no repositório Sessoes, endereço IP do gerente responsável pela troca de sessão RTP multicast de recepção para toda a sub-rede em caso de congestionamento; Sessoes, repositório responsável por guardar informações a respeito de todas as três sessões de áudio multicast iniciadas pelo transcodificador; Sessao, guarda informação sobre cada sessão multicast RTP iniciada pelo transcodificador, a saber: endereço IP multicast da sessão RTP, porta RTP, formato de áudio RTP disponível na API JMF e usado na sessão multicast; AVReceive2, é responsável pela recepção dos streams de áudio oriundos do transmissor e pela criação de três objetos clone, cada um realizando a transcodificação do formato de áudio recebido do transmissor para cada um dos três formatos de áudio RTP registrados para as sessões encontradas no repositório Sessoes; Clone, é o responsável de fato pela transcodificação do formato de áudio RTP recebido pelo transcodificador, oriundo do transmissor, para as três sessões de áudio multicast (cada uma com diferentes formatos de áudio) iniciadas pelo transcodificador e que deverão ser recebidas pelos clientes ao longo da rede. Cada objeto Clone realiza a transcodificação para cada um dos formatos de áudio RTP registrados no repositório Sessoes; AVTransmitClone, é quem de fato transmite o stream de áudio já transcodificado para um endereço multicast da rede. Cada objeto Clone possui o seu próprio objeto AVTransmitClone para a efetivação da transmissão na rede IP. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 59 5.3.2. Papéis Exercidos pelo Cliente Conforme já citado nos tópicos anteriores, o lado cliente do modelo definido pode exercer três papéis distintos: Transmissor; Receptor; e, Gerente - Agente para troca de sessão multicast da sub-rede. O Transmissor é qualquer dos clientes que inicia a transmissão de áudio ao Transcodificador para que este o distribua a outros clientes nos formatos mais convenientes a cada sub-rede IP. Pode haver apenas um transmissor por vez para este cenário de distribuição de áudio. No entanto, cenários mais complexos como o de uma conferência de áudio podem se utilizar do modelo definido. O papel de Receptor é exercido por todos os outros clientes, à exceção do Transmissor (em uma conferência, o Transmissor também seria um receptor dos membros que estivessem transmitindo). Os clientes que estão em determinada sub-rede IP recebem áudio RTP em um único formato mais adequado a toda a sub-rede IP. O Transcodificador é quem define qual formato é mais adequado dentre os três registrados no repositório Sessoes, baseado nas informações fornecidas pelo cliente - quando solicita recepção de áudio - a respeito da capacidade do enlace entre o cliente e o Transcodificador. Todos os receptores recebem estatíticas RTP e as apresentam ao usuário, no entanto cabe ao Gerente o papel de responder à situações de congestionamento e controlar a troca de formato de recepção de áudio dos outros receptores em sua sub-rede, através de broadcast detectado pelo agente presente nos outros receptores, conforme especificado no capítulo 6. Com relação ao par Gerente - Agente para a troca de sessão multicast para a sub-rede, o papel de Gerente é assumido pelo primeiro cliente de uma dada sub-rede IP a solicitar do Transcodificador os dados da sessão multicast para recepção de áudio. Ele tem por responsabilidade estar atento às mudanças de estado informadas por DelegateClient e realizar a troca de sessão de recepção de áudio para si próprio e controlar a troca de sessão, de uma forma eficiente, de todos os outros receptores da sub-rede da qual é responsável – para isto é definido um protocolo visto no Capítulo 6. Enquanto em uma dada sub-rede há apenas um Gerente, todos os outros receptores têm um Agente ativo que escuta as mensagens broadcast enviadas para toda a sub-rede pelo Gerente a fim de realizarem em conjunto a troca de sessão de recepção de áudio. Toda esta negociação é explicitada no Capítulo 6. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 60 A figura 5.4, ilustra as múltiplas funcionalidades do cliente, considerando apenas uma única sub-rede onde os receptores esboçados se encontram. Em azul, são apresentados os papéis exercidos pelo cliente; em vermelho, o Transcodificador. Observe ainda que os receptores podem ter ativos o Gerente, em amarelo, ou o Agente, em verde. Os endereços IP mostrados são apenas para indicar que o Transmissor, o Transcodificador e os Receptores podem estar em subredes IP diferentes. Sub-rede 10.107.0.0/16 Transmissor 10.107.0.15 Streams de áudio unicast RTP no formato A Sub-rede 10.109.0.0/16 Transcodificador 10.109.0.25 Streams de áudio multicast RTP no formato B Sub-rede 192.168.0.0/24 Receptor Gerente 192.168.0.10 Receptor Agente 192.168.0.20 Receptor Agente 192.168.0.30 Figura 5.4. Múltiplas Funcionalidades Assumidas pelo Cliente em uma dada Sub-rede 5.3.3. Casos de Uso Identificados e Situação de Implementação Foram identificados basicamente quatro casos de uso [5-11,5-12]: Transmitir ao Transcodificador; Iniciar Sessões de Áudio no Transcodificador; Receber Stream de Áudio RTP no Receptor; Trocar a Sessão Multicast de Recepção. Os diagramas de seqüência dos três primeiros são vistos adiante, estando especificados e implementados. O quarto, envolve a definição de um protocolo para o controle da troca de sessão 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 61 multicast de recepção pelos clientes, encontra-se apenas especificado no capítulo 6 sendo a sua implementação um trabalho futuro. Transmitir ao Transcodificador Representa a transmissão do stream de áudio RTP pelo Transmissor ao Transcodificador. Uma vez iniciado o serviço Transcodificador (veja o diagrama de seqüencia na figura 5.5), é iniciado o serviço Transmissor informando o endereço IP do Transcodificador, o endereço IP do Transmissor e a porta UDP usada para a transmissão de pacotes RTP ao transcodificador – a porta UDP usada para a transmissão e recepção de pacotes RTCP é dado pelo número da porta RTP + 1. PlayerClienGui cria um objeto denominado commClient, instância da classe CommClient, passando como parâmetros o endereço IP do Transcodificador, o endereço IP do Transmissor e a porta UDP usada para a transmissão de pacotes RTP. O objeto commClient cria um objeto denominado at, instância da classe AVTransmit2, passando como parâmetros a fonte do stream a ser transmitido, endereço IP do Transcodificador, porta UDP usada para a transmissão de pacotes RTP e o formato de áudio a ser transmitido. O usuário usa a interface Gui, clicando no botão transmite. O objeto instância da classe PlayerClientGui invoca o método solicitaTransmissao() disponível em commClient que o faz invocar o método transmite() disponível nele mesmo. O objeto commClient invoca o método start() disponível em at, recebendo em seguida a indicação de início de transmissão, Mensagem inicio transmissao. O objeto commClient realiza a invocação RMI passando como parâmetros o endereço IP do Transcodificador onde se encontra registrado o serviço RMI por nome ControleCommServer, usando o método informaTransmissao disponível no objeto commServer no lado Transcodificador, passando como parâmetros o endereço IP do transmissor, a porta RTP usada pelo transmissor e o formato de áudio transmitido para informar a commServer a transmissão de áudio ao Transcodificador. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 62 Figura 5.5. Diagrama de Seqüência do Caso de Uso Transmitir ao Transcodificador Este caso de uso encontra-se implementado conforme ilustra a figura 5.6 a seguir, onde se pode ver que uma sessão unicast para a transmissão de áudio RTP MPEG 48.000 Hz ao Transcodificador é iniciada. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 63 Figura 5.6. Inicialização do Serviço Transmissor Iniciar Sessões de Áudio no Transcodificador Este caso de uso representa o início das três sessões multicast de áudio RTP pelo Transcodificador. Após receber a invocação remota (RMI) de commClient, através do seu método recebeTransmissao, passando como parâmetros Endereço IP e Porta UDP utilizada pelo Transmissor, commServer - instância da classe CommServer, cria um objeto avReceive instância da classe AVReceive2, passando os mesmos parâmetros IP e Porta UDP. Veja o diagrama de seqüência na figura 5.7. A classe DataSource, melhor explanada no anexo A, é usada como premissa tanto para a apresentação quanto para o processamento dos dados de áudio. Uma vez avReceive inicializado, é invocado o método startClone(), disponível nele próprio para iniciar o processo de criação dos três objetos clone necessários à transcodificação do stream de áudio recebido do Transmissor. Para tanto, é necessário que o objeto dataSource, instância da 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 64 classe JMF DataSource, criado para a recepção do stream de áudio oriundo do transmissor seja transformado em um objeto dataSource clonável com o auxílio da instancia de Manager. Então, são criadas três instancias da classe Clone, clone1, clone2 e clone3 passando como parâmetros para cada uma no ato da criação: o endereço IP multicast, a porta UDP, o formato de áudio a ser utilizado na sessão e o dataSource clonável criado anteriormente e recriado para cada objeto clone. Cada objeto clone cria um objeto avt, instância de AVTransmitClone para a transmissão do stream de áudio transcodificado na sessão multicast respectiva. Para isso os parâmetros endereço IP multicast, porta UDP, formato de áudio e dataSource clonado são passados no ato da criação do objeto. Após a invocação do método start() disponível em cada objeto avt, a transmissão do stream de dados transcodificado na rede é iniciada para cada sessão multicast. Figura 5.7. Diagrama de Seqüência do Caso de Uso Iniciar Sessões de Áudio no Transcodificador 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 65 A figura 5.8, a seguir, mostra a inicialização do serviço Transcodificador e a inicialização das três sessões de áudio multicast após recepção do stream de áudio RTP oriundo do Transmissor. Figura 5.8. Inicialização do Serviço Transcodificador e Criação das Três Sessões de Áudio RTP após Recepção do Stream de Áudio Oriundo do Transmissor 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 66 Receber Stream de Áudio RTP no Receptor Representa a recepção do stream de áudio RTP no Receptor, oriundo de uma das três sessões multicast de áudio iniciadas pelo Transcodificador. O diagrama de seqüência é esboçado na figura 5.9. A recepção do stream de áudio RTP de uma das sessões de áudio iniciadas pelo transcodificador é realizada pela instância da classe AVReceiveClient. Um objeto dataSource é recuperado de stream, instancia da classe ReceiveStream, através da invocação do método getDataSource, disponível neste. O objeto dataSource recuperado é então utilizado para a criação de um objeto p, instância de Player. Isto é realizado com o auxílio de uma instância de Manager, através da invocação de seu método createPlayer, passando como parâmetro o objeto dataSource recuperado anteriormente. A seguir é instanciado um objeto pw, instancia de PlayerWindow, passando como parâmetros os objetos p e stream. O objeto pw é utilizado para apresentar ao usuário uma interface gráfica que lhe permita pausar e iniciar a recepção de áudio e ver detalhes da recepção, como mostra a figura 5.10. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 67 Figura 5.9. Diagrama de Seqüência do Caso de Uso Receber Stream de Áudio RTP no Receptor A figura 5.10, apresenta o Receptor recebendo stream de áudio RTP de uma das sessões multicast iniciadas pelo Transcodificador após solicitar ao Transcodificador informações da sessão mais adequada. Note a janela que apresenta as estatísticas de recepção. 5. Infra-Estrutura de Transcodificação e Aplicação para Distribuição de Áudio 68 Figura 5.10. Recepção e Apresentação do Stream de Áudio RTP de uma das Sessões de Áudio Multicast Iniciadas pelo Transcodificador 6 Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores O controle de sessão no transcodificador e a ocorrência da troca de sessão nos receptores, como uma resposta de adaptação a condições da rede, não é uma operação trivial. O objetivo deste capítulo é especificar um protocolo que implemente esta adaptação de forma menos onerosa à rede. A validação deste protocolo através de sua implementação na infra-estrutura de transcodificação será um trabalho futuro. 6.1. Entendendo o Problema Nesta dissertação, o transcodificador implementa 3 sessões multicast, conforme visto no capítulo 5. Cada uma tem a responsabilidade de atender a determinado perfil de usuário levando em conta o estado da rede (perda de pacotes, jitter, capacidade do enlace, vazão da sessão). Desta forma, temos implementado, os seguintes formatos de codificação de áudio distribuídos nas sessões multicast respectivas, conforme visto no capítulo 5 e analisado no capítulo 7, como mostra a tabela 6.1 Tabela 6.1. Formatos de Áudio RTP por Sessão Multicast e suas Vazões Médias Descrição Formato de Áudio Sessão 3 mpegaudio/rtp, 48000.0 Hz, 16-bit, Mono Sessão 2 Sessão 1 Sessão Multicast Vazão Média (bps) das sessões RTP * 65.686,53 IP: 239.224.222.222 Porta: 22224 mpegaudio/rtp, 22050.0 Hz, 32.926,9 IP: 239.222.222.222 16-bit, Mono Porta: 22222 gsm/rtp, 8000.0 Hz, Mono, 15.093,26 IP: 239.220.222.222 FrameSize=264 bits Porta: 22220 * Coletadas na análise realizada no capítulo 7 Nas figuras 6.1 e 6.2 a seguir, temos um cenário ilustrativo da complexidade do problema. Observe na figura 6.1 que os clientes 10.107.0.1/16, 10.107.0.2/16 estão associados à sessão multicast 2 e os outros clientes nas sub-redes 10.108.0.0/16 e 10.109.0.0/16 associados à sessão multicast 3. O Transcodificador tem o controle de qual sessão multicast é a mais apropriada para determinada sub-rede em um dado instante, conforme critérios definidos adiante. O problema a 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 70 ser solucionado refere-se a como ocorrerá a troca de sessão em todos os receptores de uma dada sub-rede em resposta a um estado de congestionamento ou em sua ausência. A idéia é que diante de uma situação de congestionamento todos os receptores de uma dada sub-rede passem a receber áudio de uma sessão que consuma menos os recursos da rede. Da mesma forma, na ausência de congestionamento, ocorre a troca para um formato de codificação que tenha uma maior qualidade de recepção embora consumindo mais recursos da rede. A figura 6.2 ilustra uma situação de congestionamento detectado pelo Receptor 10.107.0.1/16 que imediatamente solicitou ao Transcodificador mudança na sessão de áudio de 2 para 1, ou seja de mpegaudio/rtp, 22050.0 Hz para gsm/rtp, 8000.0 Hz – menos oneroso a rede. Ocorre que em dado instante, poderá acontecer que 2 receptores na sub-rede 10.107.0.0/16 recebem áudio em formatos diferentes complicando ainda mais a situação de congestionamento. É preciso que todos os receptores em uma dada sub-rede passem a receber o áudio no formato mais econômico para a rede e que esta convergência ocorra no menor tempo possível. Os tópicos a seguir tentam resolver este problema. Neste capítulo estamos abstraindo a existência de multicast, disponível nas camadas inferiores dois e três, e seus mecanismos de join group e leaving group. Este tópico é abordado no capítulo 4. Por hora o receptor ao enviar uma solicitação de troca de sessão ao transcodificador, também envia uma solicitação IGMP leave group ao roteador. Todos os outros receptores de uma dada sub-rede também enviam solicitações IGMP leave group após receberem a mensagem do receptor que controla a sub-rede. 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 71 Figura 6.1. Cenário Ilustrativo da Adaptabilidade dos Receptores e Controle do Transcodificador Figura 6.2. Cenário Ilustrativo do Problema da Adaptabilidade dos Receptores e Controle do Transcodificador em Situação de Congestionamento 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 72 6.2. Associação da Sessão Multicast mais Adequada dada a Informação da Capacidade do Enlace A vazão de um dado formato de codificação não pode ser maior que 50% da capacidade do enlace. O Receptor ao solicitar a distribuição de uma sessão multicast informa o valor do enlace mais adequado ao Transcodificador que então guarda esta informação para toda a sub-rede onde o Receptor se encontra. Novos receptores ao solicitarem a distribuição de áudio ao Transcodificador irão receber da sessão já definida para a sub-rede em questão. A tabela 6.2 abaixo associa os formatos de codificação de áudio mais adequados às capacidades de enlace. A escolha dos formatos de áudio na tabela abaixo, é apenas uma entre outras possibilidades resultantes da análise realizada no capítulo 7. Tabela 6.2. Formatos de Codificação mais Adequados às Capacidades de Enlace Formato de Codificação de Áudio Capacidade do mpegaudio/rtp, mpegaudio/rtp, gsm/rtp, 8000.0 Hz, Mono, Enlace Kbps 48.000 Hz, 16-bit, 22.050 Hz, 16-bit, FrameSize=264 bits Mono Mono < 64 64 < 128 > 128 Como mostra a tabela 6.2, podemos observar que para enlaces menores que 64 Kbps o Transcodificador apenas associará o formato gsm/rtp 8.000 Hz. Para enlaces entre 64 e 128 Kbps, poderão ser associados os formatos mpegaudio/rtp, 22050.0 Hz e gsm/rtp 8.000 Hz. Por fim, para os enlaces maiores que 128 Kbps os três formatos de áudio poderão ser associados. A adaptabilidade obedece então ao definido nesta tabela. 6.3. Eleição do Responsável pelo Controle de Troca de Sessão para uma dada Sub-rede Para evitar o problema esboçado na figura 6.2, onde vemos que a sub-rede pode ficar ainda mais congestionada caso apenas um receptor se adapte e os outros não, situação em que a sub-rede em questão recebe streams de duas sessões de áudio RTP - piorando a situação de congestionamento, é necessário que se defina um receptor em cada sub-rede que será o responsável pelo controle de troca de sessões como passamos a explicitar. A forma adotada nesta dissertação, é bem simples. O primeiro receptor de uma sub-rede será o responsável pelo controle da troca de sessão em caso de congestionamento ou em sua ausência. Antes de qualquer troca de sessão, o receptor responsável, dito Gerente, emite um 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 73 broadcast em sua sub-rede durante um período de 1 segundo solicitando aos seus pares, ditos Agentes, finalizarem a recepção de áudio, conforme esboçado na figura 6.3. Após os seus pares terem finalizado a recepção, o Gerente realiza a solicitação de troca de sessão conforme descrito nos itens 6.4 e 6.5 adiante. Feito isto, o próximo passo realizado pelo Gerente é emitir um broadcast para todos os Agentes, informando a nova sessão de recepção. Para evitar eventuais perdas de pacotes UDP, este broadcast é repetido pelo intervalo de 1 segundo. A partir deste ponto, todos os receptores de uma dada sub-rede estarão recebendo streams de áudio em um formato mais adequado às condições da rede para um dado instante. Figura 6.3. Receptores Gerente e Agente para Troca de Sessão em uma dada Sub-rede Tabela 6.3. Quadro de Mensagens Oriundas do Gerente para os Agentes em uma Sub-rede Mensagem Finaliza Recepção Informa Sessão Escuta Inicializa Recepção Parâmetros Nova Sessão Multicast, porta RTP - As mensagens explicitadas na tabela 6.3 têm por origem o Gerente e por destino os Agentes em uma dada sub-rede. A repetição no envio destas mensagens por um período de um segundo, 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 74 conforme citado anteriormente, tem por objetivo evitar eventuais perdas de pacotes que não são corrigidas pelo protocolo de transporte UDP usado. 6.4. Troca de Sessão em caso de Congestionamento Em situações de congestionamento, a troca de sessão para uma dada sub-rede ocorrerá observando o disposto na figura 6.4 abaixo. Estas sessões já foram definidas na tabela 6.1. A troca de sessão, conforme explicitado no item 6.3 anterior é de responsabilidade de apenas um receptor encarregado de trocar a sessão para toda a sua sub-rede, denominado Gerente. Sessão 3 Sessão 2 Sessão 1 Figura 6.4. Troca de Sessão em Caso de Congestionamento Assim, caso o Receptor responsável pela sua sub-rede esteja na sessão 3 passará para a sessão 2; caso esteja na sessão 2 passará para a sessão 1. O Transcodificador, por sua vez registrará a nova sessão para toda a sub-rede do Receptor em questão, de tal forma que novos receptores dessa sub-rede que venham a solicitar do Transcodificador uma sessão para recepção passarão a receber streams em um formato mais adequado para determinado instante. A troca de sessão em caso de congestionamento, melhor discutida no item 6.3 acima, é especificado pelo diagrama de seqüência UML [5-11,5-12] da figura 6.5 e pelo algoritmo do item 6.6. 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 75 Figura 6.5. Diagrama de Seqüência para Troca de Sessão pelo Receptor Gerente em Situação de Congestionamento 6.5. Troca de Sessão na Ausência de Congestionamento Na ausência de congestionamento, sem informações a respeito da utilização da largura de banda, o Receptor Gerente tentará melhorar a qualidade da recepção nos próximos 10 minutos. Caso detecte congestionamento mais uma vez diminuirá a qualidade da recepção e esperará o dobro para a próxima tentativa. Isto se repetirá até o limite de 1 hora. A partir da quarta tentativa de adaptação, o receptor esperará 1 hora para realizar nova tentativa. Neste caso vale o mesmo diagrama já definido na figura 6.5, mudando apenas a mensagem enviada por DelegateClient que informaria ausência de congestionamento. 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 76 6.6. Algoritmo de Adaptabilidade do Receptor Gerente Em [6-1] é definido um algoritmo adaptativo para redes wireless que também é baseado em coleta de estatísticas de sessões RTP. O algoritmo que hora apresentamos é uma adaptação daquele, conforme ilustra a figura 6.6. Figura 6.6. Algoritmo de Adaptabilidade do Receptor Gerente O Transcodificador (figura 5.3 do Capítulo 5), através das sessões RTP iniciadas pelos 3 objetos instanciados da classe AVTransmitClone, envia periodicamente relatórios RTCP SR para 6. Protocolo para Controle de Sessão no Transcodificador e Troca de Sessão nos Receptores 77 todos os receptores de cada uma das sessões multicast por ele mantidas. Cada Receptor recebe o stream de áudio RTP através da instância da classe AVReceiveClient enquanto que a instância de NetConditionsGui (através de RtpStats) é a responsável por coletar e mostrar as estatísticas RTCP que então são informadas a DelegateClient. Caso o percentual de pacotes perdidos tenha sido maior que 3% desde o último relatório SR recebido, então DelegateClient solicita a CommClient no Receptor Gerente a diminuição da qualidade de recepção. Caso este percentual de perda não tenha sido maior que 3%, então é verificado se a qualidade da recepção poderia ser melhor (de acordo com a capacidade do enlace informada, conforme tabela 6.2) e se o tempo desde a última tentativa de melhora de qualidade não expirou (conforme visto no item 6.5), situação em que será realizada uma nova tentativa de melhora da qualidade de recepção. Se esta nova tentativa apresentar insucesso, então o tempo para a nova tentativa será incrementado até o limite de 1 hora (item 6.5). Podemos notar ainda pelo algoritmo que pacotes RTCP perdidos também indicam situação de congestionamento de tal forma que após 3 pacotes SR terem sido perdidos consecutivamente, a qualidade de recepção é diminuída. 7 Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcodificação Neste capítulo, são analisados os formatos de áudio RTP, disponíveis na API JMF 2.1.1e no ambiente de uma rede corporativa com suporte a multicast nas camadas 2 e 3, sem tráfego de background, usando-se a implementação realizada. Apresenta-se inicialmente os formatos de áudio RTP disponibilizados em cada uma das sessões pelo Transcodificador. Os formatos de áudio são escolhidos, dentre outras possibilidades analisadas ainda no capítulo, de acordo com os requisitos da aplicação de distribuição de áudio e vazão dos streams. Deixa-se a validação da adaptabilidade especificada para a Infra-Estrutura de Transcodificação com a implementação desta funcionalidade e realização de testes com diferentes filas de priorização de pacotes no Linux, conforme discutido no Apêndice B, como um trabalho futuro. 7.1. Cenário Utilizado A análise levou em conta o ambiente de uma Rede local comutada, sem tráfego de background, conforme ilustra a figura 7.1, adiante. Como podemos observar, os computadores que hospedam o Receptor e o Transcodificador encontram-se respectivamente conectados aos switchs de borda IBM 8271 e Cisco 1924. Estes, por sua vez, possuem uplinks de 100 Mpbs para o switch de distribuição IBM 8277 onde é implementada a VLAN 107 e onde ocorre o roteamento de pacotes entre VLANs diferentes. Tanto o Transcodificador quanto o Receptor possuem um Processador Pentium IV 1,2 GHz e 256 Mbytes de memória RAM. O sistema operacional usado é Windows XP. O Transcodificador inicia uma sessão de 20 minutos de áudio com o Receptor. O buffer do receptor é configurado em 350ms, suficiente para evitar sensação de retardo em aplicações de áudio-conferências e evitar sensação de perda de segmentos de áudio na aplicação de distribuição devido ao jitter. As estatísticas são coletadas fim-a-fim, aproveitando-se da implementação do RTP disponível na API JMF. O RTP, conforme visto no Capítulo 3, além do transporte dos dados 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 79 de áudio, possui um outro protocolo denominado RTCP, responsável pelo transporte de informações de controle, tais como perda de pacotes, quantidade de pacotes recebidos, quantidade de bytes recebidos, jitter (variação estatística do atraso de pacotes), dentre outras informações. VLAN 107 Switch de Distribuição Switch IBM 8277 (10.107.100.1 255.255.0.0) 100 Mbps 100 Mbps Switchs de Borda ... Switch IBM 8271 (10.107.200.8 255.255.0.0) ... Switch Cisco 1924 (10.107.200.7 255.255.0.0) 10 Mbps ... 10 Mbps Receptor (10.107.2.125 255.255.0.0) Transcodificador (10.107.2.156 255.255.0.0) Figura 7.1. Cenário Utilizado na Análise No Receptor foram coletadas informações, através dos relatórios RTCP, a respeito da quantidade de pacotes RTP e RTCP recebidos, percentual de pacotes RTP perdidos, quantidade de pacotes RTP perdidos, quantidade de bytes recebidos, jitter e calculada a vazão; é deixado como trabalho futuro o cálculo do atraso. Estas informações são úteis para a mudança de estado do Receptor que desencadeará a mudança do formato de recepção de áudio, através da mudança sincronizada de sessão para todos os receptores de uma dada sub-rede IP, a fim de promover a adaptabilidade necessária a todo um segmento da rede quando as condições não forem as mais adequadas. Nas análises realizadas, não houve repetições do experimento, cálculo do intervalo de confiança, uma vez que os dados são reais. 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 80 Os formatos de áudio RTP analisados, disponíveis na API JMF em sua versão 2.1.1.e são explicitados na tabela 7.1, onde está indicado aqueles que estão associados a quais sessões de distribuição de áudio mantidas no Transcodificador e quais são possíveis candidatos. Tabela 7.1. Formatos de Áudio RTP e as Sessões Mantidas pelo Transcodificador Descrição dos Formatos de Áudio dvi/rtp, 8000.0 Hz, 4-bit, Mono dvi/rtp, 11025.0 Hz, 4-bit, Mono dvi/rtp, 22050.0 Hz, 4-bit, Mono uLAW/rtp, 8000.0 Hz, 8-bit, Mono, FrameSize=8 bits g723/rtp, 8000.0 Hz, Mono, FrameSize=192 bits Gsm/rtp, 8000.0 Hz, Mono, FrameSize=264 bits mpegaudio/rtp, 48000.0 Hz, 16-bit, Mono mpegaudio/rtp, 44100.0 Hz, 16-bit, Mono mpegaudio/rtp, 22050.0 Hz, 16-bit, Mono Implementado Candidato Candidato Candidato Candidato Candidato Sessão 1 Sessão 3 Candidato Sessão 2 7.2. Análise dos Formatos de Áudio RTP para as Sessões Multicast da Infra-estrutura de Transcodificação Proposta Nesta sessão são analisados os formatos de áudio RTP para as 3 sessões multicast de distribuição de áudio implementadas no Transcodificador, parte da Infra-estrutura de Transcodificação proposta. As análises levam em conta a vazão, o jitter, a quantidade de bytes, e a quantidade de pacotes RTP e RTCP recebidos no receptor, conforme visto nos tópicos a seguir. Vazão A figura 7.2 abaixo ilustra as vazões em bits/s coletadas para os formatos RTP GSM 8.000Hz, sessão 1 do Transcodificador e representado pela cor vermelha; RTP MPEG 22.050Hz, sessão 2 do Transcodificador, ilustrado na cor azul; e, RTP MPEG 48.000Hz, sessão 3 do Transcodificador, mostrado na cor verde. A associação de quais sessões poderiam estar associadas dada a informação de restrição de capacidade do enlace é vista no item 6.2 do capítulo 6. As vazões máxima média e mínima coletadas para RTP GSM 8.000Hz foram respectivamente 18.648 bits/s; 15.093,26 bits/s; e, 9.768 bits/s. Para o formato RTP MPEG 22.050Hz, a máxima apresentou 41.440 bits/s; média de 32.926,9 bits/s; e, mínima de 20.320 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 81 bits/s. Por fim, RTP MPEG 48.000Hz apresentou máxima de 87.040 bits/s; média de 65.686,53 bits/s e mínima de 54.400 bits/s. Legenda +++ GSM 8.000Hz xxx MPEG 22.050Hz ... MPEG 48.000Hz Figura 7.2. Vazões Observadas para as Sessões Multicast Mantidas pelo Transcodificador Jitter A variação do tempo médio entre a chegada de pacotes se chama jitter (item 3.7.2 e Apêndice A). O tempo médio entre a chegada de pacotes RTP deve variar de maneira suave a fim de que a reprodução do áudio no receptor possa ocorrer sem distorções. Para poder eliminar o jitter o tamanho do buffer que alimenta a aplicação destino deve variar de maneira diretamente proporcional ao tempo médio entre a chegada de pacotes. Neste experimento, conforme já mencionado, o buffer do receptor possui um tamanho de 350 ms. Da mesma forma que para a vazão, também foram coletadas informações a respeito do jitter (valores máximo e médio) para os formatos de áudio das sessões multicast mantidos pelo Transcodificador, vistos neste item, e para os demais, vistos no item seguinte, mostrados na tabela 7.1. O comportamento do jitter é ilustrado na figura 7.3. Em vermelho pode-se observar o formato RTP GSM 8.000Hz que apresentou valores máximo de 7,980347 ms e médio de 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 82 7,531637 ms. Em azul, tem-se o formato RTP MPEG 22.050Hz que apresentou valores máximo de 95,7489 ms e médio de 84,65772 ms. O formato RTP MPEG 48.000Hz pode ser visto em verde e apresentou valores máximo de 81,25305 ms e médio de 74,54516 ms. Os altos valores do jitter observados para os formatos de áudio RTP MPEG podem ser explicados pela complexidade do algoritmo de codificação e decodificação, conforme visto no item 3.9.5; pelo comportamento do sistema de coleta de lixo, usado em Java; pelo tamanho e quantidade dos pacotes RTP que não seguem o intervalo de criação padrão de 20 ms observado nos outros formatos, conforme visto na tabela 3.1 do Capítulo 3 e observado nas análises realizadas sobre a quantidade de Bytes e pacotes RTP recebidos, adiante. JVMs geralmente gastam de 15 a 20 por cento de seu tempo com o sistema de coleta de lixo [7-1]. Em [7-2] são realizados experimentos com áudio e vídeo em aplicações desenvolvidas em Java interpretado pela JVM, Java compilado através de compiladores JIT - Just in Time e C++ observando-se valores de jitter mais baixos para aplicações C++. Para aplicações de áudio-conferência, seria mais indicado os formatos de áudio que apresentaram valores de jitter mais baixos uma vez que o tamanho do buffer do receptor precisa ser abaixo de 500 ms para que não seja experimentada a sensação incômoda de atraso na propagação do áudio. Para aplicações de distribuição e reprodução de áudio o alto valor do jitter pode ser compensado por um tamanho de buffer do receptor grande, i.e. maior que 500 ms, sem problema para a qualidade da reprodução do áudio. 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 83 Legenda +++ GSM 8.000Hz xxx MPEG 22.050Hz ... MPEG 48.000Hz Figura 7.3. Jitter Observado para as Sessões Multicast Mantidas pelo Transcodificador Quantidade de Bytes, Pacotes RTP e RTCP A quantidade de bytes, pacotes RTP e RTCP recebidos no destino após os 20 minutos de análise podem ser vistas respectivamente nas figuras 7.4, 7.5 e 7.6 a seguir. Em vermelho, observa-se o formato RTP GSM 8.000Hz; em azul, vê-se o formato RTP MPEG 22.050Hz; e, em verde tem-se o formato RTP MPEG 48.000Hz. O formato RTP GSM 8.000Hz acusou 2.263.989 bytes recebidos, 20.470 pacotes RTP e 243 pacotes RTCP. O formato RTP MPEG 22.050Hz registrou 4.939.035 bytes, 4.124 pacotes RTP e 249 pacotes RTCP. Já o formato RTP MPEG 48.000Hz apresentou 9.852.980 bytes, 7.488 pacotes RTP e 257 pacotes RTCP. A quantidade de pacotes de controle, RTCP, é praticamente a mesma para os três formatos. O formato RTP GSM 8.000Hz apresentou uma quantidade maior de pacotes RTP comparativamente aos outros dois formatos MPEG, valor explicado pelo tamanho aproximado de 110 bytes do pacote RTP; o formato RTP MPEG 48.000Hz apresentou uma quantidade maior de pacotes RTP, com aproximadamente 1.315 bytes por pacote, em relação ao formato RTP MPEG 22.050Hz, com aproximadamente 1.197 bytes por pacote. 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 84 Os valores observados para a quantidade de bytes por pacote RTP, aliado a complexidade do algoritmo de codificação e decodificação MPEG, explicam os altos valores de jitter registrados. Da mesma forma, a quantidade pequena de bytes por pacote e a simplicidade do algoritmo de codificação e decodificação GSM explicam o baixo valor do jitter mensurado. Legenda +++ GSM 8.000Hz xxx MPEG 22.050Hz ... MPEG 48.000Hz Figura 7.4. Quantidade de Bytes Recebidos das Sessões Multicast Mantidas pelo Transcodificador 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 85 Legenda +++ GSM 8.000Hz xxx MPEG 22.050Hz ... MPEG 48.000Hz Figura 7.5. Pacotes RTP Recebidos das Sessões Multicast Mantidas pelo Transcodificador Legenda +++ GSM 8.000Hz xxx MPEG 22.050Hz ... MPEG 48.000Hz Figura 7.6. Pacotes RTCP Recebidos das Sessões Multicast Mantidas pelo Transcodificador 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 86 7.3. Análise dos Formatos de Áudio RTP Candidatos às Sessões Disponibilizadas pelo Transcodificador Nesta sessão são analisados os formatos de áudio RTP candidatos às sessões multicast disponibilizadas pela Infra-Estrutura de Transcodificação proposta. Da mesma forma que na sessão anterior, as análises levam em conta a vazão, o jitter, a quantidade de bytes, a quantidade de pacotes RTP e RTCP recebidos no receptor, conforme visto a seguir. Vazão A figura 7.7 ilustra as vazões observadas para os formatos candidatos às sessões multicast mantidas pelo Transcodificador, a saber: RTP DVI 22.050Hz, em amarelo; RTP MPEG 44.100Hz, cor azul claro; RTP ULAW 8.000Hz, cor laranja; RTP DVI 11.025Hz, cor azul escuro; RTP DVI 8.000Hz, cor vermelha; e, RTP g723 8.000Hz, cor verde. O formato de áudio RTP DVI 22.050Hz apresentou maiores valores de vazão entre os formatos candidatos, com vazões máxima, media e mínima respectivamente de 124.864 bits/s, 91.733,36 bits/s e 75.712 bits/s. Em seguida, tem-se o formato RTP MPEG 44.100Hz que apresentou vazões máxima, média e mínima de 82.072 bits/s, 65.729,53 bits/s e 50.792 bits/s, nesta ordem. O formato RTP ULAW 8.000Hz, aparece em terceiro com vazões máxima de 82.656 bits/s, média de 66.552,53 bits/s e mínima de 44.128 bits/s. Em quarto, tem-se o formato RTP DVI 11.025Hz com vazões máxima, média e mínima respectivamente de 58.128 bits/s, 46.920,96 bits/s e 30.448 bits/s. O formato RTP DVI 8.000Hz aparece em quinto com vazões máxima de 43.840 bits/s, média de 34.655,84 bits/s e mínima de 22.528 bits/s. Por fim, aparece o formato RTP g723 8.000Hz com vazões máxima, média e mínima respectivamente de 11.040 bits/s, 8.228,8 bits/s e 5.280 bits/s. A tabela 7.2 mostra os formatos de áudio RTP mais adequados dada a informação da capacidade do enlace. Esta informação, conforme critério adotado no item 6.2 do capítulo 6, pode ser útil para definição de quais formatos de áudio RTP estão associados a quais sessões multicast mantidas pelo Transcodificador. Desta forma, estaria associado à sessão 1 apenas o formato g723 8.000Hz; à sessão 2, os formatos DVI 8.000Hz e DVI 11.025Hz; à sessão 3, os formatos ULAW 8.000Hz, MPEG 44.100Hz, DVI 22.050Hz. 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 87 Tabela 7.2. Formatos de Codificação mais Adequados dada a Capacidade do Enlace Capacidade do Enlace (Kbps) 64 Formatos de Áudio RTP Candidatos DVI 22.050Hz MPEG 44.100Hz ULAW 8.000Hz DVI 11.025Hz DVI 8.000Hz g723 8.000Hz 64 < 128 128 Legenda ´´´´´ ULAW 8.000Hz g723 8.000Hz xxx DVI 8.000Hz ....... DVI 11.025Hz ++++ DVI 22.050Hz MPEG 44.100Hz Figura 7.7. Vazões Observadas para os Formatos de Áudio RTP Candidatos Jitter As figuras 7.8 e 7.9 ilustram o comportamento do jitter para os formatos analisados nesta sessão. Os mais altos valores de jitter observados são vistos na figura 7.8 que apresenta o formato RTP MPEG 44.100Hz em azul claro com valores de jitter máximo e médio respectivamente de 73,15063 ms e 62,27804 ms; o formato RTP DVI 22.050Hz, em amarelo, com jitter máximo de 21,8811 ms e médio de 20,70246 ms; e, o formato RTP DVI 11.025Hz, em azul escuro, com valores de jitter máximo e médio, respectivamente de 10,81848 ms e 10,34304 ms. 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 88 A figura 7.9 ilustra os mais baixos valores de jitter observados que estão em média na casa de 7 ms. São eles: RTP ULAW 8.000Hz, visto em laranja, com valores de jitter máximo e médio respectivamente de 7,919312 ms e 7,513819 ms; RTP DVI 8.000Hz, em vermelho, registrando valores máximo e médio respectivamente de 8,651733 ms e 7,52646 ms; e, RTP g723 8.000Hz, representado em verde e apresentando valor máximo de 8,285522 ms e médio de 7,566713 ms. A análise da quantidade de bytes, pacotes RTP e RTCP ajuda a explicar os valores de jitter observados, conforme visto adiante. Legenda ....... DVI 11.025Hz ++++ DVI 22.050Hz MPEG 44.100Hz Figura 7.8. Maiores Valores de Jitter Observados para os Formatos de Áudio RTP Candidatos 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 89 Legenda ´´´´´ ULAW 8.000Hz g723 8.000Hz xxx DVI 8.000Hz Figura 7.9. Menores Valores de Jitter Observados para os Formatos de Áudio RTP Candidatos Quantidade de Bytes, Pacotes RTP e RTCP A figura 7.10 ilustra a quantidade de bytes recebidos para os formatos de áudio RTP candidatos às sessões multicast disponibilizadas pelo Transcodificador durante o intervalo analisado, apresentando em amarelo o formato RTP DVI 22.050Hz; em laranja o formato RTP ULAW 8.000Hz; em azul claro o formato RTP MPEG 44.100Hz; em azul escuro o formato DVI 11.025Hz; em vermelho o formato RTP DVI 8.000Hz; em verde o formato g723 8.000Hz. O formato RTP DVI 22.050Hz registrou 13.760.004 bytes, 20.569 pacotes RTP e 240 pacotes RTCP, aproximadamente 669 bytes por pacote RTP. O formato RTP ULAW 8.000Hz apresentou 9.982.880 bytes, 20.496 pacotes RTP e 244 pacotes RTCP, aproximadamente 487 bytes por pacote RTP. O formato RTP MPEG 44.100Hz registrou 9.859.430 bytes, 7.994 pacotes RTP e 244 pacotes RTCP, aproximadamente 1233 bytes por pacote RTP. O formato RTP DVI 11.025Hz acusou 7.038.144 bytes, 20.527 pacotes RTP e 239 pacotes RTCP, aproximadamente 343 bytes por pacote RTP. O formato RTP DVI 8.000Hz registrou 5.198.376 bytes, 20.475 pacotes RTP e 242 pacotes RTCP, aproximadamente 254 bytes por pacote RTP. Por fim, o 7. Análise dos Formatos de Áudio RTP para a Infra-estrutura de Transcoficação 90 formato g723 8.000Hz apresentou 1.234.320 bytes, 20.500 pacotes RTP e 250 pacotes RTCP, aproximadamente 60 bytes por pacote RTP. A quantidade de pacotes RTP registrados para todos os formatos analisados permaneceu aproximadamente na faixa de 20.500, exceto para o formato RTP MEG 44.100Hz que registrou 7.994. Com relação à quantidade de pacotes RTCP observada, todos os formatos analisados apresentaram quantidade próxima a 240. O alto valor observado para o jitter no formato RTP MPEG 44.100Hz, da mesma forma que na sessão 7.2, pode ser explicado pela quantidade de bytes por pacote RTP, aproximadamente 1233; pela complexidade do algoritmo de codificação e decodificação MPEG; pelo uso de Java, não otimizado para aplicações com características de tempo real. A baixa complexidade dos algoritmos de codificação e decodificação dos demais formatos de áudio RTP, explica os valores de jitter mais baixos. Legenda ´´´´´ ULAW 8.000Hz g723 8.000Hz xxx DVI 8.000Hz ....... DVI 11.025Hz ++++ DVI 22.050Hz MPEG 44.100Hz Figura 7.10. Quantidade de Bytes Recebidos para os Formatos de Áudio RTP Candidatos 8 Conclusão e Trabalhos Futuros A demanda crescente por aplicações que tratem mídias até então não presentes nas redes convencionais encontra problemas na falta de mecanismos, a nível das camadas de enlace de dados, redes e aplicação do modelo de referência OSI, que por um lado garantam os requisitos de largura de banda e controle do jitter e por outro permitam a adaptação à heterogeneidade dos recursos de rede e variabilidade de seus estados. Esta dissertação, realiza um levantamento dos mecanismos para garantia de recursos de rede no apêndice B e propõe uma infra-estrutura de transcodificação adaptável ao estado da rede tendo por base a monitoração da perda de pacotes RTP. Foram definidos quatro casos de uso principais para a infra-estrutura de transcodificação proposta no capítulo 5, a saber: Transmitir ao Transcodificador; Iniciar Sessões de Áudio no Transcodificador; Receber Stream de Áudio RTP no Receptor; e, Trocar a Sessão Multicast de Recepção. Destes, os três primeiros foram implementados, conforme visto no capítulo 5, e validados, conforme visto nas análises do capítulo 7; o quarto, foi apenas especificado, conforme visto no capítulo 6, sendo a sua implementação e validação em cenário com filas diferenciadas de priorização de pacotes na camada de rede, visto no apêndice B, um trabalho futuro. O uso da linguagem Java e JMF possui a vantagem de facilitar a implementação, mas peca pelo desempenho desejável (e.g. áudio MPEG RTP, capítulo 7) principalmente quando o foco são aplicações com características de tempo real onde há fortes restrições para se manter a qualidade a todos os participantes envolvidos, como é o caso de conferências de áudio e vídeo. O mecanismo de distribuição de áudio visto no capítulo 5, extensível a distribuição de vídeo em uma Intranet, contribuição dessa dissertação, não encontra similar na literatura uma vez que o Transcodificador guarda informações a respeito das sub-redes participantes - o formato de áudio RTP mais adequado a cada sub-rede em um dado instante – ofertando aos receptores três sessões multicast de áudio RTP às quais devem se associar de acordo com o estado da rede e não o fazendo de forma individual mas coletiva envolvendo os pares das sub-redes onde se encontram. 8. Conclusão e Trabalhos Futuros 92 Com relação aos trabalhos futuros, pode-se identificar: A implementação do mecanismo de adaptação especificado nessa dissertação uma vez que se encontra implementado apenas a distribuição, recepção e transcodificação de áudio RTP; A evolução da infra-estrutura de transcodificação proposta e da aplicação para a distribuição das mídias de áudio e vídeo; A evolução da infra-estrutura de transcodificação e da aplicação para disponibilizar conferências de áudio e vídeo entre os participantes. Esse mecanismo, aliado à distribuição de áudio e vídeo cujo princípio de funcionamento já se encontra explicitado nessa dissertação, é ideal para aplicações de ensino a distância; O protocolo de aplicação RTSP, citado no capítulo 3, cujo princípio de funcionamento é semelhante ao de um controle remoto para servidores multimídia, pela sua semelhança de funcionamento ao protocolo de aplicação HTTP surge como ótima opção a espraiar o uso de aplicações avançadas tanto no ambiente de uma Intranet quanto na Internet. Implementações exclusivas para a distribuição de mídia sob demanda podem “pegar carona” no sucesso da Web através da implementação desse protocolo; Validação do mecanismo de adaptação à rede fazendo-se uso dos mecanismos de garantias da qualidade de serviço: reserva de recursos, mecanismos de priorização de quadros (IEEE 802.1P) e pacotes (DiffServ). O Sistema Operacional Linux já possui a funcionalidade de priorização de pacotes a nível da camada de rede, conforme citado no apêndice B. Referências [2-1] FOX, A.; GRIBBLE, S. D.; BREWER, E. A.; AMIR, E. Adapting to Network and Client Variatiability via On-Demand Dynamic Distillation. In: INTERNATIONAL CONFERENCE, 17. Asplos, 1996. [2-2] JONAS, K. Forget the Net! Architecture, Specification and Implementation of a Communication System for Real-time Streaming in Heterogeneous Environments. In: Pacific Workshop on Distributed Multimedia Systems. Vancouver, 1997. [2-3] JONAS, K.; KRETSCHMER, M.; MÖDEKER, J. J. Get a KISS – Communication Infrastructure for Streaming Services in a Heterogeneous Environment. In: ACM MULTIMEDIA 98. Bristol, 1998. [2-4] MAO, Z. M.; KATZ, R. Achieving Service Portability in ICEBERG. California: University of California at Berkeley, 2000. [2-5] WANG, H. J. et al. ICEBERG: An Internet-core Network Architecture for Integrated Communications. In: IEEE Personal Communications (2000): Special Issue on IP-Based Mobile Telecommunication Networks, 2000. [2-6] COMCAR – COMMUNICATION AND MOBILITY BY CELLULAR ADVANCED RADIO. Disponível na Internet em http://www.comcar.de, 2003. [2-7] KOVACS, E. et al. Adaptative Mobile Application over Cellular Advanced Radio. In: IEEE PIRMC2000. London: 2000. [3-1] SCHULZRINNE, H. et al. RTP: A Transport Protocol for Real-Time Applications. RFC 1889. 1996. [3-2] SCHULZRINNE, H. et al. RTP: A Transport Protocol for Real-Time Applications. RFC 3550. 2003. [3-3] ROCA, V. RTP/RTCP and RTSP – Multimedia Protocols for the Internet. Projet Planèt. Inria Rhône-Alpes. 2001. [3-4] GRUPO DE TRABALHO AUDIO/VIDEO TRANSPORT. Internet Engineering Task Force – IETF. Página da Internet em http://www.ietf.org/html.charters/avt-charter.html, 2003. [3-5] MILLS, Da. Network Time Protocol (Version 3) Specification, Implementation and Analyses. RFC 1305. 1992. [3-6] GRUPO DE TRABALHO MMUSIC - MULTIPARTY MULTIMEDIA SESSION CONTROL. Internet Engineering Task Force – IETF. Página da Internet em http://www.ietf.org, 2003. [3-7] SCHULZRINE, D.; RAO, A.; LANPHIER, R. Real Time Streaming Protocol – RTSP. RFC 2326. 1998. [3-8] CASNER, S.; JACOBSON, V. Compressing IP/UDP/RTP Headers for Low-Speed Serial Links. RFC 2508. 1999. [3-9] SCHULZRINNE, H.; CASNER, S. RTP Profile for Audio and Video Conferences with Minimal Control. RFC 3551. 2003. [3-10] HOFFMAN, D.; FERNANDO, G.; GOYAL, V. RTP Payload Format for MPEG1/MPEG2 Video. RFC 2038. 1996. [3-11] IMA DIGITAL AUDIO FOCUS AND TECHNICAL WORKING GROUPS. Recommended practices for enhancing digital audio compatibility in multimedia systems. Maryland: Interactive Multimedia Association, 1992. [3-12] YEN PAN, D. Digital Audio Compression. Digital Technical Journal. Vol. 5, n. 2, 1993. Referências 94 [3-13] CCITT - COMITÉ CONSULTATIF INTERNATIONAL TÉLÉPHONIQUE ET TÉLÉGRAPHIQUE. Recommendation G.711: Pulse Code Modulation (PCM) of Voice Frequencies. 1972. [3-14] JAYANT, N. S.; NOLL, P. Digital Coding of Waveforms – Principles and Applications to Speech and Video Englewood Cliffs. Prentice-Hall, 1984. [3-15] NISHIGUCHI, M.; AKAGIRI, K.; SUZUKI, T. A New Audio Bit Rate Reduction System for the CD-I Format. In: Audio Engineering Society Convention, 81. Los Angeles: 1986. [3-16] TAKAHASHI, Y. et al. Study and Evaluation of a New Method of ADPCM Encoding. In: Audio Engineering Society Convention,86. Hamburg: 1989. [3-17] HOFFMAN, D. et al. RTP Payload Format for MPEG1/MPEG2 Video. RFC 2250. 1998. [3-18] GREWIN, C.; RYDEN, T. Subjective Asseseements on Low-Bit rate Audio Codecs. In: International Audio Engineering Society Conference, 10. Londres: 1991. [3-19] TOBIAS, J. Foundations of Modern Auditory Theory. Academic Press. New York & London: 1970. [3-20] BRANDENBURG, K.; STOLL, G. The ISO/MPEGAudio Codec: A Generic Standard for Coding of High Quality Digital Audio. In: Audio Engineering Society Convention,92. Vienna: 1992. [3-21] BRANDENBURG, K.; HERRE, J. Digital Audio Compression for Professional Applications. In: Audio Engineering Society Convention, 92. Vienna: 1992. [3-22] BRANDENBURG, K.; JOHNSTON, J. D. Second Generation Perceptual Audio Coding: The Hybrid Coder. In: Audio Engineering Society Convention,88. Montreaux: 1990. [3-23] BRANDENBURG, K et al. ASPEC: Adaptive Spectral Perceptual Entropy Coding of High Quality Music Signals. In: Audio Engineering Society Convention, 90. Paris: 1991. [3-25] Huffman, D. A. A Method for the Construction of Minimum Redundancy Codes. In: IRE. 1962. [3-26] JOHNSTON, J. D. Estimation of Perceptual Entropy Using Noise Masking Criteria. In: IEEE International Conference on Acoustics, Speech, and Signal Processing. 1988. [3-27] JOHNSTON, J. D. Transform Coding of Audio Signals Using Perceptual Noise Criteria. IEEE Journal on Selected Areas in Communications, fev. 1988. [4-1] DEERING, S. Host Extensions for IP Multicasting. RFC 1112. 1989. [4-2] WAITZMAN, D.; PARTRIDGE, C.; DEERING, S. Distance Vector Multicast Routing Protocol. RFC 1075. 1988. [4-3] MOY, J. Multicast Extensions to OSPF. RFC 1584. 1994. [4-4] ESTRIN, D. et al. Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol Specification. RFC 2362. 1998. [4-5] ADAMS, A.; NICHOLAS, J.; SIADAK, W. Protocol Independent Multicast Dense Mode. Internet Draft. 2003. [4-6] BALLARDIE, A. Core Based Trees (CBT) Multicast Routing Architecture. RFC 2201. 1997. [5-1] PRANATA, A. Development of Network Service Infrastructure for Transcoding Multimedia Streams. University of Stuttgart. Faculty of Computer Science, 2002. [5-2] GUOJUN, L. Communication and Computing for Distributed Multimedia Systems. Norwood: Artech House Inc. 1996. [5-3] STEINMETZ, R.; NAHRSTEDT, K. Multimedia: Computing, Communications and Applications. Prentice Hall Inc. 1995. [5-4] CHALMERS, D.; SLOMAN, M. Survery of Quality of Service in Mobile Computing Environments. London: Imperial College. Department of Computing. 1999. Referências 95 [5-5] SCHIMIDT, D. C. Applying Design Patterns and Frameworks to Develop ObjectOriented Communication Software. St. Louis: Washington University. 1997. [5-6] JOHNSON, R.; FOOTE, B. Designing Reusable Classes. Journal of Object-Oriented Programming: Junho, 1988. [5-7] GAMMA, E. et al. Design Paterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. 1995. [5-8] JOHNSON, R. Frameworks = Patterns + Componentes. Communications of the ACM. 1997. [5-9] STEPANOV, A.; LEE, M. The Standard Template Library. Hewlett-Packard Laboratories. 1994. [5-10] Blair, G. S. et al. Supporting Dynamic QoS Management Functions in a Reflexive Middleware Platform. IEEE. 2000. [5-11] BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. The Unified Modeling Language User Guide. Ed. Addison-Wesley. 1999. [5-12] BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. The Unified Software Development Process Ed. Addison-Wesley. 1999. [5-13] SUN MICROSYSTEMS INC. Java Remote Method Invocation Specification. Página da Internet acessível em http://www.sun.com , 2003. [5-14] SCHIMIDT, D. et al. Integration of QoS-Enabled Distributed Object Computing Middleware for Developing Next-Generation Distributed Applications. Irvine: University of California. Electrical & Computer Engineering Department. 2000. [5-15] ZINKY, J. A.; BAKKEN, D. E.; SCHANTZ, R. Architetural Support for Quality of Service for Corba Objects. Theory and Pratice of Object Systems. Vol. 3, n. 1, 1997. [6-1] RUIZ, P. M., GARCÍA, E. Adaptative Multimedia Applications to Improve UserPerceived QoS in Multihop Wireless Ad-Hoc Networks. Atlanta: IEEE Conference on Local Networks. 2002. [7-1] HALLFILL, T.; GALLANT, A. How to Soup Up Java. Byte Magazine v. 23, n. 5, 1998. [7-2] CLAYPOOL, M.; TANNER, J. Java Jitters – The Effects of Java on Jitter in a Continuous Media Server. Worcester Polytechnic Institute, Computer Science Department, 1998. [An-1] SUN MICROSYSTEMS INC. Java Media Framework API Guide. 1999. [A-1] CISCO SYSTEMS. Understanding Jitter in Packet Voice Networks. Disponível em http://www.cisco.com/en/US/tech/tk652/tk698/technologies_tech_note09186a00800945df.shtml. Acesso em 20/10/2003. [B-1] CISCO SYSTEMS. Página da Internet em http://www.cisco.com, 2003. [B-2] ANSI/IEEE. IEEE 802.1D Standard for Information technology. 1998. [B-3] NETIQ CORPORATION. Testing 802.1P QoS with Chariot. 2001. [B-4] NICHOLS, K. Et al. Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers. RFC 2474. 1998. [B-5] BLAKE, S.; BLACK, D.; CARLSON, M.; DAVIES, E.; WANG, Z.; WEISS, W. An Architecture for Differentiated Services. RFC 2475. 1998. [B-6] EXTREME NETWORKS. Página da Internet em http://www.extremenetworks.com, 2003. [B-7] ALMQUIST, P. Type of Service in the Internet Protocol Suite. RFC 1349. 1992. [B-8] GRUPO DE TRABALHO DIFFSERV DO IETF. Página da Internet em http://www.ietf.org/html.charters/diffserv-charter.html, 2003. [B-9] JACOBSON, V.; NICHOLS, K.; PODURI, K. An Expedited Forwarding PHB. RFC 2598. 1999. Referências [B-10] HEINANEN, J. et al. Assured Forwarding PHB Group. RFC 2597. 1999. [B-11] SOURCEFORGE. Differtiated Services on Linux. Página da Internet em http://diffserv.sourceforge.net, 2003. [B-12] SIMON, E.; GRESSIER-SOUDAN, E.; BERTHELIN, J. Avoid LAN Switches, IP Routers provide a better alternative for a Real-Time Communication System. CNAMCEDRIC. 2003. [B-13] LARTC. Linux Advanced Routing & Traffic Control HOWTO. Página da Internet disponível em http://lartc.org/lartc.pdf, 2003. 96 Apêndice A Jitter em Redes de Pacotes de Voz O jitter geralmente é causado devido a congestionamento em uma rede de pacotes IP. O congestionamento pode ocorrer na interface de um roteador caso não tenha sido feito o aprovisionamento correto de um circuito. A.1. Definição Jitter é definido como a variação no atraso do recebimento de pacotes. Do lado transmissor, pacotes são enviados na forma de streams contínuos com os pacotes sendo espaçados regularmente. Devido ao congestionamento ou à má configuração na rede, ocorre a perda de uniformidade no espaçamento dos pacotes no stream, ou seja, o atraso entre cada pacote começa a variar ao invés de permanecer constante. Stream de pacotes bem organizado tempo O mesmo stream de pacotes após congestionamento Figura A.1. Efeito do jitter em um stream de pacotes de voz [A-1] Quando o receptor recebe um stream de áudio RTP para voz sobre IP (VoIP), ele deve compensar o jitter que foi encontrado. O mecanismo para realizar esta compensação é a criação de um buffer de recepção. Este mecanismo também pode estar implementado em roteadores que mantenham um buffer de compensação do jitter e entreguem os streams de pacotes de áudio de uma forma mais suavizada para os dispositivos de processamento do sinal digital, a fim de que haja a reprodução do stream de áudio analógico. A figura A.2 ilustra como o jitter é tratado. Apêndice A. Jitter em Redes de Pacotes de Voz 98 Stream RTP com jitter Buffer para compensação do jitter Stream após compensação realizada pelo Buffer Figura A.2. Buffer para compensação do jitter [A-1] Caso o jitter seja tão grande que leve aos pacotes serem recebidos fora dos limites do buffer, os pacotes serão descartados e falhas serão ouvidas no áudio processado e reproduzido no receptor. O dispositivo receptor pode tentar minimizar o problema da perda de pacotes, no entanto, quando a perda de pacotes for muito grande, problemas serão ouvidos no áudio. Stream RTP com jitter excessivo Buffer para compensação do jitter Pacote é perdido devido a buffer excessivo Figura A.3. Pacote perdido devido a jitter excessivo. [A-1] Apêndice A. Jitter em Redes de Pacotes de Voz 99 A.2. O que pode causar o Jitter ? O mais fácil e melhor lugar para se começar a procurar solucionar problemas com jitter é nas interfaces dos roteadores [A-1]. O modo de se tratar este problema depende do tipo de enlace onde o jitter está ocorrendo. Em um circuito ATM, caso esteja bem configurado, o jitter não deverá ocorrer devido a taxa constante no envio de células que faz com que o atraso seja controlável. Quando houver um encapsulamento ponto-a-ponto, através do protocolo PPP Point-to-Point Protocol, o jitter ocorre devido ao atraso de serialização. Isto pode ser facilmente corrigido usando a fragmentação e o intervalo de transmissão em um enlace PPP. A natureza do PPP significa que os pontos-finais estão conectados diretamente um ao outro, sem uma rede de switchs ou roteadores entre elas. Em um ambiente frame-relay, três fatores podem influenciar o jitter: Modelagem do tráfego Fragmentação Enfileiramento É necessário verificar se a modelagem do tráfego que deixa o roteador está de acordo com a vazão garantida, definida através do CIR - Committed Information Rate, que o provedor está oferecendo. A fragmentação é mais associada ao atraso de serialização que ao jitter, no entanto, certas condições podem causar o jitter. Em um circuito frame-relay, a configuração deste parâmetro pode causar que todos os pacotes maiores que o tamanho especificado sejam fragmentados. O enfileiramento geralmente não é causa de jitter, uma vez que as variações criadas por ele no atraso de pacotes são relativamente baixas. No entanto, caso haja dados trafegando junto com pacotes de voz em um mesmo circuito, isto pode levar a ocorrência de jitter. Apêndice B Qualidade de Serviço (QoS) Mecanismos para garantir QoS são essenciais aos serviços de nova geração. Para o cenário focado nesta dissertação, entrega de áudio dentro de uma rede corporativa, pode-se usar mecanismos de qualidade de serviço que atuam nas camadas 2, 3, 4 e 7 do modelo de referência OSI. Para a camada 2 é abordado o uso do protocolo IEEE 802.1P, disponível nos switchs. Para a camada 3 sugere-se o uso de serviços diferenciados (DiffServ) apontando-se para a implementação no Linux através do pacote IPROUTE2 e mecanismos disponível a partir do Kernel 2.3. Para as camada 4 e 7, ocorre que os Sistemas Operacionais disponibilizam aplicações de configuração (camada 7) que permitem a definição de políticas de priorização de pacotes para aplicações que utilizam determinadas portas UDP ou TCP – camada 4 (isto é feito em consonância com os mecanismos de marcação de prioridade de pacotes disponíveis na camada 2, protocolo IEEE 802.1P) e dispositivos de hardware existentes nas estações de trabalho, placas de interface de rede com suporte ao protocolo IEEE 802.1P. B.1. Mecanismos usados para se implementar Qualidade de Serviço (QoS) Type of Service (ToS), DiffServ, e 802.1P são três diferentes mecanismos usados para obter QoS, através da marcação de cada pacote da camada da camada 3 ou quadro da camada 2, a fim de indicar sua prioridade aos dispositivos de rede. É fácil confundir a diferença entre Type of Service (ToS) e DiffServ pois ambos usam o mesmo byte do cabeçalho do protocolo IP. Isto é esclarecido nos tópicos adiante. 802.1P relaciona-se ao Ethernet enquanto que o campo Precedence do byte ToS e DiffServ (vistos nos tópicos B.2 e B.3) estão relacionados ao IP. A carga útil do frame Ethernet pode não ser sempre o IP o que é considerado como uma vantagem do 802.1P sobre o DiffServ e ToS uma vez que qualquer protocolo da camada 3 pode estar sendo usado. Apêndice B. Qualidade de Serviço (QoS) 101 B.2. Type of Service (ToS) É definido na RFC 1349 [B-7]. O formato do byte do cabeçalho do protocolo IPv4 é: 0 1 2 Precedence 3 4 5 6 ToS 7 MBZ Figura B.1. Formato do byte TOS do Cabeçalho do Ipv4 [B-7] O byte é dividido nos campos Precedence, ToS e MBZ. O campo Precedence é o mais usado dos três. Definido por 3 bits, há oito valores de precedência possíveis que vão de 000 (decimal 0) a 111 (decimal 7). O valor 000 representa o tráfego de prioridade mais baixa enquanto que o valor 111 o de prioridade mais alta. O campo ToS define classes de serviço com enfoque em atraso (delay), vazão (throughput), confiabilidade, valores monetários e serviços ditos normais. É pouco usado na prática. O campo MBZ “Must be Zero”, nunca foi usado. B.3. Serviços Diferenciados Serviços Diferenciados (DiffServ) é uma arquitetura definida na RFC 2474 [B-4] e na 2475 [B-5] que oferece diferentes tipos ou níveis de serviço para o tráfego da rede. Uma característica chave do Diffserv é a agregação dos fluxos na rede, de tal forma que os roteadores necessitam distinguir um pequeno número de fluxos agregados, mesmo que estes fluxos contenham milhares de fluxos individuais. Esta arquitetura é composta de um número de elementos funcionais implementado nos roteadores de borda da rede, incluindo um pequeno conjunto de comportamentos bem definidos para a retransmissão de pacotes a cada salto, funções de classificação de pacotes e funções de condicionamento de tráfego que incluem medição, marcação, modelagem e definição de políticas, conforme ilustra a figura B.2 abaixo. Apêndice B. Qualidade de Serviço (QoS) 102 Figura B.2. Visão Lógica do Classificador de Pacotes e Condicionador de Tráfego [B-5] Quando um pacote sai de um condicionador de tráfego em um roteador de borda com DiffServ, a marcação DSCP - DiffServ codepoint é configurada para um valor apropriado conforme a política de tráfego adotada. O Medidor contabiliza as propriedades temporais do stream de pacotes selecionados pelo Classificador comparando ao perfil de tráfego especificado pelo contrato. Ele informa o estado para outras funções de condicionamento de tráfego a fim de disparar ações automáticas a serem tomadas para cada pacote. Por sua vez o Marcador é responsável por definir o DSCP, adicionando o pacote marcado à mesma fila que definirá o comportamento do tráfego para a agregação de pacotes com o mesmo DSCP. Enquanto o Modelador atrasa alguns ou todos os pacotes em um stream de tráfego o Descartador os descarta, de tal forma a deixar o stream em conformidade com o padrão de tráfego adequado. Devido ao byte TOS do cabeçalho do Protocolo IPv4 ser raramente usado, o grupo de trabalho do DiffServ [B-8] foi formado para redefinir o byte a fim de torná-lo mais útil. Seu formato é mostrado na figura B.3. No Ipv6 é usado o octeto denominado Classe de Tráfego. 0 1 2 3 DSCP 4 5 6 7 Current Unused Figura B.3. Formato do byte DiffServ [B-4] O DSCP tem agora comprimento de 6 bits e não 3 bits reservados ao campo Precedence do byte ToS. Os bits 6 e 7 não são usados. Desta forma o DSCP pode assumir valores que vão de 000000 (decimal 0) a 111111 (decimal 63) que dão um total de 64 marcações diferentes de tipos de tráfego. O que geralmente é feito nos switchs e roteadores para manter a compatibibilidade Apêndice B. Qualidade de Serviço (QoS) 103 com o campo Precedence do byte ToS do cabeçalho do IPv4 é associar os 64 diferentes valores do DSCP a apenas 8 possíveis valores do campo Precedence e que também estão associados aos 8 possíveis valores de marcações do quadro IEEE 802.1P. Em adição às definições básicas do DSCP, o grupo de trabalho DiffServ [B-8] definiu classes de tráfego adicionais. Em particular a classe Expedited Forward definida na RFC 2598 [B-9] e Assured Forward definida na RFC 2597 [B-10]. Serviços Difereciados no Linux O suporte a Serviços Diferenciados no Linux, parte da arquitetura de Controle de Tráfego mais geral, é nativo no Kernel 2.3 e 2.4 [B-11]. O Controle de Tráfego no Linux é configurado com o utilitário denominado tc que é parte integrante do pacote iproute2 [B-12]. Ambos formam um framework [B-13] que unifica ferramentas relacionadas a rede tais como arp, ifconfig, route e novas ferramentas para a criação de túneis. A ferramenta para controle de tráfego no Linux (tc) permite a configuração da pilha IP através de características do iproute2 a fim de habilitar o gerenciamento de QoS dentro do kernel, lidando especialmente com disciplinas de tráfego. Estas facilidades levam o Linux a ser uma opção fácil e barata para a construção de uma arquitetura de roteamento com classes de serviço. Este framework permite o gerenciamento de diferentes disciplinas de filas, classes e filtros. Algumas das características implementadas são: CBQ - Class Based Queuing, HTB Hierarchical Token Bucket, SFQ - Stochastic Fairness Queuing, TBF - Token Bucket Filter. São definidas 256 filas, manuseadas de acordo com a prioridade. Cada fila suporta uma vazão de 100kbps. O filtro denominado u32 é usado para classificar os datagramas retransmitidos, associando-os à fila correta. O parâmetro "pfifo" define uma disciplina FIFO, estatísticas são geradas a partir de cada datagrama. iproute2 é muito flexível apesar de sua sintaxe não tão amigável. Apêndice B. Qualidade de Serviço (QoS) 104 B.4. IEEE 802.1P Em 1990 foi desenvolvido o padrão IEEE 802.1D, posteriormente publicado em 1993, como ISO/IEC 10038, e revisado em 1998 especifica uma arquitetura e protocolo para a interconexão de LANs IEEE 802 abaixo dos limites de serviço da subcamada MAC. O padrão IEEE 802.1P, o qual passamos a explicitar adiante, faz parte do IEEE 802.1D [B-2]. A técnica de sinalização IEEE 802.1P é uma especificação IEEE para priorização de tráfego na rede a nível da camada de enlace de dados / MAC (Camada 2 do modelo de referência OSI). O IEEE 802.1P também possibilita filtrar o tráfego multicast de tal forma que ele não se propague através das redes comultadas a nível da camada 2, a não ser para as portas do switch que realmente têm interesse no tráfego. O cabeçalho 802.1P inclui um campo de três bits para priorização que permite aos pacotes serem agrupados em várias classes de tráfego (até oito). Também pode ser definido como best-effort QoS a nível da camada 2 e é implementado em switchs e adaptadores de rede sem envolver nenhuma configuração de reserva de recursos. Em outras palavras, o tráfego 802.1P é classificado e enviado ao destino sem que haja mecanismos de reserva de recursos. IEEE 802.1P é um avanço da marcação de VLANs 802.1Q (uma marca acrescentada ao quadro MAC). Veja figuras B.4 e B.5 adiante. A marcação da VLAN carrega informações da VLAN e é dividida em duas partes: o identificador da VLAN (12-bit) e a priorização (3-bit). O campo priorização não foi definido no padrão VLAN. A implementação 802.1P define este campo de priorização. Endereço de Destino Endereço de Origem Tipo / Comprimento (6 bytes) (6 bytes) (2 bytes) Figura B.4. Cabeçalho da Camada 2 Ethernet sem a informação 802.1 P/Q [B-2] Apêndice B. Qualidade de Serviço (QoS) Endereço de Destino (6 bytes) ... 105 Endereço de Origem (6 bytes) Campo de prioridade 802.1P (3 bits) 1 bit Marca de Controle (4 bytes) Tipo / Comprimento (2 bytes) Identificação da VLAN 802.1Q (12 bits) Figura B.5. Cabeçalho da Camada 2 Ethernet 802.1 com a informação 802.1 P/Q [B-2] A maioria dos fabricantes concorda que IEEE 802.1P é um mecanismo para marcação de quadros com priorização. No entanto, não há abordagem uniforme acerca dos mecanismos de fila que implementam a priorização dos fluxos. IEEE 802.1P define oito níveis de prioridade semelhante ao campo IP Precedence, subconjunto do campo Type of Service, do cabeçalho IP. Adaptadores de rede e switches roteam o tráfego baseado no nível de prioridade. O uso de switchs nível 3 possibilita mapear a priorização 802.1P ao IP Precedence antes da retransmissão pelos roteadores. Atuar a nível da camada 2 permite ao 802.1P suportar IPX, SNA, AppleTalk e outros protocolos nível 3 além do IP conforme já dito anteriormente. Apesar dos padrões IEEE suportarem até oito níveis de prioridade, muitos vendedores suportam apenas dois ou três filas de prioridade em seus switchs na prática e não oito. Switchs CISCO [B-1] nos modelos 2900 XL e 3500 XL implementam apenas duas filas e não 8. Switchs Extreme Networks [B-6] possuem as oito filas de prioridade definidas e associadas por padrão a marcadores DSCP do Diffserv. Quando se trata de switchs de fabricantes diferentes, pode-se ter dois valores de níveis de prioridade iguais, por exemplo 3, que na prática estão associados internamente a filas de prioridades diferentes. Baseado em regras, cada quadro recebe uma marcação de prioridade. Esta marca é observada e entendida pelos dispositivos antes de qualquer broadcast ou retransmissões para outros switchs, roteadores ou estações de trabalho. Quando o frame atinge o último switch ou roteador, a marca é removida antes de seu encaminhamento para o destino final. Quando chega a um roteador, a marca do frame é removida e é acrescido uma marcação Diffserv (camada 3, Apêndice B. Qualidade de Serviço (QoS) 106 cabeçalho do protocolo IP) antes do encaminhamento a outro roteador. Cada porta da switch tem um buffer de recepção, conhecido como ingress port, para o tráfego de chegada. Quando um quadro chega sem marcação de prioridade, a ele é atribuído uma marcação padrão. Um quadro continua a usar sua marcação de classe de serviço quando ele passa pelo buffer de chegada. Quadros nas filas de prioridade mais baixas são retransmitidos apenas após os quadros de prioridade mais alta terem sido retransmitidos. Componentes de Hardware e Software necessários ao QoS 802.1P Vários componentes de hardware e software são necessários para oferecer qualidade de serviço 802.1P, a saber: Switch; Placa de Interface de Rede; Software de Configuração e Marcação de Pacotes. Switch Por ser uma evolução, o protocolo 802.1P sofre do problema de incompatibilidade com switchs legados. Alguns dispositivos usados em LANs, tais como Hubs conseguem repassar pacotes marcados com a informação 802.1P mas ignoram a prioridade. Dispositivos que não suportem mais que os tradicionais 1.518 bytes do frame Ethernet, descartarão simplesmente os pacotes com 1.522 bytes máximo devido ao acréscimo de 4 bytes da marcação do protocolo 802.1 P/Q. Placa de Interface de Rede Muitas das placas de rede possuem suporte a 802.1P conforme ilustra a configuração da interface no Sistema Operacional Windows 2000 na figura B.6 adiante. Apêndice B. Qualidade de Serviço (QoS) 107 Figura B.6. Configuração de uma placa Ethernet com suporte a 802.1P vista no S.O Windows 2000 Software de Configuração e Marcação de Pacotes Os Sistemas Operacionais podem disponibilizar aplicações para configurar a marcação de pacotes 802.1P, conforme é ilustrado na figura B.7. Para a implementação objeto desta dissertação é necessário que os pacotes com portas UDP de origem e destino iguais às usadas pela aplicação recebam marcação de priorização mais alta. Apêndice B. Qualidade de Serviço (QoS) 108 Figura B.7. Software de Configuração da marcação de pacotes 802.1P disponibilizado pelo Sistema Operacional Windows 2000/XP B.5. Infra-Estrutura de Rede Necessária a Distribuição de Áudio com QoS A figura B.8 abaixo ilustra a infra-estrutura de rede necessária a distribuição de áudio com QoS. Os seguintes itens devem ser observados: Estações de trabalho PC com placa de interface de rede suportando IEEE 802.1P e política de priorização de pacotes definida pelo S.O; Switchs de borda com suporte a IEEE 802.1P e multicast habilitado; Switchs de distribuição com suporte a IEEE 802.1P realizando mapeamento automático das marcações de priorização do quadro IEEE 802.1P para a marca de prioridade DSCP no cabeçalho do protocolo IP e multicast habilitado; PCs com sistema operacional Linux, Kernel 2.3 ou superior, pacote iproute2, multicast habilitado e duas interfaces (uma Ethernet 10/100 Mbps e outra Serial Síncrona), fazendo as vezes de roteador. Apêndice B. Qualidade de Serviço (QoS) 109 Figura B.8. Infra-estrutura de rede necessária a distribuição de áudio com QoS. Observe-se que ocorre uma tradução entre a marcação de prioridade IEEE 802.1P do frame Ethernet para o DSCP no cabeçalho do protocolo IP automaticamente na switch de Distribuição conforme é relatado em [B-6]. O computador realizando o papel de roteador com suporte a DiffServ reconhece a marcação DSCP inserida pelo switch de distribuição e toma as providências necessárias para associar cada pacote à fila de prioridade respectiva. Anexo A Java Media Framework (JMF) Java Media Framework (JMF) é uma arquitetura para aquisição, processamento e apresentação de dados multimídia sensíveis ao tempo. JMF é projetado para suportar muitos tipos de mídia padrão, tais como AIFF, AU, AVI, GSM, MIDI, MPEG, QuickTime, RMF e WAV. Baseado no tradicional modelo de captura e apresentação de áudio e vídeo, como mostra a figura An.1, adiante. Desta forma, um objeto DataSource encapsula o stream multimídia de maneira similar a uma fita de vídeo ou DVD; um objeto Player oferece mecanismos de controle e processamento similar a um VCR ou DVD. Tocar e capturar áudio e vídeo usando JMF requer dispositivos de entrada e saída adequados tais como microfones, câmeras, caixas de som e monitores. Figura An.1. JMF é baseado no modelo de captura e apresentação de vídeo tradicionais [An-1] Objetos DataSource e Player são partes integrantes da API JMF de alto nível para gerenciar a captura, apresentação e processamento de dados multimídia sensíveis ao tempo. JMF também oferece uma API de baixo nível que a torna extensível, conforme a figura An.2. Anexo A. Java Media Framework (JMF) 111 Figura An.2. API JMF [An-1] An.1. Modelo de tempo A precisão de tempo de JMF está na casa de nanosegundos. Classes que suportam o modelo de tempo JMF implementam a interface Clock (figura An.3) o que garante as operações básicas de tempo e sincronização dos streams multimídia. Figura An.3. Modelo de tempo JMF [An-1] An.2. Objetos Manager A API JMF usa quatro tipos de objetos manager: Manager - lida com a construção de objetos Player, Processor, DataSource e DateSink; PackageManager - mantém um registro de pacotes que contém classes JMF, tais como Player, Processor, DataSource e DataSink; CaptureDeviceManager - mantém um registro da disponibilidade de dispositivos de captura; Anexo A. Java Media Framework (JMF) 112 PlugInManager - mantém um registro da disponibilidade de componentes de processamento JMF (plug-ins), tais como Multiplexadores (Multiplexers), Demultiplexadores (Demultiplexers), Codificadores (Codecs), Aplicador de efeitos (Effects) e Apresentadores (Renders). A classe Manager é essencial na escrita de programas baseados em JMF. Seus métodos create são usados para criar objetos Player, Processor, DataSource e DataSink, conforme já citado. O controle de qual processamento é feito sobre o dado multimídia é feito pela classe PlugInManager. An.3. Modelo de Evento Usa um modelo de eventos estruturado que possibilita aos programas baseados em JMF estarem informados a respeito do estado corrente de sistemas multimídia, bem como a responder a eventuais erros em tempo de execução. MediaEvent é uma subclasse para identificar vários tipos particulares de eventos. Estes objetos seguem o padrão Java Beans para eventos. Objetos Controller, tais como Player e Processor, e certos objetos Control, tais como GainControl, submetem eventos multimídia. Veja figura An.4. Figura An.4. Modelo de eventos [An-1] An.4. Modelo de Dados Objetos JMF media player geralmente utilizam objetos DataSource (figura An.5) para gerenciar a transferência de arquivos de áudio e vídeo. Um DataSource é identificado tanto por um JMF MediaLocator ou uma URL (universal resource locator). Um MediaLocator é similar a uma URL e pode ser construído a partir de uma URL, mesmo que o protocolo correspondente não esteja instalado no sistema. Em JAVA, ocorre o contrário, ou seja, uma URL só pode ser construída se o protocolo estiver instalado. Anexo A. Java Media Framework (JMF) 113 Figura An.5. Modelo de Dados [An-1] Um objeto DataSource gerencia um conjunto de objetos SourceStream. Um DataSource padrão usa um array de byte como uma unidade de transferência. Um objeto BufferDataSource usa um objeto Buffer como uma unidade de transferência. JMF define vários tipos de objetos DataSource, como visto no tópico An.4.1. An.4.1. PushDataSources e PullDataSources Dados multimídia podem ser obtidos de várias fontes diferentes, tais como arquivos locais, remotos, broadcast ao vivo. JMF DataSources podem ser caracterizados de acordo com o formato de transferência iniciado: Pull - o cliente inicia a transferência de dados e controla o fluxo de dados a partir de objetos PullDataSource. Protocolos para transferência incluem http e file. JMF define os seguintes tipos: PullDataSource e PullBufferDataSource (ambos usam objetos Buffer como suas unidades de transferência); Push - o servidor inicia a transferência de dados e controla o fluxo de dados a partir de um objeto PushDataSource. Objetos PushDataSource incluem mídias broadcast e vídeo sob demanda. Para a realização de broadcast, um protocolo que pode ser usado é o Real-time Transport Protocol - RTP, de responsabilidade do Internet Engineering Task Force (IETF) [22]. JMF define os tipos: PushDataSource e PushBufferDataSource, que usam objetos Buffer como sua unidade de transferência. O grau de controle que um programa cliente pode oferecer aos seus usuários depende do tipo de DataSource sendo apresentado. Por exemplo, um arquivo MPEG pode ser reposicionado e Anexo A. Java Media Framework (JMF) 114 um programa cliente poderia permitir ao usuário reposicionar o vídeo ou passar a uma determinada posição do vídeo. Ao contrário, mídias broadcast estão sob o controle do servidor e não podem ser reposicionados. Alguns protocolos de vídeo sob demanda suportam um controle limitado do usuário - por exemplo, um programa cliente pode permitir ao usuário ir para uma determinada posição, mas não avançar rapidamente ou retornar rapidamente. An.5. Objetos DataSource Especiais JMF define dois tipos de objetos DataSource especiais, são eles: CloneableDataSource e MergingDataSource. Um CloneableDataSource pode ser usado para criar clones tanto de um objeto PushDataSource quanto de um PullDataSource. Um MergingData pode ser usado para combinar os streams (SourceStream) de vários objetos DataSource em um DataSource único. Isto possibilita que um conjunto de DataSource seja controlado a partir de um único ponto - quando connect, disconnect, start ou stop é chamado em um MergingDataSource, a chamada de método é propagada para todos os objetos DataSource. An.6. Formatos de Dados O formato exato de um objeto multimídia é representado por um objeto Format. JMF extende Format para definir os formatos de áudio e vídeo. Veja a figura An.6. Figura An.6. Formato de mídias JMF [An-1] Anexo A. Java Media Framework (JMF) 115 Um objeto AudioFormat descreve os atributos específicos para um dado formato de áudio, tais como taxa de cada amostra (Hz), quantidade de bits por amostra e número de canais. Um objeto VideoFormat encapsula informações que são importantes para dados de vídeo. Vários formatos são derivados de VideoFormat para descrever os atributos de formatos de vídeo comuns, incluindo: IndexColorFormat RGBFormat YUVFormat JPEGFormat H261Format H263Format Para receber notificações de mudanças de formatos vindos de um objeto Controller, implementa-se a interface ControllerListener e escuta-se por FormatChangeEvents. An.7. Controls JMF Control (figura An.7), oferece um mecanismo para configurar e recuperar atributos de um objeto. Muitos objetos JMF oferecem Controls, incluindo objetos Controller, objetos DataSource, objetos DataSink e JMF plug-ins. DataSource e PlugIn usam as interfaces Control para oferecer acesso aos seus objetos Control. Anexo A. Java Media Framework (JMF) Standard Controls 116 Figura An.7. JMF Controls [An-1] Objetos DataSink ou Multiplexer lêem a mídia de um DataSource, escrevendo para um destino (e.g. um arquivo ou a rede). FramePositioningControl e FrameGrabbingControl oferecem facilidades para objetos Player e Processor. Possibilita posicionamento preciso dentro de um Player ou de um Processor. FormatControl oferece métodos para recuperar e configurar um determinado formato. Um TrackControl é um tipo de FormatControl que oferece um mecanismo para controlar qual processamento um objeto Processor realiza em um track particular de dados multimídia. Com os métodos do TrackControl, pode-se especificar quais conversões de formatos são realizadas em tracks individuais e selecionar os plug-ins Effect, Codec, ou Renderer que são usados pelo Processor. Anexo A. Java Media Framework (JMF) 117 BufferControl possibilita controle a nível de usuário sobre o mecanismo de buffer realizado por um determinado objeto. An.8. Componentes da Interface com o Usuário Um Control pode oferecer acesso a um componente de interface com o usuário. Para obter um componente de interface com o usuário padrão para um Control particular, faz-se uma chamada ao método getControlComponent. Este método retorna um Component AWT que pode ser adicionado a um espaço de apresentação de um applet ou de uma janela de aplicação. Um Controller pode também oferecer acesso à interface Components (interface com o usuário). Por exemplo, um Player oferece acesso tanto a um componente visual quanto a um painel de controle - para se recuperar estes componentes, pode-se usar os métodos de Player, getVisualComponent e getControlComponent. An.9. Apresentação de Áudio e Vídeo Em JMF, o processo de apresentação (figura An.8) é modelado por uma interface Controller que define o estado básico e o mecanismo de controle para um objeto que além de controlar, apresenta ou captura mídia baseado em um mecanismo de tempo. Um Controller informa uma variedade de eventos específicos, denominados MediaEvent, para oferecer notificação de mudanças em seus estados. Para receber eventos de um Controller tal como um Player, implementa-se a interface ControllerListener. JMF API define dois tipos de objetos Controller: Player e Processor. Um Player ou Processor é construído a partir de um objeto DataSource particular e normalmente não reusado. Figura An.8. Objetos JMF Controller [An-1] Anexo A. Java Media Framework (JMF) 118 An.10. Player Um Player processa um stream de entrada e o apresenta (realizando o que se costuma chamar de “render”) em um tempo preciso. Um DataSource é usado para entregar o stream de entrada para um Player. O dispositivo apresentador de destino depende do tipo de mídia que está sendo apresentada, como mostra a figura An.9 abaixo. Figura An.9. Modelo JMFPlayer [An-1] Um Player não oferece nenhum controle sobre o processamento que está sendo feito ou como ele apresenta os dados da mídia. An.11. Estados do Player Um Player pode estar em um dos seis estados mostrados na figura An.10, a seguir. A interface Clock define os dois primeiros estados: Stopped e Started. Para facilitar o gerenciamento de recursos, o Controller quebra o estado em cinco estados standby: Unrealized, Realizing, Realized, Prefetching e Prefetched. Figura An.10. Estados do Player. [An-1] Anexo A. Java Media Framework (JMF) 119 Em uma operação normal, um Player passa pelos estados até atingir o estado de Started. An.12. Processor Objetos Processor podem também ser usados para apresentar dados multimídia, como visto na figura An.11. Um Processor é justamente um tipo de Player especializado que oferece controle sobre qual processamento é realizado no stream de entrada. Um Processor suporta todos os tipos de controles de um Player. Figura An.11. Modelo JMF Processor [An-1] Adicionalmente à apresentação de dados multimídia para dispositivos de apresentação, um Processor pode oferecer saída de dados multimídia para um DataSource de tal forma que estes dados possam ser apresentados por outro Player ou Processor, manipulados posteriormente por outro Processor ou entregues para algum destino, como um arquivo. An.13. ControllerEvent ControllerEvent (figura An.12) é um evento lançado por um objeto Controller, como um Player ou Processor e pode estar em três categorias: notificação de mudanças, eventos de finalização e eventos de transição. Anexo A. Java Media Framework (JMF) Figura An.12. Eventos JMF [An-1] 120 Anexo A. Java Media Framework (JMF) 121 An.14. Processamento Um Processor (figura An.13) pode enviar os dados de saída para um dispositivo de apresentação ou para um DataSource. Se o dado é enviado para um DataSource, este DataSource pode ser usado como entrada para um outro Player ou Processor ou como entrada para um DataSink. Um Processor permite a um desenvolvedor de aplicação definir o tipo de processamento que é aplicado aos dados multimídia. O Processamento dos dados multimídia é separado em vários estágios, como mostra a figura An.14 abaixo. Figura An.13. JMF Processors [An-1] Figura An.14. Estágios do Processor [An-1] Anexo A. Java Media Framework (JMF) 122 Transcodificação (transcoding) é o ato de converter cada track de mídia de um formato de entrada para outro formato de saída. Ao processo de converter um tipo comprimido para descomprimido, chama-se Decodificação (Decoding). Ao inverso, Codificação (Encoding). Denomina-se ainda Apresentação (Rendering), ao processo de mostrar a mídia ao usuário.