Di default il player inizia la riproduzione dalla posizione iniziale:istante 0. Ad esempio se la durata del media è di 10 minuti, il media stesso verrà riprodotto per 10 minuti in un ciclo. La classe MediaPlayer
consente di specificare la lunghezza del playback all'interno della linea temporale del media.
Possiamo quindi scegliere quali parti del media mandare in riproduzione specificando un offset di inizio e uno di fine. A questa operazione diamo il nome di tracking del media.
Un player pronto all'uso
Riprendiamo il semplice video player con i due pulsanti play e stop ma arricchito dalla gestione degli errori:
public class FxMediaExample extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws MalformedURLException {
URL mediaUrl = new URL("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
Media media = new Media(mediaUrl.toExternalForm());
MediaPlayer player = new MediaPlayer(media);
player.setAutoPlay(false);
Button playButton = new Button("Play");
Button stopButton = new Button("Stop");
playButton.setOnAction((ActionEvent event) -> {
if (player.getStatus() == Status.PLAYING) {
player.stop();
player.play();
} else {
player.play();
}
});
stopButton.setOnAction((ActionEvent event) -> {
player.stop();
});
MediaView mediaView = new MediaView(player);
mediaView.setFitWidth(350);
mediaView.setFitHeight(200);
mediaView.setSmooth(true);
player.setOnError(() -> {
errorMessage(player.getError());
});
media.setOnError(() -> {
errorMessage(player.getError());
});
mediaView.setOnError((MediaErrorEvent event) -> {
errorMessage(event.getMediaError());
});
HBox controlBox = new HBox(5, playButton, stopButton);
VBox root = new VBox(5, mediaView, controlBox, markerMessage);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Media Player Demo");
stage.show();
}
private void errorMessage(MediaException error) {
MediaException.Type errorType = error.getType();
String errorMessage = error.getMessage();
System.out.println("Message:"+errorMessage+" Type:"+errorType);
}
}
e proseguiamo aggiungendo un tracking che riproduca solo una parte del video.
Tracking
Attraverso le proprietà startTime
e stopTime
della classe MediaPlayer, possiamo specificare la lunghezza della porzione di media che vogliamo riprodurre.
Aggiungiamo quindi le seguenti linee di codice subitodopo il set dell'autoplay del video:
player.setStartTime(Duration.seconds(10));
player.setStopTime(Duration.seconds(20));
Impostiamo come false
l'autoplay in modo da avere la riproduzione immediatamente in esecuzione e avviamo l'applicazione.
Noteremo che, invece di partire dall'inizio, la riproduzione del video inizierà dal punto corrispondente a un tempo di 10 secondi, proseguendo per altri 10 secondi fino al raggiungimento di un tempo di 20 secondi.