Programação e Linux.

quinta-feira, 4 de dezembro de 2008

Plataforma Flash e Open Source

Em minha busca por fazer um serviço de streaming de vídeo de sucesso, pensei no porquê do youtube ser um sucesso? Acredito eu porque ele é feito em Plataforma Flash. Recentemente, o fato do Joost ter sido portado para flash comprova minha idéia.[1] [2]

Segundo a Adobe, o Flash está instalado em 98% dos computadores com acesso a internet, isto quer dizer que o Flash, é, de fato, padrão de mercado.

Por que o Flash é tão popular? porque ele é pequeno e instala fácil, ao abrir um endereço que contenha Flash, a maioria dos Browsers web orientam você a instalar o plugin e isto não demora muito já que o runtime do Flash é muito pequeno (de 1MB a 4MB) em comparação a outras teconologias que permitem streaming (media player, vlc, java...).

O simples fato do usuário "não precisar instalar nada" é perfeito para fazer do meu serviço de streaming (ou qualquer outro serviço baseado em Flash) um sucesso de uso.

Sempre procuro alternativas Open Source para todas as tecnologias que uso, não ia ser diferente com o Flash e aqui está meu relato.

Servidores de streaming e de aplicações RIA.

Red5
Para quem não conhece o Red5, ele é a melhor versão aberta do Flash Media Server (pago, código fechado), contendo a maioria dos recursos dele. O Red5 permite (entre outras coisas) que uma aplicação Flash utilize de recursos de streaming, tanto broadcasting (enviar conteúdo multimídia), quanto subscribing (receber conteúdo multímidia), ao vivo (live streaming) ou gravado (on demand).

Com o Red5 você pode fazer um youtube ou um justin.tv (yahoo live também). Mas Red5 não faz só isto, ele permite fazer aplicações RIA complexas. Veja por exemplo o red5phone, ele é um softphone feito em Flash, quer ligar de graça? apenas abra o browser e ligue, não precisa instalar nada. A riqueza de aplicações possíveis com o Red5 me motivou a estudar Flex e ActionScript.

lighttpd, php e FLV Streaming
O Red5 não é único jeito de fazer streaming para Flash, para criar um clone do youtube (video on demand) basta extender o protocolo HTTP de um servidor web através de um módulo dentro do próprio servidor web (como o mod_flv_streaming do lighttpd) ou simplesmente fazendo um script em das linguagens suportadas pelo servidor (como este em php). Em outra hora eu faço um post de como fazer isto aqui.

python e AMF
A comunicação entre o Flash Player e o servidor remoto é feita por AMF e o Red5 não é sua única implementação Open Source. O AMF é protocolo binário, objetos e dados são serializados neste formato, o que aumenta a performace, chegando a ser 10 vezes mais rápido do que os protocolos baseados em texto como XML-RPC e SOAP. PyAMF é uma implementação em python deste protocolo que pode ser facilmente integrada ao Django ou TurboGears.

Outras implementações de AMF podem ser achadas aqui.

Geração de conteúdo, Compiladores e IDE's

Agora que eu já defini a tecnologia, como vou fazer para gerar meus aplicativos em Flash? Eu sou um usuário Linux, então precisa funcionar no Linux também. Uma das primeiras ferramentas que utilizei foi o haXe.

Haxe
O haXe é uma nova linguagem que se parece muito com ActionScript 2 (veja aqui as diferenças) e suporta a API do Flash antiga (ActionScript 2), quando a API nova (ActionScript 3). Ele permite criar código compatível com as versões 6 a 10 do formato da Flash Runtime, o SWF.

O haXe no entanto, não possui uma API para gerar interfaces de usuário (widget toolkit). Para isto, temos de usar o Flash IDE (pago, não aberto, somente windows e mac), SwfMill (Baseado em uma linguagem XML, Open Source) ou uma API de terceiros como a AsWing (muito parecida com o swing do java).

Flex
Em fevereiro de 2008, a Adobe lançou o Flex SDK como open source, o Flex consiste da linguagem de marcação MXML para criar a interface gráfica e da linguagem de script ActionScript para realizar a interatividade. A documentação do Flex pode ser encontrada aqui.

IDE's para desenvolvimento
O Flex Builder (gratuito para estudandes, não aberto, somente windows e mac, linux em alpha) além de entender MXML e ActionScript, permite criar interfaces gráficas em um editor WYSIWYG, não existe ainda (novembro/2008) nenhum equivalente Open Source com os mesmos recursos.

A melhor IDE open para desenvolvimento é a FlashDevelop. Ela suporta as linguagens ActionScript 2, ActionScript 3, MXML and haXe e os compiladores Flash CS3 (pago, não aberto, somente windows e mac), Flex SDK (código aberto), Mtasc (obsoleto, código aberto) e haXe (código aberto). Possui interface amigável, geração de código, complementação de código, suporte a documentação, instrospecção de binários e etc. A FlashDevelop só tem um problema, apesar de ser feito .Net só funciona em Windows.

IDE's para Animações
O Ajax Animator permite fazer animações online diretamente do browser, seu código fonte é aberto e pode ser baixado por qualquer um.

Gnash e Flash Runtime

Gnash é um projeto que busca criar um Flash Runtime totalmente aberto, figurando como uma alternativa ao Adobe Flash Player (gratuito, não aberto). Gnash suporta a maioria dos recursos do SWF 7 e alguns do SWF 8 e 9. Apesar de não implementar todos os recursos presentes no player da Adobe, o Gnash permite extender as classes do ActionScript. Entre as extensões disponíveis estão o suporte a mysql e a acesso a disco, as extensões são desabilitadas por padrão por óbvias razões de segurança.

Futuro da plataforma

Em maio de 2008, o Open Screen Project tornou as especificações do SWF e do FLV disponíveis sem restrições. As especificações dos protocolos Flash Cast e AMF também ficaram disponíveis por conta deste projeto. O código fonte da máquina virtual ActionScript já havia sido aberto em novembro de 2006 com o lançamento do projeto Tamarin, que incluiu a especificação byte code do ActionScript. Flex SDK, que já é open source desde fevereiro de 2008, completa a lista das iniciativas de abertura da Adobe até agora.

Apesar do lançamento do Open Screen Project, as especificações da platarfoma Flash continuam incompletas, detalhes como o protocolo RTMP e o codec de vídeo Sorenson Spark não foram revelados. Além disso, a Adobe parece não ter planos em tornar todo o código fonte da plataforma Flash aberto, softwares como o Adobe Flash Player e Flex Builder continuam com o código fonte fechados. A principal alternativa ao Flash Player, o Gnash, permanece incompleto, entretanto desde que o SWF é um formato aberto, o Gnash deverá ter uma qualidade muito superior no futuro próximo já que os desenvolvedores podem agora implementar a especificação oficial do SWF.

Outros projetos Open Source não mencionados

IDE:
Streaming:
  • HaxeVideo (código aberto, linux)
  • Milenia: The 64 Kbyte Flash Media Server (código aberto, linux, windows, mac)
Contribua para esta lista

Lista do osflash.org

Documentação de referência

Flex 3:
ActionScript 3:

Contribua para esta lista

8 comentários:

Fernando Sanches disse...

Oi.

Desculpa mas descordo totalmente quanto ao "Youtube ser um sucesso por ter sido feito em Flash".

O Youtube é um sucesso por que é uma idéia boa, com infra-estrutura funcional, recursos práticos e que agrada aos usuários. O flash é só a janelinha de vídeo.

Tudo bem que sem a janelinha o Youtube não teria a menor graça, mas ela não precisava ser necessariamente feita em Flash. Se fosse feita com outra tecnologia, os usuários não se importariam, desde que isso não prejudicasse a experiência como um todo;

a-9 disse...

Eu sou músico, mas estou tentando aprender essas coisas de html, css, javascript a flash. Este último está me dando muito trabalho, porque em (quase) tudo o que eu vou ler sobre esse tema, presume-se que a gente vai usar windows. (E eu uso GNU/Linux.) Estava até meio desanimado.
Os livros sobre actionscript já vão dizendo: "Open the adobe cs3 blah blah, and click on new actionscript file, blah blah. E eu, na verdade, gostaria de aprender a fazer isso em código puro. (Nem sei se é possível)

Baixei o Flex_SDK, um actionscript.vim (sintax colorida para actionscript no vim), mas mesmo assim, a falta de material de estudo (digo, que não sejam baseadas no Flex Builder ou no cs3) , e as "não muitas" opções em Linux me desanimaram um pouco, embora não desisti de pesquisar, até que vim parar aqui no seu blog, o que foi muito animador.

Todas essas informações são muito úteis pra quem quer desenvolver flash no Linux, e vão me ajudar muito. Muito obrigado por ter se dado ao trabalho de escrever tudo e colocar aí, a nossa disposicão.

Gostaria de pedir agúma indicação de livro, ou se existe algúm site que fale sobre actionscript em "plain source code".

Agradeço mais um vêz e "May the force be with you."

Tiago Peczenyj disse...

Olá.

Vc não chegou a mencionar o Wowza, que vem conquistando mercado tem algum tempo.

Alias vc dá a entender que o Youtube faz streaming quando faz, na verdade, progressive download ;-)

Iuri Diniz disse...

Para Fernando Sanches: Respeito sua opinião e concordo com ela, o youtube é um sucesso por que é uma excelente idéia, mas discordo e concordo no ponto que os usuários nem se importariam.

Concordo, pois realmente os usuários não se importam porque simplesmente o youtube funciona pois o vídeo em flash (levando em consideração que flash está instalado em 10 de cada 10 computadores) é plug-and-play.

Discordo pois quando as coisas não são plug-and-play, o usuário, de um certo modo, já se importa com a tecnologia: "Nan, tem que instalar XYZ para funcionar! não tenho XYZ, onde eu baixo XYZ? É muito complicado instalar este XYZ! este XYZ é muito grande baixar! vou usar linux porque XYZ não funciona".

Iuri Diniz disse...

Para Tiago Peczenyj

Sobre streaming:
Eu particularmente considero progressive download uma forma de fazer streaming.

Sobre wowza:
O wowza é fechado e só mencionei os projetos fechados da Adobe para referência.

se alguém quiser saber do wowza, procure por Wowza Media Server

Existem também vários projetos (open source) que eu não mencionei, vou aproveitar e atualizar o post.

Iuri Diniz disse...

a-9 falou: 'Gostaria de pedir agúma indicação de livro, ou se existe algúm site que fale sobre actionscript em "plain source code".'

Pelo seu comentário vi que você manja inglês, então o melhor para você que, como eu, quer fazer em 'plain old source code' sugiro os da própria Adobe:

MXML: Adobe Flex 3 Developer Guide

ActionScript: Adobe Flex 3 Programming ActionScript 3

Estes mostram muito código e pouca IDE (Flex builder)

Anônimo disse...

Uau, quanta informação, belo post, se fose a intenção fazer um servidor de videos o caminho já estaria bem traçado, mas gostei muito das informações sobre as licenças e ferramentas livre em torono do flash.

Vlw

rcsilva83 disse...

Muito bom o post! Faltou o SWFdec na listagem.

Abraço!