Воспроизведение медиафайлов с помощью библиотеки VLCj

в 1:17, , рубрики: java, libvlc, VlcJ

Предыстория

(можно сразу пропустить и перейти к следующему пункту)

При изучении 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 FilesVideoLANVLC");
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:\UsersAdmineclipse-workspaceMediaPlayer/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:\UsersAdmineclipse-workspaceMediaPlayer/video.avi";       
   emp.prepareMedia(file);
   emp.play();
 }
}

Учитывайте что:
— У вас путь к VLC медиа плееру может отличаться.
— Путь к вашему видеофайлу может отличаться.

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

У меня поначалу возникли сложности с воспроизведением файлов, у которых в названии, или в пути есть кириллица. Если у вас возникнут такие же сложности, то кликните правой кнопкой по вашему экземпляру класса и зайдя в его настройки измените его кодировку на UTF-8

Автор: CrazyDeveloperZz

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js