Хабрахабр

[Из песочницы] Воспроизведение медиафайлов с помощью библиотеки VLCj

Предыстория

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

Долго рылся на просторах Гугла, откопал там несколько библиотек которые в теории должны были дать мне именно то, что я хочу. При изучении Java, сразу после того как освоил Swing стало интересно, «А как же воспроизвести аудио, или видео?». Еще порывшись пару дней, нашел наконец-то то, что в теории должно было помочь мне с решением задачи. Но как показала практика, большинство из этих библиотек читают очень малое количество форматов и не очень удобны в использовании. Еще день страданий с туториалом на официальном сайте и наконец-то удалось запустить воспроизведение видеофайла в JFrame.
Библиотека VLCj берет кодеки из VLC медиаплеера и с их помощью воспроизводит файлы.

Перейдем собственно к делу:

1. Скачаем саму библиотеку (лучше брать не самую последнюю версию, так как у нее есть проблемы с совместимостью) ссылка

Если у вас еще не установлен VLC медиа плеер, то вам придется его скачать и установить. 2. Скачать его можно на официальном сайте VideoLan (лучше брать последнюю версию, она содержит больше кодеков).

IDE, я использую Eclipse. 3.

Для начала создадим новый проект и назовем его к примеру, «MediaPlayer».

Теперь откройте папку MediaPlayer в вашем eclipse-workspace, и распакуйте скачанный архив с библиотекой в эту папку.

0. Далее в Eclipse, в настройках вашего проекта нажмите «Add External JARs» и в открывшемся окне найдите и выберете файл vlcj-3. Выбираете ЕГО И ТОЛЬКО ЕГО. 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 У меня поначалу возникли сложности с воспроизведением файлов, у которых в названии, или в пути есть кириллица.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть