JavaFX MediaPlayer handle media marker event
import java.io.File; import java.net.URI; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Slider; import javafx.scene.media.Media; import javafx.scene.media.MediaErrorEvent; import javafx.scene.media.MediaMarkerEvent; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.stage.StageStyle; import javafx.util.Duration; public class Main extends Application { private MediaPlayer mediaPlayer; private MediaView mediaView; private Slider progressSlider; private ChangeListener<Duration> progressListener; public static void main(String[] args) { Application.launch(args);//from w ww . j a v a2s . c o m } @Override public void start(final Stage primaryStage) { primaryStage.setTitle("Playing Video"); primaryStage.centerOnScreen(); primaryStage.initStyle(StageStyle.TRANSPARENT); final Group root = new Group(); final Scene scene = new Scene(root, 540, 300, Color.rgb(0, 0, 0, 0)); progressSlider = createSlider(scene); root.getChildren().add(progressSlider); // update slider as video is progressing (later removal) progressListener = (ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> { progressSlider.setValue(newValue.toSeconds()); }; URI resourceUrlOrFile = null; String filePath = "your audio file"; resourceUrlOrFile = new File(filePath).toURI(); // load media Media media = new Media(resourceUrlOrFile.toString()); // create a new media player mediaPlayer = new MediaPlayer(media); // stop previous media player and clean up if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.currentTimeProperty().removeListener(progressListener); mediaPlayer.setOnPaused(null); mediaPlayer.setOnPlaying(null); mediaPlayer.setOnReady(null); } // as the media is playing move the slider for progress mediaPlayer.currentTimeProperty().addListener(progressListener); // play video when ready status mediaPlayer.setOnReady(() -> { progressSlider.setValue(1); progressSlider.setMax(mediaPlayer.getMedia().getDuration().toMillis() / 1000); mediaPlayer.play(); }); // Lazy init media viewer if (mediaView == null) { mediaView = new MediaView(); mediaView.setMediaPlayer(mediaPlayer); mediaView.setX(4); mediaView.setY(4); mediaView.setPreserveRatio(true); mediaView.setOpacity(.85); mediaView.setSmooth(true); mediaView.fitWidthProperty().bind(scene.widthProperty().subtract(220)); mediaView.fitHeightProperty().bind(scene.heightProperty().subtract(30)); // make media view as the second node on the scene. root.getChildren().add(1, mediaView); } // sometimes loading errors occur, print error when this happens mediaView.setOnError((MediaErrorEvent event1) -> { event1.getMediaError().printStackTrace(); }); mediaView.setMediaPlayer(mediaPlayer); // stop if (mediaPlayer != null) { mediaPlayer.stop(); } media.getMarkers().put("First marker", Duration.millis(10000)); media.getMarkers().put("Second marker", Duration.millis(20000)); media.getMarkers().put("Last one...", Duration.millis(30000)); // display closed caption mediaPlayer.setOnMarker((MediaMarkerEvent event1) -> { System.out.println(event1.getMarker().getKey()); }); //mediaPlayer.pause(); //mediaPlayer.play(); primaryStage.setScene(scene); primaryStage.show(); } private Slider createSlider(Scene scene) { Slider slider = new Slider(); slider.setMin(0); slider.setMax(100); slider.setValue(1); slider.setShowTickLabels(true); slider.setShowTickMarks(true); slider.valueProperty() .addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> { if (slider.isPressed()) { long dur = newValue.intValue() * 1000; mediaPlayer.seek(new Duration(dur)); } }); slider.translateYProperty().bind(scene.heightProperty().subtract(30)); return slider; } }