Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Uso da API JMF para desenvolver aplicações Voz sobre IP. Para isso, diversos exemplos foram utilizados para descrever os princípios básicos dessa API em relação ao desenvolvimento de aplicações VoIP.
Para que serve:
Este artigo demonstra como implementar pequenas aplicações que possibilitam uma comunicação por voz na internet.
Em que situação o tema é útil:
Comunicações VoIP já são uma realidade nas redes modernas, sobretudo devido ao custo reduzido quando comparado ao sistema telefônico tradicional. O artigo permite que o leitor escreva programas básicos nessa área e entenda um pouco mais os detalhes envolvidos nessas comunicações.
Resumo DevMan:
A API Java Media Framework permite realizar diversos tipos de processamento sobre dados multimídia. O artigo apresentou os recursos da JMF para o desenvolvimento de programas para comunicações em tempo real, como videoconferência e VoIP.
Esse artigo apresenta os fundamentos da programação de aplicações Voz sobre IP com Java através da API JMF. Foco de muita atenção nos últimos anos, VoIP vem sendo utilizada para reduzir os custos com ligações telefônicas no setor público e privado, trazendo economias significadas inclusive para o usuário doméstico. Já são muitas as empresas que hoje oferecem esse tipo de serviço, com qualidade muito semelhante ao serviço telefônico tradicional.
A linguagem de programação Java surgiu com uma forte vocação para comunicação em rede. Atendendo inicialmente novas demandas do ambiente web através de applets, Java evoluiu e incorporou outros tipos de comunicações à sua API padrão. Atualmente, Java suporta comunicações por sockets TCP e UDP, sockets criptografados, mensagens de e-mail por SMTP e POP3, chamada de métodos remotos por RMI, acesso a bases de dados com JNDI, entre muitos outros. Além disso, uma série de serviços está disponível em bibliotecas opcionais, ampliando sobremaneira os recursos de comunicação de programas Java.
Comunicações multimídia em tempo real já é uma realidade na Internet, materializadas em aplicações de Voz sobre IP, videoconferência e streams de áudio e/ou vídeo (como nas rádios e TVs web). Para o desenvolvimento de aplicações desse tipo, a API Java Media Framework oferece os recursos para captura, tratamento e transmissão de mídias de áudio e vídeo em tempo real. Essa API opcional será apresentada nesse artigo, onde os fundamentos básicos para o desenvolvimento de aplicações VoIP serão destacados. Espera-se que após a leitura do artigo o leitor seja capaz de escrever programas para transmissão e recepção de pacotes de áudio na Internet, fundamentando-o para o desenvolvimento de aplicações mais elaboradas.
O Que é VoIP?
O termo “VoIP” surgiu da simples ideia de transmitir, em tempo real, voz na Internet. Como os serviços básicos de comunicação na Internet são fundamentados no protocolo IP, o serviço de voz ficou conhecido como Voice over IP (Voz sobre IP), ou simplesmente VoIP.
Com a transmissão de voz em tempo real, duas ou mais pessoas poderiam conversar como se estivessem usando o sistema telefônico tradicional, só que utilizando a infraestrutura de transmissão de pacotes da Internet, que é muito mais barata. Para isso, protocolos e algoritmos de codificação especializados surgiram nas últimas duas décadas para viabilizar esse tipo de comunicação, uma vez que, diferentemente da transmissão de arquivos, comunicações de voz em tempo real possuem restrições de atraso que não são atendidas pela Internet. Tais padrões, em conjunto com a melhoria e barateamento dos acessos à Internet nos últimos anos, têm tornado viável a transmissão em tempo real de voz na Internet.
Voz é uma mídia contínua que deve ser capturada através de um microfone, digitalizada e codificada para que a fala possa ser transmitida na Internet, usualmente utilizando os serviços do protocolo de transporte não confiável UDP, uma vez que o tempo é mais importante para essas aplicações que a garantia na entrega de pacotes. No desenvolvimento de aplicações VoIP com a JMF, o programador irá lidar diretamente com informações sobre endereço IP, porta UDP e codec de áudio, sendo interessante o conhecimento mínimo sobre esses assuntos.
Java e multimídia em tempo real
A linguagem Java possui diversos recursos na área de multimídia, considerando tanto processamento de informações quanto comunicações em tempo real. Esse suporte é obtido através de um conjunto de APIs, cada uma com funções bem definidas. Para que as APIs mais apropriadas sejam utilizadas, é necessário que o programador identifique o tipo de aplicação VoIP que será desenvolvida, sendo que há dois grandes tipos de comunicações multimídia na Internet. O primeiro tipo refere-se às comunicações com pouco ou nenhum controle, onde o foco está na transmissão dos dados, que tipicamente ocorre entre um emissor e um ou mais receptores. Para esse tipo de comunicação mais simples, a API Java Media Framework oferece serviços para codificação e transmissão de voz e/ou vídeo em tempo real, disponibilizando também suporte para comunicações com os protocolos Real Time Protocol (RTP) e Real Time Control Protocol (RTCP), presentes em todas as comunicações VoIP modernas. No segundo tipo de comunicação são utilizados controles especiais, como mecanismos de abertura e encerramento de chamadas e a utilização de servidores de registro e gateways, permitindo, entre outros serviços, chamadas VoIP para nomes de login ao invés de endereços IP e interação com o sistema telefônico tradicional. Para esse último caso há poucas bibliotecas Java opcionais, geralmente oriundas de projetos alternativos. Entre elas, a API JAIN-SIP é uma das bibliotecas de maior destaque, oferecendo suporte para comunicações baseadas no protocolo Session Initiation Protocol (SIP), que é hoje o principal padrão para controle de comunicações VoIP.
De forma prática, aplicações baseadas no controle oferecido por protocolos como o SIP e pelo padrão H.323 (“concorrente” do SIP) são geralmente destinadas às empresas prestadores de serviço de comunicação VoIP e a ambientes corporativos. Contudo, mesmo essas aplicações ainda precisam dos serviços básicos de captura, tratamento e transmissão de pacotes de mídia, como oferecido pela JMF. Nesse artigo, estamos preocupados com aplicações VoIP ponto a ponto, onde se conhece o endereço de rede do destino (a pessoa a ser chamada) e apenas a API JMF precisa ser utilizada (além das APIs padrões do Java). De fato, os mesmos fundamentos da programação com a Java Media Framework serão também necessários para o desenvolvimento de aplicações VoIP baseadas em protocolos de controle.
Introdução à JMF ...