Entendendo o RTMFP

Posted on 12. Oct, 2009 in: Novidades, RTMFP, RTMP

Em 2006 a Adobe comprou a Amicima, Inc. uma empresa especializada na criação de novos procotolos para comunicações cliente x servidor e cliente x cliente. Na época ela tinha desenvolvido um protocolo chamado de Secure Media Flow Protocol (MFP) e o MFPNet que possuia uma camada para comunicação p2p.

A partir desta aquisição a Adobe criou o Real-Time Media Flow Protocol (RTMFP), um protocolo para comunicações p2p a partir de duas aplicações Flash/Flex rodando sobre o Adobe® Flash® Player 10 ou sobre o Adobe AIR® 1.5. O RTMFP possui recursos muito importantes que inclui baixa latência, segurança e escalabilidade, pois a comunicação parte diretamente entre dois clientes, não passando assim por um servidor Flash Media.

O RTMP funciona somente sobre o TCPIP e sempre irá precisar de um servidor Flash Media no centro, o que pode aumentar a latência dependendo da localização do servidor e seu desempenho. Já com o RTMFP conseguimos garantir mais qualidade porque a comunicação é feita sobre o UDP,  levando assim mais eficiência e a redução drástica da quantidade de pacotes perdidos. Vale destacar que o áudio  tem prioridade sobre o vídeo, o que faz deste procotolo uma excelente opção para o desenvolvimento de aplicações para vídeo conferência de alta qualidade.

Com o RTMFP podemos criar aplicações para vídeo conferências, salas de bate papo, jogos multi-players e ferramentas como o msn, skype, gtalk e afins. Não existe uma API nova para o uso desde protocolo, a comunicação continua sendo feita por NetConnection e NetStream, a única diferença é que é preciso gerar um peer ID para as comunicações p2p, e hoje é possível negociar isso através do Stratus que é um serviço beta da Adobe que permite cada cliente se conectar ao servidores deste serviço somente para gerar e gerenciar o peer ID.

O peer ID nada mais é que uma chave que identifica cada cliente e sua localização, ele é gerado da seguinte forma:

nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus);
nc.connect(rtmfp://Stratus_Server+Developer_key);

Após conectado ao serviço, basta recuperar o peer ID com:

var myPeerID:String = nc.nearID;

Em seguida basta estabelecer a comunicação do streaming através do NetStream.

sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
sendStream.publish(”media”);

var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{

farPeerID = callerns.farID;

trace(”O cliente “+farPeerID + “Está te chamando para uma comunicação p2p”);

return true;
}

sendStream.client = sendStreamClient;

Para aceitar a conexão p2p é só usar o código abaixo. Onde o farPeerID é a chave peer ID do amigo p2p.

recvStream = new NetStream(nc,farPeerID);
recvStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
recvStream.play(”media”);

recvStream.client = this;

Para enviar uma mesagem para o amigo p2p basta fazer.

sendStream.send(”receiveSomeData”,txtSendData.text);


Você deve estar se perguntando, mas como irei recuperar o peer ID de cada amigo conectado ao Stratus? A resposta é simples, cada amigo se conecta ao Stratus, e de posse do peer ID, cada amigo guarda este ID em seu servidor web ou em um sharedObject em um outro servidor Flash Media por exemplo. A opção de um outro servidor Flash Media para guardar estas chaves de amigos e grupos de amigos é a mais interessante, pois quando eles conectarem ou se desconectarem da aplicação através de um script server side no Flash Media, será possível adicionar ou remover o peer ID de uma lista. Desta forma conseguimos criar um recurso que indentifica quando o usuário estará on-line ou off-line.

O exemplo acima usa o Adobe Stratus que é um serviço beta e não permite criar aplicações comerciais por enquanto, mas já dá uma idéia de uso do RTMFP, pois você poderá criar aplicações para testes entre amigos ou empresas dentro da internet ou intranet. Agora se você pretende implementar uma aplicação comercial e fazer uso de comunicações p2p com o RTMFP, você poderá usar o Adobe Live Cycle Collaboration Service que recentemente foi liberado para uso comercial e que inclui a geração de peer IDs via RTMFP e um recurso chamado de FMS failover que estabelece uma comunicação RTMP automáticamente caso a RTMFP falhe. Como o Adobe Live Cycle Collaboration é um serviço comercial, consequentemente iremos pagar pelo mesmo, e o mais interessante é que vamos pagar somente pelo uso, uma espécie de SaaS.

Adobe Live Cycle Collaboration Service

Em outubro de 2009 no Adobe Max,  a Adobe levou ao público o lançamento de suas principais tecnologias e tendências,  a mesma fez o anúncio do Flash Player 10.1, do Adobe AIR 2.0, e os novos recursos do RTMFP, que inclui:

  1. Groups – Inclui suporte a comunicação por grupos de clientes via p2p, assim como acontece no Skype e MSN. Só que a grande sacada é que será possível enviar dados, áudio e vídeo entre todos os clientes presentes em um ou mais grupos.
  2. Multicast – Camada que permite o suporte nativo para multicast IP, que são técnicas para a transmissão e serviço de alta qualidade.
  3. Posting – Recurso que permite enviar mensagens ActionScript.
  4. Directed Routing - Direcionamento de mensagens ActionScript dentro de um grupo para um ou mais clientes especificos. Resumindo, dentro de um grupo será possível enviar mensagens privadas para os usuários que você definir.
  5. Object Replication – Envio de mensagens em ActionScript através de replicação. Resumindo, você envia para um cliente x dentro de um grupo, e este cliente envia para outro cliente, e assim sussesivamente.

Na imagem abaixo você pode conferir uma breve amostra do funcionamento de uma comunicação RTMFP baseada em grupos.

P2P Multicast

Apesar  do RTMFP estar completando um ano, ainda não é possivel o uso de sharedObject como acontece com uso do Flash Media Interactive Server, mas ele tem se comportado muito bem em meus testes de bancada, possuindo uma alta qualidade de áudio quando usado com Speex e vídeo mesmo usando o padrão Nellymoser.

Com todas estas novidades da Adobe estavámos esperando que o Flash Media Interactive Server pudesse gerar e gerenciar também estes peer ID’s, mas pelo jeito isso não deve acontecer tão cedo, pois em novembro de 2009 a Adobe deve lançar o Flash Media Interactive Server 3.5.3 que contém somente atualizações  e a implementação de pequenos novos recursos.  Veja as palavras de Kevin Tower na lista de Flash Media da Community.lsoft.com.

“FLASH MEDIA SERVER – we have not announced any new version of FMS yet that will support RTMFP.  We did hint yesterday that we’ll be updating FMS3.5 to version 3.5.3 later this year to support the new FP 10.1 features – and in a future version after that release – FMS may be one of your options to host a local service to build your own P2P applications – including introductions, and supporting server side programming.”.

Agora vamos aguardar, pois para nós que temos servidores dedicados com a licença do Flash Media Interactive Server não é uma boa opção ter que pagar para usar o Adobe Live Cycle Collaboration Service somente para estabelecer esta geração de peer ID’s. Lembrando que caso falhe a comunicação RTMFP o FMS failover passará a usar o RTMP e teremos também a cobrança de banda de upload, download e da quantidade de dados enviados.  É um pouco estranho estas cobranças para o uso do RTMFP, mas vale ficar atento porque mais novidades virão por aí.

5 Responses

  • Stefan Horochovec (horochovec.com.br/blog) on Monday, 12th October 2009 at 11:36 am

    Show de bola Carlos, parabens pelo artigo, é legal para quem não conhece a tecnologia saber daonde ela veio e para onde ela esta caminhando, e não apenas se preocupar com codificação!

    Abraços

  • Mario Junior (blog.mariojunior.com) on Monday, 12th October 2009 at 12:48 pm

    Excelente artigo, o único em portugues q aborda sobre o assunto, parabéns! O pessoal da InfraRed (mantenedores do Red5) já anunciaram o inicio do trabalho para implementar o RTMFP nesse servidor (Red5) mas isso ainda deve demorar muito até ficar realmente estável.

  • paulophp on Tuesday, 20th October 2009 at 9:21 am

    Animal isso, não vejo a hora de desenvolver apps com capacidade de conexão p2p!

  • Luiz on Wednesday, 28th October 2009 at 8:17 am

    O artigo foi MUITO bem escrito mas contém problemas. Não serve se o leitor for iniciante em flash como é o meu caso.

    Com o seu artigo eu já sei como é que se recebe uma conexão mas não faço a mínima idéia de como fazer para conectar em outro cliente.

    Acho que o artigo necessita de um código completo e funcional como exemplo. Quem sabe um arquivo .zip com o .fla, .as, etc… que sirva para receber e iniciar chamadas. Uma aplicação de chat ou pelo menos uma bolinha que dois ou mais clientes possam mover na tela…

    De qualquer maneira, obrigado pelo esforço em querer ajudar o próximo.

  • Carlos Eduardo (blog.egenial.com.br) on Thursday, 29th October 2009 at 9:59 pm

    Olá Luiz,

    Bom, primeiramente quero dizer que o blog fala de Flex e Flash Media, não exatamente nesta sequência, mas os assuntos estão diretamente ligado a essas duas tecnologias.

    Não fala exatamente de Flash, mas mostra muito conteúdo em action script 3. Então se você tem conhecimento em action script 3, não terá problemas em acompanhar o conteúdo citado e o código.

    Não tenho a intenção de sempre disponilizar códigos em MXML, AS3 e SSAS, e muito menos arquivos .fla.

    O conteúdo aqui proposto sempre servirá como um ponto de apoio para que desperte em você a curiosidade sobre os temas citados.

    Obrigado pelos elogios. Ajudar as pessoas e empresas a integrar e criar aplicações com Adobe Flex e Flash Media é o que fazemos, e esperamos sempre fazer.

    Grande abraço!



Leave a Reply

300x250.gif