2016-02-22 3 views
2

У меня есть .MP4-видео, размещенное в папке «res/media» внутри моего проекта. Я легко могу воспроизвести это видео в моем приложении от затмения, используя этот кусок кода:VLCJ - воспроизведение видео из папки «res» отлично работает в eclipse, но не из исполняемого файла JAR

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

я должен был использовать этот код, потому что использование только URL url = getClass().getResource("/media/video.mp4"); делает VLCJ не может получить доступ к видео с помощью этого URL.

При создании исполняемого файла JAR, я получаю эти ошибки в консоли:

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. 

Библиотеки успешно загружены, и я даже могу играть любое видео, которое находится вне моего файла JAR.

Любые предложения?

И спасибо заранее.

ответ

2

Локатор носителей информации (MRL) не совпадает с URL-адресом.

Опубликованный вами журнал показывает, что VLC пытается открыть. Информативный часть:

[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" явно не является допустимым именем файла?

Так что этот код является ошибочным:

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

Этого типа вещи, без .getFile(), обычно используется для загрузки ресурсов из приложения классов. Это не тот случай, когда вы пытаетесь получить имя файла.

Вы просто должны делать что-то вроде:

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

Но это, конечно, зависит от того, что является «текущий» каталог для вашего приложения, и не будет работать внутри файла JAR.

С другой стороны, VLC может воспроизводить медиа, содержащиеся в файлах zip (и, следовательно, jar), с MRL, который немного похож на то, что вы разместили. Что-то вроде:

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

Благодарим за ответ. Но 'getAbsolutePath();' возвращает неправильный путь к видео из файла jar: 'D: \ Desktop \ res \ media \ video.mp4' , в то время как jar находится на моем рабочем столе с именем" app.jar ", выглядит он пропускает файл jar. Я также попробовал 'showMedia (" jar: // D: /Desktop/app.jar! /res/media/video.mp4 ");' и это не сработало. Что мне здесь не хватает? –

+0

Если вы хотите играть изнутри файла jar, вы должны использовать формат zip MRL, который я уже описал. Если вы хотите динамически обнаруживать путь к файлу jar во время выполнения, вам нужно будет сделать некоторые манипуляции с строкой самостоятельно, чтобы создать полный zip-файл MRL – caprica

Смежные вопросы