Воспроизведение видео отлично работает в Eclipse, но при экспорте java-проекта в качестве исполняемого файла JAR он больше не работает - PullRequest
0 голосов
/ 05 июля 2019

Я написал код, который воспроизводит видео в формате .mp4 внутри JFrame.Я использую vlcj-3.0.1 и внутри затмения все работает отлично.Но когда я экспортирую проект Java как исполняемый файл JAR и помещаю папку res отдельно в ту же директорию, что и файл JAR, видео больше не воспроизводится.Я, должно быть, что-то не так с filepath, но я не знаю, что я делаю неправильно.

Я уже посмотрел Google и нашел тему с точно такой же проблемой:

VLCJ - воспроизведение видео из папки «res» прекрасно работает в Eclipse, но не из исполняемого файла JAR

Я пытался использовать рекомендации от Caprica, но безуспешно.

    // Attributes
Canvas c = new Canvas();
MediaPlayerFactory mpf = new MediaPlayerFactory();
EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer();
String mrl = new File("res/video/beach.mp4").getAbsolutePath();

// For Seeing the FilePath, so i can place the res folder correctly after 
//creating the runnable jar file
System.out.println(mrl);



// Giving the Libary for VLCJ Plugin
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "lib");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

// Setting up the player, didnt including the jframe here, since its working
emp.setVideoSurface(mpf.newVideoSurface(c));
emp.setEnableMouseInputHandling(false);
emp.setEnableKeyInputHandling(false);
emp.prepareMedia(mrl);
emp.setRepeat(true);
emp.play();

Я ожидал, что JFrame открывается и воспроизводит видео в цикле. JFrame выскакивает, но у меня просто черный экран ... (я установил свой цвет фона jframe в черный).

1 Ответ

1 голос
/ 07 июля 2019

спасибо за ответ.это была именно проблема.

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

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

Теперь все становится немного иначе.так как я хотел загрузить ресурсы из мест, где сохранен файл jar (поэтому файл jar динамически адаптируется к местоположению самого себя и добавленных ресурсов.

я добавил следующие строки:

String jarDir = new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()).getAbsolutePath();
String dir = jarDir;
String path = "res/video/beach.mp4"

mpf = new MediaPlayerFactory();
emp = mpf.newEmbeddedMediaPlayer();
emp.prepareMedia(dir + path);
emp.setRepeat(true);
emp.play();
...