JavaFX 用のビデオ プレーヤー コントロールの作成に関する Oracle の優れたチュートリアルがあります。
JavaFX Ensembleアプリケーションでチュートリアル プレーヤーの動作を確認できます。
チュートリアルには、プレーヤー タイムラインの組み込みに関する情報が含まれています。
Ensemble の Timeline を使用した JavaFX Video Player Control のスクリーンショットを次に示します。
MediaViewの位置を制御するスライダーを作成する手順は次のとおりです。
- を作成し、
MediaView
関連付けMediaPlayer
ます。
Slider
時間を制御する を作成します。
- への変更をリッスンし、必要に応じ
Slider
て位置を更新MediaPlayer
します。
- 現在時刻の変更をリッスンし、必要に応じ
MediaPlayer
て を更新Slider
します。
サンプルからのいくつかのタイム スライダー固有のコード スニペットは次のとおりです。
// Media player
MediaPlayer mp = new MediaPlayer(new Media(MEDIA_URL));
// Time label
Label timeLabel = new Label("Time: ");
timeLabel.setMinWidth(Control.USE_PREF_SIZE);
mediaBar.getChildren().add(timeLabel);
// Time slider
timeSlider = new Slider();
HBox.setHgrow(timeSlider, Priority.ALWAYS);
timeSlider.setMinWidth(50);
timeSlider.setMaxWidth(Double.MAX_VALUE);
timeSlider.valueProperty().addListener(new InvalidationListener() {
public void invalidated(Observable ov) {
if (timeSlider.isValueChanging()) {
// multiply duration by percentage calculated by slider position
if(duration!=null) {
mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
}
updateValues();
}
}
});
....
protected void updateValues() {
if (playTime != null && timeSlider != null && volumeSlider != null && duration != null) {
Platform.runLater(new Runnable() {
public void run() {
Duration currentTime = mp.getCurrentTime();
playTime.setText(formatTime(currentTime, duration));
timeSlider.setDisable(duration.isUnknown());
if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
}
if (!volumeSlider.isValueChanging()) {
volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
}
}
});
}
}
...
mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
updateValues();
}
});
// and also invoke updateValues when the MediaPlayer is played, paused, etc.