Programmation JavaFX/Jouer une vidéo ou un son

JavaFX permet de jouer une vidéo ou un son en utilisant les classes du package javafx.scene.media.

Jouer un fichier

modifier

Le code d'exemple ci-dessous montre comment jouer une vidéo ou un son à partir d'un fichier.

  • Si le fichier est une vidéo, elle est affichée dans la scène. Initialement en mode plein écran, la taille de la vidéo s'adapte à celle de la scène par binding des propriétés width et height.
  • Si le fichier est un son, le son est audible et la scène affiche la couleur de fond.
package org.wikibooks.fr;

import java.io.*;

import javafx.application.*;
import javafx.beans.binding.*;
import javafx.beans.property.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.media.*;
import javafx.scene.paint.*;
import javafx.stage.*;

public class MediaApplication extends Application
{
	public static void main(String[] args)
	{
		Application.launch(args);
	}

	protected MediaPlayer media_player;

	@Override
	public void start(Stage stage) throws Exception
	{
		// .mp3 / .m4a / .mpeg / ...
		String path = "/chemin/du/fichier.mp3";
		Media media = new Media(new File(path).toURI().toString());
		media_player = new MediaPlayer(media);
		MediaView viewer = new MediaView(media_player);

		// Ajuster automatiquement la vue vidéo à la taille de la scène :
		DoubleProperty width = viewer.fitWidthProperty();
		DoubleProperty height = viewer.fitHeightProperty();
		width.bind(Bindings.selectDouble(viewer.sceneProperty(), "width"));
		height.bind(Bindings.selectDouble(viewer.sceneProperty(), "height"));
		viewer.setPreserveRatio(true);

		StackPane root = new StackPane();
		root.getChildren().add(viewer);

		// Création de la scène :
		Scene scene = new Scene(root, 500, 500, Color.BLACK);
		stage.setScene(scene);
		stage.setTitle("Vidéo");
		stage.setFullScreen(true);
		stage.show();   
		media_player.play();
	}
}

Comme le fichier est joué de manière asynchrone en tâche de fond, la référence au MediaPlayer doit être conservée pour que le garbage collector ne supprime pas le media player, sinon cela provoquerait un arrêt du fichier au bout d'un moment aléatoire. Dans le code précédent, la référence au MediaPlayer est conservée par l'objet viewer. Il est possible de se passer d'objet viewer (instance de la classe MediaView), pour jouer le son seulement, auquel cas il faut conserver la référence au MediaPlayer dans la classe.