Hey guys,
after trying godzillions of video-playback approaches, I returned to give JavaFX a try. There have been a few recent updates on tutorials and indeed, there is one working (still have to prove it for Mac and Linux through). My problem is that I want to display the video on a custom component. In my case that component is the UI of Slick2D. Can anyone hint me if there is a simple way to either paint the video on any graphics context or just create a frame and then grab it?
The code I made run from the turorial is like that:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| public class FxVideoSwingTest {
private static void initAndShowGUI() { JFrame frame = new JFrame("FX"); final JFXPanel fxPanel = new JFXPanel(); frame.add(fxPanel); frame.setVisible(true); frame.setSize(800, 600);
Platform.runLater(new Runnable() { @Override public void run() { initFX(fxPanel); } }); }
private static final String MEDIA_URL = "file:///eclipse_workspace/JavaFxVideo/head.mp4";
private static void initFX(JFXPanel fxPanel) { Media media = new Media(MEDIA_URL); javafx.scene.media.MediaPlayer mediaPlayer = new javafx.scene.media.MediaPlayer(media); mediaPlayer.setAutoPlay(true); mediaPlayer.setCycleCount(javafx.scene.media.MediaPlayer.INDEFINITE);
media.getTracks().addListener(new ListChangeListener<Track>() { @Override public void onChanged(Change<? extends Track> change) { System.out.println("Track> " + change.getList()); } }); media.getMetadata().addListener(new MapChangeListener<String, Object>() { @Override public void onChanged(MapChangeListener.Change<? extends String, ? extends Object> change) { System.out.println("Metadata> " + change.getKey() + " -> " + change.getValueAdded()); } }); Group root = new Group(); Scene scene = new Scene(root, 800, 600); MediaView mediaView = new MediaView(mediaPlayer); root.getChildren().add(mediaView); fxPanel.setScene(scene); }
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } } |