Предыстория
(можно сразу пропустить и перейти к следующему пункту)
При изучении Java, сразу после того как освоил Swing стало интересно, «А как же воспроизвести аудио, или видео?». Долго рылся на просторах Гугла, откопал там несколько библиотек которые в теории должны были дать мне именно то, что я хочу. Но как показала практика, большинство из этих библиотек читают очень малое количество форматов и не очень удобны в использовании. Еще порывшись пару дней, нашел наконец-то то, что в теории должно было помочь мне с решением задачи. Библиотека VLCj берет кодеки из VLC медиаплеера и с их помощью воспроизводит файлы. Еще день страданий с туториалом на официальном сайте и наконец-то удалось запустить воспроизведение видеофайла в JFrame.
Перейдем собственно к делу:
1. Скачаем саму библиотеку (лучше брать не самую последнюю версию, так как у нее есть проблемы с совместимостью) ссылка
2. Если у вас еще не установлен VLC медиа плеер, то вам придется его скачать и установить. Скачать его можно на официальном сайте VideoLan (лучше брать последнюю версию, она содержит больше кодеков).
3. IDE, я использую Eclipse.
Для начала создадим новый проект и назовем его к примеру, «MediaPlayer».
Теперь откройте папку MediaPlayer в вашем eclipse-workspace, и распакуйте скачанный архив с библиотекой в эту папку.
Далее в Eclipse, в настройках вашего проекта нажмите «Add External JARs» и в открывшемся окне найдите и выберете файл vlcj-3.0.1.jar. Выбираете ЕГО И ТОЛЬКО ЕГО.
Итак, библиотеку к проекту подключили. Далее нам нужно создать экземпляр класса. Создадим к примеру Test.java (надеюсь этот процесс никому объяснять не нужно).
Получили пустой класс с приблизительно таким содержанием:
public class Test {
public static void main(String[] args) {
}
}
Далее нам нужно создать JFrame в котором мы хотим отобразить наше видео. Так же создадим JPanel и поместим в него Canvas который мы используем в качестве сурфейса для нашего видеоплеера.
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setBounds(100,100,1000,600);
Canvas c=new Canvas();
c.setBackground(Color.black);
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(c);
f.add(p);
}
}
Итак, визуальная часть готова. Далее обратимся непосредственно к библиотеке и VLC плееру. И собственно создадим сам плеера в нашем фрейме.
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\VideoLAN\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
MediaPlayerFactory mpf= new MediaPlayerFactory();
EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f));
emp.setVideoSurface(mpf.newVideoSurface(c));
emp.setEnableMouseInputHandling(false);
emp.setEnableKeyInputHandling(false);
String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi";
emp.prepareMedia(file);
emp.play();
Здесь мы указали путь к плееру VLC (а точнее к файлам libvlc.dll, libvlccore.dll и папке plugins). Создали расширенный медиаплеер (он обладает большим набором возможностей чем просто «медиаплеер»), присвоили ему сурфейс, указали путь к видеофайлу, подготовили файл к воспроизведению и собственно воспроизвели.
В итоге ваш код будет иметь приблизительно такой вид:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.windows.Win32FullScreenStrategy;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setBounds(100,100,1000,600);
Canvas c=new Canvas();
c.setBackground(Color.black);
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(c);
f.add(p);
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files/VideoLAN/VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
MediaPlayerFactory mpf= new MediaPlayerFactory();
EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f));
emp.setVideoSurface(mpf.newVideoSurface(c));
emp.setEnableMouseInputHandling(false);
emp.setEnableKeyInputHandling(false);
String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi";
emp.prepareMedia(file);
emp.play();
}
}
Учитывайте что:
— У вас путь к VLC медиа плееру может отличаться.
— Путь к вашему видеофайлу может отличаться.
Для удобства можно скопировать необходимые файлы из VLC медиа плеера в ваш проект. Так же это исключит необходимость устанавливать VLC на компьютерах где должна будет работать ваша программа.
У меня поначалу возникли сложности с воспроизведением файлов, у которых в названии, или в пути есть кириллица. Если у вас возникнут такие же сложности, то кликните правой кнопкой по вашему экземпляру класса и зайдя в его настройки измените его кодировку на UTF-8
Комментарии (3)
CrazyDeveloperZz Автор
26.12.2018 02:17Вот поступило небольшое, но полезное дополнение:
Я когда делал то же самое год назад, встретил проблему. Не работало и все тут! А оказалось у меня Java 64 бита, а VLC то 32!
А у VLC на 64 разряда еле нашел, тогда. Не знаю как сейчас, но в то время у них была только бета и закопанная в самом дальнем уголке сайта.
vlanko
Зачем был ГУИ, если плеер вроде покажет в полный экран?
CrazyDeveloperZz Автор
Плеер покажет в полный экран, если дописать emp.toggleFullScreen();
Без этой строчки изображение будет отображаться в фрейме