Relatifs à la vidéo (Dvd,.avi.mkv) en Java


Après avoir cherché une bibliothèque décente pour lire des vidéos en Java, je me suis décollé. Tout le monde autour crie de ne pas utiliser JMF car il est obsolète, ancien et nécessite que l'utilisateur l'installe, d'autres alternatives telles que VLCJ semblent bonnes si elles fonctionnent mais sont encore relativement instables et reposent sur de lourdes quantités de code natif, et pour ce qui est du traitement des DVD, cela ressemble à de la poussière

Options actuelles:

  • Maintenant JavaFX 2 prend de l'ampleur c'est quelque chose que j'ai sérieusement regardé (d'où ma question ici) mais je n'ai pas eu de chance jusqu'à présent en essayant de trouver comment le faire jouer autre chose que la vidéo FLV standard bog.
  • VLCJ fonctionne bien pour ce qu'il fait (voir ma réponse actuelle) et pour le moment, c'est ce que je vais faire. Il utilise libvlc pour faire à peu près n'importe quoi, car il peut lire à peu près n'importe quel fichier et lire des DVD hors de la boîte aussi. Le gros problème est que vous devez utiliser plusieurs machines virtuelles pour chaque joueur pour le faire fonctionner de manière stable, ce qui signifie que la réponse est relativement lente. Je n'ai pas encore cette approche pour travailler sur un Mac.
  • JMF est ridiculement obsolète, horrible et tout simplement pas vraiment une option en ce qui me concerne. J'ai joué avec elle dans le passé, et l'expérience n'a pas été un bon!
  • FMJ dit que c'est une baisse de remplacement pour JMF. Je n'ai pas encore réussi à le faire fonctionner, comme la plupart des autres personnes à qui j'ai parlé, et cela en soi me fatigue de sa qualité et de sa compréhension même si j'arrives à le faire fonctionner!
  • Xuggler est génial pour ce qu'il fait, il a des tutoriels brillants et il est très bien écrit. Mais bien que ce soit génial pour le travail de transcodage de bas niveau, lire une vidéo et obtenir les images dans le bon ordre et dans la synchronisation, etc. est juste un cauchemar pour fonctionner correctement, et ajoute encore plus de code, ce qui signifie plus de maintenance, potentiellement plus de bugs, etc. etc...
  • Je n'ai pas encore essayé GStreamer-Java avec de la colère, bien que cela ne semble pas le faire prise en charge de la lecture de DVD (c'est une application open source sur laquelle je travaille, donc les plugins commerciaux ne sont pas non plus une option) et son support de codec ne semble pas être le plus large.
  • JCodec est un effort intéressant, le seul que j'ai vu pour implémenter le support vidéo dans une perspective Java pure - mais le support des formats fait défaut pour le moment et c'est un projet relativement nouveau.
  • Écrire quelque chose moi-même dans une bibliothèque native différente pour chaque plate-forme que je veux prendre en charge. C'est le option de dernier recours absolue en raison du temps de maintenance et de codage supplémentaire dont elle aurait besoin.

Sur la base de ce qui précède (ou de toute autre chose à laquelle vous pouvez penser), quelles options les gens recommanderaient-ils et y a-t-il d'autres options raisonnables que j'ai manquées? Ou d'autres personnes pourraient être disponibles dans un avenir proche?

Author: Community, 2011-01-12

7 answers

Après avoir fait beaucoup de recherches sur différentes options et en avoir essayé quelques - unes, je suis allé avec VLCJ après tout, mais voici le hic-tout le truc VLCJ est fait dans des machines virtuelles hors processus. C'est un peu plus compliqué à configurer (voir ici pour la façon dont je l'ai fait) mais après vous pouvez jeter tout ce que vous voulez et cela fonctionne très bien (actuellement en utilisant 3 joueurs hors processus sans problème de stabilité.)

Xuggler était génial, mais malheureusement trop faible niveau pour moi - la quantité de réinventer la roue (et une roue pire à cela) nécessitait juste pour obtenir la lecture avec la recherche de travail me rebutait quelque peu; je sentais qu'il faudrait une éternité pour régler tous les problèmes avec elle. Pour l'encodage / transcodage / autre travail vidéo de bas niveau, je le recommande de tout cœur - le meilleur sans aucun doute.

Mises en garde avec mon approche choisie? Eh bien, si les machines virtuelles externes ne sont pas arrêtées explicitement, elles continueront à lire la vidéo en arrière-plan même après la fermeture de l'application, et débogage devient plus difficile avec cette approche. Je n'ai pas encore vérifié qu'il fonctionne sur Mac, et ma suggestion initiale n'est probablement pas parce que d'après ce que j'ai entendu, macOS ne laisse pas un processus contrôler la fenêtre d'un autre sans autorisation explicite avec du code natif. Cela devrait être possible avec un peu de travail cependant.

En tant que spin off du projet sur lequel je travaille en ce moment, je pourrais voir si je peux résumer toute cette fonctionnalité hors processus dans un simple framework vidéo Java qui utilise VLCJ en-dessous. Si quelqu'un serait intéressé par cela (je ne peux rien promettre, mais plus j'ai d'intérêt, plus je suis susceptible de travailler dessus) alors n'hésitez pas à me le faire savoir!

Donc, après mes recherches et mes conclusions, je recommanderais d'aller avec VLCJ (maiscertainement en utilisant des lecteurs hors processus) si vous voulez juste lire / enregistrer / diffuser des trucs vidéo, et Xuggler si vous voulez faire un travail vidéo de bas niveau avec les codecs eux-mêmes. Au moment d'écrire ces lignes, il n'y a tout simplement pas de nice, pure Solution Java, et cela restera probablement de cette façon pendant un certain temps - heureusement, il est possible d'obtenir des résultats décents avec des bibliothèques natives multiplateformes. Cela nécessite juste beaucoup plus de travail!

 10
Author: Michael Berry, 2011-11-23 22:36:01

J'ai utilisé jffmeg sur certains de mes projets(liaisons java ffmeg), jusqu'à présent, je n'ai rencontré aucun problème. http://jffmpeg.sourceforge.net/documentation.html . J'ai également utilisé qt-jambi, mais je n'ai jamais essayé sa vidéothèque(phonon), cela peut également résoudre votre problème.

 2
Author: olafpadme, 2011-01-17 16:53:33

Avez-vous essayé d'utiliser les API JavaFX?.

La façon dont je le vois JavaFX inclut la prise en charge de la lecture H. 264... et ici, quelqu'un montre comment lire une vidéo dans Googles new open source WebM / VP8

Http://javafxplace.blogspot.com/2010/06/javafx-and-webm-on-linux.html

 1
Author: Fernando el Geek, 2011-01-15 11:04:08

Essayer Xuggler , il enveloppe le célèbre FFmpeg les bibliothèques Java.

 1
Author: ismail, 2011-01-15 11:40:50

Je peux recommander les liaisons gstreamer-java. Comme son nom l'indique, il encapsule l'API GStreamer dans les classes Java. De cette façon, vous avez accès aux capacités graphiques de traitement des médias fournies par GStreamer. Cela peut être vraiment bien si vous voulez faire des tâches plus avancées comme le transcodage.

Aussi, si je me souviens bien, il y avait un plugin commercial pour GStreamer qui prenait en charge la lecture de DVD et était livré avec une licence pour le CSS. Si cela n'a pas d'importance pour votre cas d'utilisation, vous pouvez toujours aller avec l'open-source, trop (le seul que j'aie besoin).

 1
Author: Waldheinz, 2011-01-17 22:43:13

Je serais d'accord pour rester loin de JMF. Même JMF s'appuie sur du code natif pour certaines de ses fonctionnalités. Vous ne risquez pas d'avoir une sorte de dépendances natives de toute façon. Une autre option serait FMJ. C'est une version open source de JMF. Je n'ai pas eu beaucoup de chance avec ça, cependant.

Ma suggestion serait d'aller avec VLCJ. J'explorais cela quand j'avais besoin d'une solution multimédia. Malheureusement il est publié sous la GPL donc je ne peux pas l'utiliser dans mon application, mais il semble qu'elle devrait être capable de gérer ce que vous voulez.

Aussi, mon autre post pourrait vous intéresser. Lien

Aussi, ce peut être utile.

 1
Author: user489041, 2017-05-23 11:46:19

J'utilise actuellement la bibliothèque OpenImaj http://openimaj.org/tutorial qui a un

XuggleVideo and XuggleAudio class

Je vous suggère de l'utiliser et d'implémenter vos propres mécanismes de threading pour les jouer. Je travaille actuellement sur un lecteur multimédia avec l'espoir de le faire lire les formats vidéo "populaires" depuis le

VideoDisplay class

Dans la bibliothèque fait du bon travail mais la lecture est un peu saccadée et la bibliothèque a été implémentée avec swing à l'esprit et en attachant le

ImageComponent 

Vers un nœud swing cela ne semble pas fonctionner pour une raison quelconque dans JavaFX, mais je suis en mesure de leur obtenir des images à partir d'une vidéo affichée pour l'instant et j'espère avoir de la chance avec cela.

 0
Author: javatar, 2018-07-13 22:01:38