Olá,
Acompanhando o seu post, já havia pesquisado na internet sobre o vlcj. Consegui gravar/reproduzir áudio e vídeo com esta API, e também já encontrei diversos códigos no site do vlcj (http://code.google.com/p/vlcj/source/browse/trunk/vlcj/src/test/java/uk/co/caprica/vlcj/test/capture/CaptureTest.java).
Como minha app deve reproduzir diversos vídeos simultaneamente, conforme este exemplo (http://stackoverflow.com/questions/11078586/vlcj-creating-multiple-video-panels), procurei adaptar para minha necessidade, mas estou obtendo o erro abaixo:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at testesdiversos.Movie.<init>(Movie.java:107)
at testesdiversos.Movie$5.run(Movie.java:165)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
O código que estou adaptando, baseado no seu (solicitando sua permissão para tal, claro…!!!), é o seguinte:
package testesdiversos;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import uk.co.caprica.vlcj.binding.internal.libvlc_media_t;
import uk.co.caprica.vlcj.player.MediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import com.sun.jna.NativeLibrary;
public class Movie extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private final String LIB_VLC_PATH = "C:\\Arquivos de programas\\VideoLAN\\VLC" ;
private final String LIB_VLC_CORE_PATH = "C:\\Arquivos de programas\\VideoLAN\\VLC" ;
private JPanel topPanel = new JPanel();
private JPanel statusPanel = new JPanel();
private JButton playButton = new JButton("Play");
private JButton stopButton = new JButton("Stop");
private JButton pauseButton = new JButton("Pause");
private MediaPlayerFactory factory;
private EmbeddedMediaPlayer[] mediaPlayer;
private String[] video = {"C:\\VLCSnaps\\VideoInstitucional.wmv", "C:\\VLCSnaps\\FunnyCats.flv"};
int Video_Width = 200; // Original = 550
int Video_Height = 150; // Original = 1000
int Num_Video = 2; // Orignal = 1
public Movie() {
NativeLibrary.addSearchPath("libvlc", LIB_VLC_PATH);
NativeLibrary.addSearchPath("libvlccore", LIB_VLC_CORE_PATH);
final String jnaLibraryPath = System.getProperty("jna.library.path");
final StringBuilder newJnaLibraryPath = new StringBuilder(jnaLibraryPath != null ? (jnaLibraryPath + ":") : "");
newJnaLibraryPath.append("C:\\Arquivos de programas\\Java\\jre7\\lib");
System.setProperty("jna.library.path", newJnaLibraryPath.toString());
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
play();
}
});
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
parar();
}
});
pauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
pausar();
}
});
topPanel.add(playButton);
topPanel.add(stopButton);
topPanel.add(pauseButton);
this.setSize(1000, 800);
this.setLayout(new BorderLayout());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel(new FlowLayout());
Canvas[] videoCanvas = new Canvas[Num_Video];
JPanel[] vidPanel = new JPanel[Num_Video];
for (int i = 0; i < Num_Video; i++) {
vidPanel[i] = new JPanel();
videoCanvas[i] = new Canvas();
videoCanvas[i].setBackground(Color.black);
vidPanel[i].setPreferredSize(new Dimension(Video_Height, Video_Width));
vidPanel[i].setBackground(Color.black);
vidPanel[i].setLayout(new BorderLayout());
vidPanel[i].add(videoCanvas[i],BorderLayout.CENTER);
mainPanel.add(vidPanel[i]);
}
factory = new MediaPlayerFactory();
for (int i = 1; i < Num_Video; i++) {
mediaPlayer[i] = factory.newEmbeddedMediaPlayer();
mediaPlayer[i].setVideoSurface(factory.newVideoSurface(videoCanvas[i]));
mediaPlayer[i].setPlaySubItems(true);
mediaPlayer[i].addMediaPlayerEventListener(new MediaPlayerEventAdapter(){
@Override
public void mediaSubItemAdded(MediaPlayer mediaPlayer, libvlc_media_t subItem) {
// List<String> items = mediaPlayer.subItems();
List items = (List) mediaPlayer.subItems();
System.out.println(items);
}
});
}
this.add(topPanel, BorderLayout.SOUTH);
this.add(mainPanel, BorderLayout.CENTER);
this.add(statusPanel, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e) throws IllegalStateException {
if (e.getActionCommand().equals("OK")) {
this.dispose();
}
}
public void start() {
this.setVisible(true);
}
private void play(){
// mediaPlayer.playMedia("\\\\unknown\\POR ATOR\\ARNOLD\\EXTERMINADOR_DO_FUTURO.mp4");
for (int i = 0; i < Num_Video; i++) {
mediaPlayer[i].playMedia(video[i]);
}
}
private void parar(){
for (int i = 0; i < Num_Video; i++) {
mediaPlayer[i].stop();
}
}
private void pausar(){
for (int i = 0; i < Num_Video; i++) {
mediaPlayer[i].pause();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Movie().start();
}
});
}
}
Se tiver a possibilidade de verificar e dar alguma “dica” do que não foi inicializado ou como inicializar o que está provocando o erro, fica desde já meu agradecimento.
[]s