Хорошие коллеги!
У меня было несколько проблем с использованием VLCJ и других API-интерфейсов Java.
1) Я бы добавил простой *.srt файл в свой EmbeddedMediaPlayerCompononent, бот, как это возможно?
2) Также, как я могу настроить VLC lib в x64 Windows OS?
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files (x86)\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),libVlc.class);
Это плохо работает.
3) Как я могу добавить базовый интерфейс операции в свой EmbeddedMediaPlayerCompononent, например, кнопку паузы/воспроизведения?
Спасибо, всего хорошего! :)
Мой класс "VideoPlayer"
package GUI.MediaPlayer;
import java.awt.BorderLayout;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import StreamBean.UIBean;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
public class VideoPlayer extends JFrame{
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
public VideoPlayer(String videoURL) {
String os = System.getProperty("os.name").toLowerCase();
if(os.startsWith("win")){
String registrytype = System.getProperty("sun.arch.data.model");
System.out.println("a rendszered : " +os+" - " +registrytype+ " bites");
if(registrytype.contains("32")){
//Windows 32 bites verzió
System.out.println("Belépett a 32-be");
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}else if(registrytype.contains("64")){
//Windows 64 bites verzió
System.out.println("Belépett a 64-be");
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files (x86)\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}else{
JOptionPane.showMessageDialog(null, "Kérem előbb telepítse a VLC lejátszót.");
}
}
if(os.startsWith("mac")){
//Mac OSX kiadáshoz
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC.app/Contents/MacOS/lib/");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}
this.setTitle("Aktuális videó");
this.setLayout(new BorderLayout());
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
this.add(mediaPlayerComponent,BorderLayout.CENTER);
this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
//set the Jframe - this - resolution to the screen resoltuion
new UIBean().setWindowSize(this);
this.setVisible(true);
mediaPlayerComponent.getMediaPlayer().playMedia(videoURL);
}
}
Чтобы установить файл внешних субтитров:
mediaPlayerComponent.getMediaPlayer().setSubTitleFile("whatever.srt");
Как вы добавляете кнопку паузы/воспроизведения, полностью зависит от вас, для этого требуется стандартный код Swing, который не является особым для vlcj. Вы добавляете кнопки в свой пользовательский интерфейс и связываете эти кнопки с медиаплеером с помощью прослушивателей событий. Например, это один из способов:
JButton playButton = new JButton("Play/Pause");
playButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
mediaPlayerComponent.getMediaPlayer.pause();
}
});
Существует множество причин, по которым родная библиотека может быть не найдена, но NativeLibrary.addSearchPath(...), безусловно, работает. Вы должны быть уверены, что сопоставляете архитектуры процессоров вашей JVM и вашей установки VLC (для 32-разрядной JVM требуется 32-разрядная VLC, для 64-разрядной JVM требуется 64-разрядная VLC). В большинстве случаев вы должны просто использовать:
new NativeDiscovery().discover();
Существует целая серия пошаговых руководств по адресу http://capricasoftware.co.uk/#/projects/vlcj/tutorial
Сосредоточив внимание на аспекте "базового операционного интерфейса" вашего вопроса, обратите внимание, что EmbeddedMediaPlayerComponent
расширяет Panel
, компонент AWT. Соответственно, пример перекрытия VLCJ, показанный здесь, переопределяет paint()
. Этот связанный, автономный пример иллюстрирует тестирование попадания в таком контексте.