Java - Lire les fichiers vidéo et audio (mp4, mp3, ...) avec vlcj

Requis:
- Téléchargez VLC (download VLC media player)
- Installez vlc 32 bits pour la machine virtuelle 32 bits ou 64 bits pour la machine virtuelle JVM 64 bits

Lecteur multimédia en Java avec la librarie vlcj de VLC
Un lecteur multimédia que l'on a fait 100% en Java



Vous pouvez utiliser la librairie JMF, mais il semble qu'elle est dépassée et ancienne, donc les développeurs ont commencé à développer à partir de la fameuse librairie VLC de C++ une librairie nommée vlcj (le j pour java).
On va vous montrer un exemple rapide sur l'utilisation de cette merveilleuse librairie. Il suffit juste de copier puis coller le code situé dans l'exemple ci-dessous dans votre IDE préférable: Elipse ou Netbeans. Noté que vous devez télécharger la librairie vlcj et l'intégrer dans votre projet et dans votre classpath.

L'objectif est d'assurer que vous avez un environnement qui marche. Cette étape est critique dans le codage de n'importe quelle application qui utilise vlcj. Si cette simple application ne marche pas alors tout le reste des applications que avez codé en java et qui intègrent vlcj ne vont pas marcher.

Chercher la librairie native

Le chemin de la librairie native doit pointer vers le dossier qui contient les deux fichiers libvlc.dll et libvlccore.dll. Dans linux les fichiers sont nommés libvlc.so et libvlccore.so. Ces deux fichiers dll sont dans le dossier de VLC, si vous ne les trouvez pas, téléchargez et ajoutez les dans le dossier où VLC a été installé.

NativeLibrary.addSearchPath(
          RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC);

Une erreur commise est que la machine virtuelle Java est utilisée avec une version 32-bit de VLC. Ca ne va pas marcher tout simplement parce que vous devez utiliser la version VLC 64-bit avec JDK 64-bit et la version VLC 32-bit avec JDK 32-bit.

Charger la librarie native

L'API vlcj utilise JNA qui relie VLC à la librarie. ça veut dire que l’environnement doit être bien configuré pour que l'application Java serait capable de localiser la libraire native.
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

void chargerLibrairie(){
   NativeLibrary.addSearchPath
   RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC");
   Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}

Deux classes essentielles:
  • MediaPlayerFactory: initialise une seule instance de libvlc et crée les instances du lecteur multimédia. On peut créer plusieurs panneaux pour chaque vidéo par exemple.
  • EmbeddedMediaPlayer: intègre un composant du lecteur multimédia dans un composant interface utilisateur. C'est avec cette classe quand peut contrôler tout ce qui a une relation avec l'interface utilisateur comme préparer ou commencer la lecture, plein écran, etc.

Exemple

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
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;
import uk.co.caprica.vlcj.runtime.x.LibXUtil;

/*www.codeurjava.com*/

public class MediaPanel {

public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
chargerLibrairie();
new MediaPanel(args);
}
});
}

void chargerLibrairie(){
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
LibXUtil.initialise();
}

private MediaPanel(String[] args) {
JFrame frame = new JFrame("Tutoriel vlcj");
frame.setLocation(100, 100);
frame.setSize(1050, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

//Créer une instance de Canvas
Canvas c = new Canvas();
//L'arrière plan de la vidéo est noir par défaut
c.setBackground(Color.black);
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
//La vidéo prend toute la surface
p.add(c, BorderLayout.CENTER);
frame.add(p, BorderLayout.CENTER);

//Créer une instance factory
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
//Créer une instance lecteur média
EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(frame));
mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
//Plein écran
mediaPlayer.toggleFullScreen();
//Cacher le curseur de la souris à l'intérieur de JFrame
mediaPlayer.setEnableMouseInputHandling(false);
//Désactiver le clavier à l'intérieur de JFrame
mediaPlayer.setEnableKeyInputHandling(true);

//Préparer le fichier
mediaPlayer.prepareMedia("vidéo.mp4");
//lire le fichier
mediaPlayer.play();
}
}
Voila! En quelques lignes de code, vous pouvez maintenant avoir votre propre lecteur média. Commencez à explorer la documentation vlcj en ligne pour développer votre propre application selon vos besoins.