2016-02-22 1 views
2

J'ai une vidéo .MP4 placée dans le dossier "res/media" de mon projet. Je peux facilement lire cette vidéo dans mon application d'Eclipse en utilisant ce morceau de code:VLCJ - lire une vidéo à partir du dossier "res" fonctionne très bien en éclipse, mais pas à partir du fichier JAR exécutable

String url = getClass().getResource("/media/video.mp4").getFile(); 
url = new File(url).getPath(); 
showMedia(url);  //the method that plays the video 

je devais utiliser ce code, car en utilisant uniquement URL url = getClass().getResource("/media/video.mp4"); fait VLCJ ne peut pas accéder à la vidéo à l'aide de cette URL.

Lors de la création du fichier JAR exécutable, je reçois ces erreurs dans la console:

libdvdnav: Using dvdnav version 5.0.0 
libdvdread: Could not open D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4 with libdvdcss. 
libdvdread: Can't open D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4 for reading 
libdvdnav: vm: failed to open/read the DVD 
[1644d0ac] filesystem access error: cannot open file D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4 (Invalid argument) 
[1644d0ac] main access error: File reading failed 
[1644d0ac] main access error: VLC could not open the file "D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4" (Invalid argument). 
[1645643c] main input error: open of `file:///D:/Desktop/file%3A/D%3A/Desktop/app.jar%21/media/video.mp4' failed 
[1645643c] main input error: Your input can't be opened 
[1645643c] main input error: VLC is unable to open the MRL 'file:///D:/Desktop/file%3A/D%3A/Desktop/app.jar%21/media/video.mp4'. Check the log for details. 

Les bibliothèques sont chargées avec succès, et je peux même jouer une vidéo qui est en dehors de mon fichier JAR.

Des suggestions?

Et merci d'avance.

Répondre

2

Un localisateur de ressources multimédias (MRL) n'est pas identique à une URL.

Le journal que vous avez publié montre ce que VLC tente d'ouvrir. La partie informative est:

[1644d0ac] filesystem access error: cannot open file D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4 (Invalid argument) 

"D:\Desktop\file:\D:\Desktop\app.jar!\media\video.mp4" est clairement pas un nom de fichier valide?

Donc, ce code est imparfait:

String url = getClass().getResource("/media/video.mp4").getFile(); 

Ce genre de chose, sans .getFile(), est habituellement utilisé pour charger des ressources du classpath de l'application. Ce n'est pas le cas ici quand vous essayez d'obtenir le nom du fichier.

Vous devez juste faire quelque chose comme:

String mrl = new File("res/media/video.mp4").getAbsolutePath(); 

Mais cela dépend bien sûr de ce qui est le répertoire « en cours » pour votre application, et ne fonctionnera pas dans un fichier jar. D'autre part, VLC peut lire les médias contenus dans les fichiers zip (et donc jar), avec une MRL qui ressemble un peu à ce que vous avez posté. Quelque chose comme:

zip://file.jar!/res/media/video.mp4 
+0

Merci pour la réponse. Mais 'getAbsolutePath();' renvoie un mauvais chemin à la vidéo du fichier jar: 'D: \ Desktop \ res \ media \ video.mp4' alors que le pot est sur mon bureau nommé" app.jar ", ressemble c'est ignorer le fichier jar. J'ai également essayé 'showMedia (" jar: // D: /Desktop/app.jar! /res/media/video.mp4 ");' et cela n'a pas fonctionné aussi bien. Qu'est-ce qui me manque ici? –

+0

Si vous voulez jouer depuis le fichier jar, vous devez utiliser le format zip MRL que j'ai déjà décrit. Si vous voulez découvrir dynamiquement le chemin de votre fichier JAR au moment de l'exécution, vous devrez effectuer vous-même une manipulation de chaîne pour générer le fichier zip complet. – caprica