quinta-feira, 4 de dezembro de 2008

Recebendo OSC no Flash Player

Mensagens OSC são normalmente enviadas usando o protocolo UDP para garantir uma troca mais rápida das informações. No entanto existem vários softwares incapazes de estabelecer conexões UPD, apenas TCP. É o caso do Flash Player até a versão 9. Para que ele receba informações de uma fonte OSC é preciso um mediador que faça a "tradução" das mensagens OSC de UDP para TCP.

Um bom software para essa tarefa é o FLOSC, desenvolvido por Ben Chun desde 2002. Mesmo que o site do projeto esteja sem atividade desde 2006, o FLOSC ainda é uma excelente opção para o trabalho pela sua facilidade de uso. O endereço é:


Para usar, basta baixar o software, descompactá-lo e, em um terminal, usar:

java Gateway udpPort tcpPort

onde udpPort é a porta para a qual o software gerador do OSC está mandando as informações e tcpPort é a porta TCP a ser lida pelo Flash. Nos trabalhos do 1maginari0 procuramos usar as portas 8000 e 9000 respectivamente, então:

java Gateway 8000 9000

Portas acima de 10.000 tendem a causar problemas em algumas máquinas. Para que o programa execute é necessária a instalação do java (JRE é suficiente) - www.java.com. Mesmo que esteja sem atualizações recentes, as versões mais novas do java executam o FLOSC sem problemas.


Abrindo portas para o Flash Player

Além de encaminhar as mensagens OSC para uma porta TCP é necessário um segundo passo para a leitura dos dados. Por questões de segurança o Flash Player desabilita o acesso a portas TCP em uma máquina a não ser que receba autorização para isso (esse problema não existe quando se usa o projetor). Para isso, é necessário criar um arquivo de regras (policy file) e distribuí-lo pela porta TCP 843.

Para simplificar o processo, a Adobe disponibilizou um servidor simples e um arquivo de regras para a tarefa. Para conferir, entre em


O processo é simples, mas primeiro é importante ter o Python instalado (www.python.org - testamos na versão 2.5). Depois disso, basta baixar o arquivo encontrado na Adobe. É preciso apenas o arquivo "flashpolicyd.py" da pasta "Standalone" e seu arquivo de regras (há um exemplo, "flashpolicy.xml" no pacote). Num terminal, entre (estando ambos, flashpolicy.xml e flashpolicyd.py em uma mesma pasta):

python flashpolicyd.py --file=flashpolicy.xml --port=843

Um arquivo de regras que libere a porta 9000 para a comunicação OSC, com o FLOSC sendo executado na mesma máquina do Flash Player teria o conteúdo:
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control policies="master-only">
<allow-access-from domain="localhost" ports="9000">
</cross-domain-policy>


Além disso...

O Flash Player 10 é capaz de estabelecer conexões pelo protocolo RTMFP, construído com base no UDP. Ainda não testamos essa conexão para a troca de mensagens OSC, o que eliminaria a necessidade do FLOSC.

O arquivo disponibilizado pela Adobe traz também uma versão em PERL do servidor para a abertura de portas TCP para a Flash Player.

Um comentário:

  1. Listening on port 843

    [Errno 43] Protocol not supported

    ResponderExcluir