August 9th, 2009 @ 5:23pm | njames | Categories Coding |
No Comments »
Pour un projet d'annotation de document vidéo (annotation sémantique manuelle), j'investigue du côté des différentes API existantes pour intégrer un player vidéo dans une application Java.JMF, Java Media Framework
Bien sûr, il y a JMF, Java Media Framework, mais cette API commence à vieillir, et de plus elle cafouille un peu avec Java1.5, il est recommander d'utiliser JMF avec Java1.4 (voir ici ou là), ce qui est potentiellement embêtant.
Quelques liens sur JMF:
Les alternatives
- des bindings avec ffmpeg, via JNI ou JNA, comme FMJ, Freedom for Media in Java, qui se veut un clone de JMF en quelque sorte.
Pour le binding avec ffmpeg, JNA est utilisé.
Cette API n'embarque pas de version de ffmpeg, et s'appuie sur la version de ffmpeg disponible sur la machine locale. - jffmpeg: un plugin pour JMF, de nombreux codecs présent dans ffmpeg sont recodés en Java, voir cette page.
Pour ajouter le plugin jffmpeg au JMFRegistry voir cette page (contrairement, à FOBS, il n'y a pas de détection des codecs, il faut enregistrer les Mime Types, Plugins et Codecs à la main dans le JMFRegistry). - FOBS, qui est un wrapper objet au dessus de ffmpeg, et apporte des API C++, Java et python au dessus de ce wrapper. Côté Java, c'est via un plugin JMF, FOBS4JMF, qu'opère l'API Java de FOBS, (vu les performances décevantes au décodage d'un XVID, il faut utiliser une JVM1.4 pour JMF, c'est plus fluide mais pas encore assez cependant, ce n'est pas très beau, ffplay fait beaucoup mieux).
FOBS embarque sa propre version de ffmpeg et de jmf.
Pour le tester, après son installation, aller dans~FOBS/dist/jmf, et utiliser le JMStudio de JMFjava -cp fobs4jmf.jar:jmf.jar JMStudio. - JVLC.
- gstreamer-java: un binding-java pour gstreamer, fonctionne vraiment très bien!
Le binding est basé sur JNA.
Cependant le projet est encore assez jeune, et il y a de nombreuses fonctionnalités que j'aimerais y trouver qui ne sont pas disponibles: choisir le flux dans le container (vidéo et/ou audio), pause puis passer à la frame suivante, lecture accélérée -1 ou +1 etc.. - Xuggle-Xuggler: binding sur ffmpeg.
- Quelques liens à propos de la nouvelle API de sun, la Java Media Components API:






