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.