Browse Source

add player end time lable

* update vlcj 4.4.0 -> 4.5.1
dev
Jannik 2 years ago
parent
commit
c6b2d1a9d8
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
  1. 2
      pom.xml
  2. 104
      src/main/java/kellerkinder/HomeFlix/player/PlayerController.java
  3. 35
      src/main/resources/fxml/PlayerWindow.fxml

2
pom.xml

@ -45,7 +45,7 @@
<dependency>
<groupId>uk.co.caprica</groupId>
<artifactId>vlcj</artifactId>
<version>4.4.0</version>
<version>4.5.1</version>
</dependency>
<dependency>

104
src/main/java/kellerkinder/HomeFlix/player/PlayerController.java

@ -25,6 +25,7 @@ package kellerkinder.HomeFlix.player;
import java.nio.ByteBuffer;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXSlider;
@ -36,6 +37,7 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.Cursor;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelBuffer;
@ -45,11 +47,9 @@ import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.media.MediaView;
import kellerkinder.HomeFlix.controller.DBController;
import kellerkinder.HomeFlix.controller.XMLController;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
import uk.co.caprica.vlcj.factory.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
@ -65,9 +65,10 @@ public class PlayerController {
@FXML private MediaView mediaView;
@FXML private ImageView videoImageView;
@FXML private VBox bottomVBox;
@FXML private HBox hBoxTop;
@FXML private HBox controlsHBox;
@FXML private VBox bottomVBox;
@FXML private JFXSlider timeSlider;
@ -79,6 +80,9 @@ public class PlayerController {
@FXML private ImageView stopIcon;
@FXML private ImageView playIcon;
@FXML private ImageView fullscreenIcon;
@FXML private Label lblTitle;
@FXML private Label lblEndTime;
private Player player;
private MediaPlayerFactory mediaPlayerFactory;
@ -130,11 +134,53 @@ public class PlayerController {
season = !film.getSeason().isEmpty() ? Integer.parseInt(film.getSeason()) : 0;
episode = !film.getEpisode().isEmpty() ? Integer.parseInt(film.getEpisode()) : 0;
lblTitle.setText(film.getTitle());
initPlayerWindow();
initMediaPlayer();
initSlider();
}
/**
* initialize some PlayerWindow GUI-Elements actions
*/
private void initPlayerWindow() {
player.getScene().addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() {
// hide controls timer initialization
final Timer timer = new Timer();
TimerTask controlAnimationTask = null; // task to execute save operation
final long delayTime = 3000; // hide the controls after 2 seconds
@Override
public void handle(MouseEvent mouseEvent) {
// show controls
if (!showControls) {
player.getScene().setCursor(Cursor.DEFAULT);
hBoxTop.setVisible(true);
bottomVBox.setVisible(true);
}
// hide controls
if (controlAnimationTask != null)
controlAnimationTask.cancel();
controlAnimationTask = new TimerTask() {
@Override
public void run() {
hBoxTop.setVisible(false);
bottomVBox.setVisible(false);
player.getScene().setCursor(Cursor.NONE);
showControls = false;
}
};
timer.schedule(controlAnimationTask, delayTime);
}
});
}
private void initMediaPlayer() {
embeddedMediaPlayer.events().addMediaPlayerEventListener( new HFMediaPlayerEventListener() {
@ -188,44 +234,6 @@ public class PlayerController {
});
}
/**
* initialize some PlayerWindow GUI-Elements actions
*/
private void initPlayerWindow() {
player.getScene().addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler<MouseEvent>() {
// hide controls timer initialization
final Timer timer = new Timer();
TimerTask controlAnimationTask = null; // task to execute save operation
final long delayTime = 3000; // hide the controls after 2 seconds
@Override
public void handle(MouseEvent mouseEvent) {
// show controls
if (!showControls) {
player.getScene().setCursor(Cursor.DEFAULT);
bottomVBox.setVisible(true);
}
// hide controls
if (controlAnimationTask != null)
controlAnimationTask.cancel();
controlAnimationTask = new TimerTask() {
@Override
public void run() {
bottomVBox.setVisible(false);
player.getScene().setCursor(Cursor.NONE);
showControls = false;
}
};
timer.schedule(controlAnimationTask, delayTime);
}
});
}
public void start() {
embeddedMediaPlayer.media().play(film.getStreamUrl());
embeddedMediaPlayer.controls().skipTime((long) startTime); // skipt to the start time
@ -247,9 +255,13 @@ public class PlayerController {
timeSlider.setValue((currentTime / 1000) / 60);
}
// TODO update endTime label
// update endTime label
lblEndTime.setText(String.format("%d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(endTime) % 24,
TimeUnit.MILLISECONDS.toMinutes(endTime) % 60,
TimeUnit.MILLISECONDS.toSeconds(endTime) % 60));
System.out.println(endTime / 1000);
// show the next episode button 20 seconds before the end of a episode
if (endTime < 21000 && episode != 0 && autoplay) {
int countdown = (int) ((endTime / 1000) - 10); // a 10 seconds countdown
@ -300,10 +312,10 @@ public class PlayerController {
@FXML
void nextEpBtnAction(ActionEvent event) {
autoPlayNewFilm(); // TODO
playNextMedia(); // TODO
}
private void autoPlayNewFilm() {
private void playNextMedia() {
autoplay = false;
DBController.getInstance().setCurrentTime(film.getStreamUrl(), 0); // reset old video start time
FilmTabelDataType nextFilm = DBController.getInstance().getNextEpisode(film.getTitle(), episode, season);

35
src/main/resources/fxml/PlayerWindow.fxml

@ -3,6 +3,7 @@
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXSlider?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
@ -19,13 +20,41 @@
<ImageView fx:id="videoImageView" pickOnBounds="true" preserveRatio="true" />
</children>
</HBox>
<HBox fx:id="hBoxTop" alignment="CENTER_LEFT" spacing="10.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<JFXButton>
<graphic>
<ImageView pickOnBounds="true" preserveRatio="true" />
</graphic>
</JFXButton>
<Label fx:id="lblTitle" text="Title" textFill="WHITE">
<font>
<Font size="20.0" />
</font>
</Label>
</children>
<padding>
<Insets left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
<VBox fx:id="bottomVBox" alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<children>
<JFXSlider fx:id="timeSlider">
<HBox spacing="10.0">
<children>
<JFXSlider fx:id="timeSlider" HBox.hgrow="ALWAYS">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</JFXSlider>
<Label fx:id="lblEndTime" text="0:00:00" textFill="WHITE" />
</children>
<VBox.margin>
<Insets />
</VBox.margin>
<padding>
<Insets left="5.0" right="5.0" />
<Insets left="10.0" right="10.0" />
</padding>
</JFXSlider>
</HBox>
<HBox fx:id="controlsHBox" alignment="CENTER" spacing="10.0">
<children>
<JFXButton fx:id="stopBtn" buttonType="RAISED" contentDisplay="GRAPHIC_ONLY" onAction="#stopBtnAction" prefHeight="39.0" style="-fx-background-color: white;">

Loading…
Cancel
Save

Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerkadministrator nach IPv6-Unterstützung.
You are visiting this site with an outdated IPv4 internet access. You may experience problems with accessibility and performance in the future. Please ask your ISP or network administrator for IPv6 support.
Weitere Infos | More Information
Klicke zum schließen | Click to close