Blog::TI


Cada sorriso, um Flash!
Categoria(s): Programação TI Web

Tá, eu sei que já falei de Flash ultimamente, mas o aplicativo da Adobe voltou a ser assunto estes dias.

Primeiro, porque o iPad saiu oficialmente, e realmente sem suporte ao Flash. Enquanto alguns dizem que isso é primordial, a Apple publicou uma lista de sites que suportam o iPad.

Na prática, isso quer dizer: sites que rodam sem Flash. Ou melhor ainda: sites que detectam que o navegador é o Safari Mobile, e exibem uma versão sem Flash.

Seria isso o suficiente para as empresas criarem sites sem o uso do plugin?

Enquanto isso, a Google anuncia que o Chrome virá com o plugin do Flash já por padrão em seu navegador. Não acredito que a empresa veja o plugin como futuro (já que ela vem investindo fortemente no HTML5 em seus produtos exatamente para substituir o Flash).

Acredito que seja apenas uma alfinetada à Apple e ao seu iPad, já que a notícia foi dada praticamente em conjunto com o lançamento do iPad - e como vocês sabem, as duas empresas vem batendo de frente ultimamente, principalmente no que toca aos celulares e seus respectivos sistemas, concorrentes.

E ainda por último, mas não menos importante, ontem um amigo meu me mandou um link dessa biblioteca Javascript, o Spritely, que diz substituir perfeitamente o Flash no que diz respeito à animações. O que vocês acham?






Atualização no tutorial de Templates

Atualizei a biblioteca de Templates com um novo método para checar se uma variável de template existe antes de atribuir valor para a mesma.

Fiz isso porque boa parte das dúvidas que me enviam por email é relacionado a isso.

Também atualizei o tutorial e a documentação em inglês e português.

Agora preciso dormir porque o dia foi longo e amanhã me espera!

Espero que seja útil! :)






A farsa dos televisores 3D
Categoria(s): Eletrônicos TI TV Uadarréu

Curtiu Avatar? Pensou em ter uma TV capaz de rodar filmes 3D em casa? É isso que a Sony e outras fabricantes prometem.

Desde que você troque sua recém comprada TV de LCD.

Aliás, isso sempre me lembra que nos anos 80, eu jogava com óculos 3D no Master System, exatamente com o mesmo princípio usado nas "novas" TVs em 3D. E funcionava muito bem.

Como não gosto de ficar replicando artigos de outras fontes, leia este artigo que conta toda a enganação das novas TVs 3D no site da Super Interessante.

Leia lá, comente aqui :)






Gravando vídeo da web

Nesse post vou falar descrever meu calvário ao tentar fazer um gravador de vídeo para web, no início tentando fazer ele com Java, e depois partindo para uma solução em Flash.

Aproveitando meu trabalho anterior com multimídia em Java, a mesma empresa que me pediu o trabalho do player multimídia, me solicitou que eu fizesse um gravador de vídeo que usasse a webcam do usuário. Porém, rodando na web.

Além disso, o gravador de vídeo também deveria capturar o som do microfone.

Parte 1: Tentando com Java

Bom, lá fui eu tentar usar o JMF novamente, já que ele captura o vídeo quando instalado na máquina do usuário. Achei no site da Sun umas classes que complementam o JMF e mostram na tela o vídeo que está sendo capturado (o JMF sozinho não mostra).

O chato, porém, é que pra ele capturar vídeo é preciso ter algumas bibliotecas nativas (DLLs ou .so) instaladas no dekstop do usuário.

E com applets, vira aquele parto: fiz um applet assinado (que o usuário tem que aceitar o alerta de segurança), e fiz um esquema pra detectar se o usuário tinha as bibliotecas nativas. Caso não tivesse, eu redirecionava ele para uma página com o instalador.

Bom, aí começaram os problemas: embora gravasse o vídeo, o cliente disse que os usuários do seu sistema seriam os mais novatos possíveis, e não gostou da solução de instalação de bibliotecas nativas.

Além disso, para um applet conseguir usar o microfone não basta ele ser assinado. Se isso já não fosse incômodo o suficiente, eu teria que achar uma solução para criar o arquivo .java.policies na pasta do usuário. E mesmo assim, o applet não consegue gravar e reproduzir ao mesmo tempo (por questões de segurança). Me pareceu ser um bug na verdade, já que em vários fórums disseram que arrumando as policies isso funcionaria.

Com javawebstart, o som era gravado normalmente, mas além do problema das bibliotecas nativas e seu instalador, o cliente não gostou de ser uma aplicação não embutida na página.

Ou seja, resumindo: se você fizer em javawebstart, e instalar bibliotecas nativas no computador do usuário, funciona.

Mas ainda assim, o vídeo gravado não terá compactação, será em RGB ou YUV.

Depois de pesquisar outras soluções, cheguei a duas possíveis: comprar uma biblioteca que permite um applet gravar som e vídeo (da Vimas Technologies), porém só funciona no Windows; ou jogar tudo pro alto e tentar usar o Flash.

Parte 2: Usando Flash

Já que em Java não deu certo, e eu não podia deixar o cliente na mão, fui então pesquisar como fazer o gravador de vídeo em Flash.

Eu usei bastante Flash em 1999 e 2000, na época do Flash 3 e 4, pra fazer umas animações, ou seja, muita água rolou por debaixo da ponte desde então.

Muita gente sabe aqui que não gosto de usar Flash, Applets ou qualquer outro tipo de plugin para fazer coisas que é possível fazer com Javascript+HTML. Porém esse não foi o caso.

Depois de achar na web alguns exemplos ensinando como usar a câmera (existe um objeto ActionScript chamado Camera - simples, não?), eu li que para gravar o vídeo num servidor, eu precisaria de um serviço de hospedagem com suporte ao Flash Media Server, da Adobe.

Outra vantagem, é que o vídeo é gravado diretamente no servidor em formato .flv (que usa o codec h.264).

Após consultar alguns fóruns, indicaram o serviço da Influxis (estrangeiro), que disseram ser ótimo, além de serem parceiros da Adobe.

O cliente contratou o serviço, fui lá e configurei a conta, e aí tentei sair do "olá mundo" com o uso da câmera no Flash. Vi que usando o objeto NetStream, eu conseguia gravar um vídeo da câmera no servidor (e reproduzir, se necessário), bastando conectar o vídeo gravado num objeto Video. Tudo bem simples mesmo.

Bom, aí agora faltava elaborar mais o gravador: colocar botões, capturar os eventos, fazer pausa, stop, etc. E me deparei com algo que não esperava: a bagunça que virou o ActionScript.

Além de 3 versões, o Actionscript 2 é totalmente diferente do 3. Fora isso, boa parte do que eu tive que usar para criar o player, não estava documentada no help do Flash. Pra ajudar, existem vários sites da Adobe com parte da documentação, e coisas que você só acha em fórums (que não sejam da Adobe).

Ou seja, eu tive que ficar procurando pela web cerca de 70% do código final, que era de coisas não documentadas, e ficar na tentativa e erro.

Pra ajudar, depois de 4 horas tentando achar o motivo do gravador de vídeo ter parado de funcionar de repente, eu notei que ele precisa ter a largura e altura mínimas suficiente para mostrarem o alerta de segurança (que confirma se o usuário permite usar a câmera). Caso o flash não tenha altura e largura mínimas pra essa confirmação aparecer, simplesmente não há captura do vídeo.

Enfim, saiu, mais foi um parto. E espero que isso possa ajudar alguém que precise fazer o mesmo.






Player multimídia em Java

Recentemente precisei fazer, para uma agência de publicidade, um player de vídeo em Java, que além da necessidade óbvia de rodar no Linux, atendesse à vários requisitos deles, como: sempre iniciar em full screen, ler a playlist de um arquivo XML remoto (ou não), fornecer estatísticas de uso pra um banco de dados, exibir imagens, reproduzir cada item durante um tempo programado, exibir arquivos Flash, etc.

Como não achei tutorial algum na web explicando o que fazer (seja em português, seja em inglês), vou descrever brevemente o que fiz e funcionou tanto no Windows XP, Vista e Ubuntu 9.10.

Existe uma plataforma de multimídia pra Java, o Java Multimedia Framework, da Sun. Funciona bem, captura vídeo também, porém os codecs já estão bem desatualizados. Saí em busca de algo que pudesse reproduzir os formatos mais populares hoje em dia.

Primeiramente um resumo do que procurei e NÃO funcionou:

- FMJ: uma tentativa de reescrever o código do JMF. Funciona bem pra reproduzir vídeos, porém faltam várias features, e é muito difícil de se reaproveitar o código pra fazer algo.

- JFFMPEG: um wrapper Java para a FFMPEG (biblioteca de codecs feitos em C e usado para vários players tanto em Windows quanto Linux). A idéia deles é boa: se o codec existir nativamente, usa a versão nativa, senão usa a versão em Java. O problema: eles não fornecem as bibliotecas nativas para Windows. Eu notei que os envolvidos fundaram uma empresa e agora VENDEM uma solução. Por isso tiraram os arquivos que fariam a coisa funcionar. Até existem os passos pra se compilar tudo, mas além de estarem escondidos no site, são incompletos.

Depois de abandonar estas duas soluções, achei o FOBS4J, que é uma solução em Java baseada no JMF e um wrapper sobre a FFMPEG. Baixei e funcionou com todos os vídeos comumente usados.

Como eles usam o JMF como base, baixei o código dele também do site da Sun. Não é o código mais lindo do mundo, mas pode ser reusado numa boa.

Agora aqui mais algumas dicas salvadoras:

- a versão 0.4.2 do fobs4j (que só existe pra Windows) é altamente instável, não a use (ela sempre dá crash por volta de 5 minutos de reprodução de vídeo);

- como você vai ver nos exemplos do fobs4j, você vai precisar sempre informar qual o path das DLLs/SOs (use um script no Linux, e um .bat ou .exe no Windows);

- o código do JMStudio é meio porquinho, então você pode tentar fazer seu próprio player, ou se estiver acostumado a ler código, pode tentar usar o do JMStudio pra algo.

- o JMF do fobs4j não inclui várias bibliotecas nativas. Se você precisar fazer captura de vídeo, vai precisar delas. Ou seja, basta baixar a versão do site da Sun e copiar estas bibliotecas.

Espero que isso possa ajudar quem tiver que passar pelos mesmos problemas.





Anúncios