root / tmp / org.txm.backtomedia.rcp / JFXPlayer.java @ 3258
Historique | Voir | Annoter | Télécharger (20,24 ko)
1 | 3197 | mdecorde | package org.txm.backtomedia.editors.player; |
---|---|---|---|
2 | 3197 | mdecorde | |
3 | 3197 | mdecorde | import java.io.File; |
4 | 3197 | mdecorde | import java.net.Authenticator; |
5 | 3197 | mdecorde | import java.net.PasswordAuthentication; |
6 | 3197 | mdecorde | import java.time.LocalTime; |
7 | 3197 | mdecorde | import java.time.format.DateTimeFormatter; |
8 | 3197 | mdecorde | import java.util.concurrent.Semaphore; |
9 | 3197 | mdecorde | |
10 | 3197 | mdecorde | import org.eclipse.swt.SWT; |
11 | 3197 | mdecorde | import org.eclipse.swt.events.MouseEvent; |
12 | 3197 | mdecorde | import org.eclipse.swt.events.MouseListener; |
13 | 3197 | mdecorde | import org.eclipse.swt.events.SelectionEvent; |
14 | 3197 | mdecorde | import org.eclipse.swt.events.SelectionListener; |
15 | 3197 | mdecorde | import org.eclipse.swt.graphics.Point; |
16 | 3197 | mdecorde | import org.eclipse.swt.layout.GridData; |
17 | 3197 | mdecorde | import org.eclipse.swt.layout.GridLayout; |
18 | 3197 | mdecorde | import org.eclipse.swt.widgets.Button; |
19 | 3197 | mdecorde | import org.eclipse.swt.widgets.Composite; |
20 | 3197 | mdecorde | import org.eclipse.swt.widgets.Event; |
21 | 3197 | mdecorde | import org.eclipse.swt.widgets.FileDialog; |
22 | 3197 | mdecorde | import org.eclipse.swt.widgets.Label; |
23 | 3197 | mdecorde | import org.eclipse.swt.widgets.Listener; |
24 | 3197 | mdecorde | import org.eclipse.swt.widgets.Scale; |
25 | 3197 | mdecorde | import org.txm.backtomedia.commands.function.TripleRangeSlider; |
26 | 3197 | mdecorde | import org.txm.backtomedia.preferences.BackToMediaPreferences; |
27 | 3197 | mdecorde | import org.txm.utils.logger.Log; |
28 | 3197 | mdecorde | |
29 | 3197 | mdecorde | import javafx.application.Platform; |
30 | 3197 | mdecorde | import javafx.beans.InvalidationListener; |
31 | 3197 | mdecorde | import javafx.beans.Observable; |
32 | 3197 | mdecorde | import javafx.embed.swt.FXCanvas; |
33 | 3197 | mdecorde | import javafx.geometry.Insets; |
34 | 3197 | mdecorde | import javafx.scene.Group; |
35 | 3197 | mdecorde | import javafx.scene.Scene; |
36 | 3197 | mdecorde | import javafx.scene.layout.HBox; |
37 | 3197 | mdecorde | import javafx.scene.media.Media; |
38 | 3197 | mdecorde | import javafx.scene.media.MediaPlayer; |
39 | 3197 | mdecorde | import javafx.scene.media.MediaPlayer.Status; |
40 | 3197 | mdecorde | import javafx.scene.media.MediaView; |
41 | 3197 | mdecorde | import javafx.scene.paint.Color; |
42 | 3197 | mdecorde | import javafx.util.Duration; |
43 | 3197 | mdecorde | import vlcplayerrcp.MessagesMP; |
44 | 3197 | mdecorde | |
45 | 3197 | mdecorde | public class JFXPlayer extends Composite implements IPlayer { |
46 | 3197 | mdecorde | |
47 | 3197 | mdecorde | protected static final String NOMEDIA = ""; //$NON-NLS-1$ |
48 | 3197 | mdecorde | |
49 | 3197 | mdecorde | private MediaPlayer jfxPlayer;
|
50 | 3197 | mdecorde | |
51 | 3197 | mdecorde | //private GLComposite videoComposite;
|
52 | 3197 | mdecorde | |
53 | 3197 | mdecorde | private Scale rateField;
|
54 | 3197 | mdecorde | |
55 | 3197 | mdecorde | private Label rateValueLabel; |
56 | 3197 | mdecorde | |
57 | 3197 | mdecorde | private Scale volumeField;
|
58 | 3197 | mdecorde | |
59 | 3197 | mdecorde | private Label volumeValueLabel; |
60 | 3197 | mdecorde | |
61 | 3197 | mdecorde | private Button playButton; |
62 | 3197 | mdecorde | |
63 | 3197 | mdecorde | private Button repeatButton; |
64 | 3197 | mdecorde | |
65 | 3197 | mdecorde | protected String currentlyPlayed = ""; //$NON-NLS-1$ |
66 | 3197 | mdecorde | |
67 | 3197 | mdecorde | // private String startTime, endTime;
|
68 | 3197 | mdecorde | private int start, end; |
69 | 3197 | mdecorde | |
70 | 3197 | mdecorde | protected boolean hasEnded = false; |
71 | 3197 | mdecorde | |
72 | 3197 | mdecorde | private String previouslyPlayed = ""; //$NON-NLS-1$ |
73 | 3197 | mdecorde | |
74 | 3197 | mdecorde | private boolean repeat = false; |
75 | 3197 | mdecorde | |
76 | 3197 | mdecorde | protected int volume = 100; |
77 | 3197 | mdecorde | |
78 | 3197 | mdecorde | private Button stopButton; |
79 | 3197 | mdecorde | |
80 | 3197 | mdecorde | Label timeLabel;
|
81 | 3197 | mdecorde | |
82 | 3197 | mdecorde | TripleRangeSlider timeRange; |
83 | 3197 | mdecorde | |
84 | 3197 | mdecorde | boolean firstLengthEvent = true; |
85 | 3197 | mdecorde | |
86 | 3197 | mdecorde | long previous = 0; |
87 | 3197 | mdecorde | |
88 | 3197 | mdecorde | long time, mins, secs;
|
89 | 3197 | mdecorde | |
90 | 3197 | mdecorde | public MediaPlayer getEmbeddedMediaPlayer() {
|
91 | 3197 | mdecorde | return jfxPlayer;
|
92 | 3197 | mdecorde | } |
93 | 3197 | mdecorde | |
94 | 3197 | mdecorde | Semaphore s = new Semaphore(1); |
95 | 3197 | mdecorde | |
96 | 3197 | mdecorde | private FXCanvas fxCanvas;
|
97 | 3197 | mdecorde | |
98 | 3197 | mdecorde | Point previousP;
|
99 | 3197 | mdecorde | |
100 | 3197 | mdecorde | protected boolean userStopped; |
101 | 3197 | mdecorde | |
102 | 3197 | mdecorde | public JFXPlayer(Composite parent, int style) { |
103 | 3197 | mdecorde | super(parent, style);
|
104 | 3197 | mdecorde | this.setLayout(new GridLayout(11, false)); |
105 | 3197 | mdecorde | |
106 | 3197 | mdecorde | // very important to avoid error when re-opening the player
|
107 | 3197 | mdecorde | javafx.application.Platform.setImplicitExit(false);
|
108 | 3197 | mdecorde | |
109 | 3197 | mdecorde | // THE PLAYER
|
110 | 3197 | mdecorde | // if (RuntimeUtil.isMac()) {
|
111 | 3197 | mdecorde | // try {
|
112 | 3197 | mdecorde | // LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", "/Applications/VLC.app/Contents/MacOS/plugins", 1);
|
113 | 3197 | mdecorde | // }
|
114 | 3197 | mdecorde | // catch (Exception ex) {
|
115 | 3197 | mdecorde | // ex.printStackTrace();
|
116 | 3197 | mdecorde | // }
|
117 | 3197 | mdecorde | // }
|
118 | 3197 | mdecorde | // videoComposite = new GLComposite(this, SWT.NONE, "Video");
|
119 | 3197 | mdecorde | // GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true);
|
120 | 3197 | mdecorde | // gdata.horizontalSpan = 11;
|
121 | 3197 | mdecorde | // videoComposite.setLayoutData(gdata);
|
122 | 3197 | mdecorde | // jfxPlayer = null;
|
123 | 3197 | mdecorde | //
|
124 | 3197 | mdecorde | // fxCanvas.addDisposeListener(new DisposeListener() {
|
125 | 3197 | mdecorde | //
|
126 | 3197 | mdecorde | // @Override
|
127 | 3197 | mdecorde | // public void widgetDisposed(DisposeEvent e) {
|
128 | 3197 | mdecorde | // if (jfxPlayer != null) {
|
129 | 3197 | mdecorde | // jfxPlayer.dispose();
|
130 | 3197 | mdecorde | // jfxPlayer = null;
|
131 | 3197 | mdecorde | // fxCanvas.setScene(null);
|
132 | 3197 | mdecorde | // }
|
133 | 3197 | mdecorde | // }
|
134 | 3197 | mdecorde | // });
|
135 | 3197 | mdecorde | |
136 | 3197 | mdecorde | fxCanvas = new FXCanvas(this, SWT.BORDER); |
137 | 3197 | mdecorde | GridData gdata2 = new GridData(SWT.FILL, SWT.FILL, true, true); |
138 | 3197 | mdecorde | gdata2.horizontalSpan = 11;
|
139 | 3197 | mdecorde | |
140 | 3197 | mdecorde | fxCanvas.setLayoutData(gdata2); |
141 | 3197 | mdecorde | |
142 | 3197 | mdecorde | fxCanvas.addMouseListener(new MouseListener() { |
143 | 3197 | mdecorde | |
144 | 3197 | mdecorde | @Override
|
145 | 3197 | mdecorde | public void mouseUp(MouseEvent e) { |
146 | 3197 | mdecorde | if (jfxPlayer != null) { |
147 | 3197 | mdecorde | if (jfxPlayer.getStatus().equals(Status.PAUSED)) {
|
148 | 3197 | mdecorde | resume(); |
149 | 3197 | mdecorde | } |
150 | 3197 | mdecorde | else if (jfxPlayer.getStatus().equals(Status.PLAYING)) { |
151 | 3197 | mdecorde | pause(); |
152 | 3197 | mdecorde | } |
153 | 3197 | mdecorde | } |
154 | 3197 | mdecorde | } |
155 | 3197 | mdecorde | |
156 | 3197 | mdecorde | @Override
|
157 | 3197 | mdecorde | public void mouseDown(MouseEvent e) {} |
158 | 3197 | mdecorde | |
159 | 3197 | mdecorde | @Override
|
160 | 3197 | mdecorde | public void mouseDoubleClick(MouseEvent e) {} |
161 | 3197 | mdecorde | }); |
162 | 3197 | mdecorde | |
163 | 3197 | mdecorde | fxCanvas.addListener(SWT.Resize, new Listener() {
|
164 | 3197 | mdecorde | |
165 | 3197 | mdecorde | @Override
|
166 | 3197 | mdecorde | public void handleEvent(Event e) { |
167 | 3197 | mdecorde | resizeView(); |
168 | 3197 | mdecorde | } |
169 | 3197 | mdecorde | }); |
170 | 3197 | mdecorde | |
171 | 3197 | mdecorde | // THE CONTROL BUTTONS
|
172 | 3197 | mdecorde | playButton = new Button(this, SWT.PUSH); |
173 | 3197 | mdecorde | GridData playLayoutData = new GridData(SWT.FILL, SWT.CENTER, false, false); |
174 | 3197 | mdecorde | playButton.setLayoutData(playLayoutData); |
175 | 3197 | mdecorde | playButton.setText(MessagesMP.play); |
176 | 3197 | mdecorde | playButton.addSelectionListener(new SelectionListener() {
|
177 | 3197 | mdecorde | |
178 | 3197 | mdecorde | @Override
|
179 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
180 | 3197 | mdecorde | userStopped = false;
|
181 | 3197 | mdecorde | if (currentlyPlayed.length() == 0) { |
182 | 3197 | mdecorde | selectMedia(); |
183 | 3197 | mdecorde | playButton.setText(MessagesMP.pause); |
184 | 3197 | mdecorde | playButton.getParent().layout(); |
185 | 3197 | mdecorde | } |
186 | 3197 | mdecorde | else if (jfxPlayer != null && jfxPlayer.getStatus().equals(Status.PLAYING)) { |
187 | 3197 | mdecorde | pause(); |
188 | 3197 | mdecorde | } |
189 | 3197 | mdecorde | else if (jfxPlayer != null && hasEnded) { |
190 | 3197 | mdecorde | if (jfxPlayer == null) return; |
191 | 3197 | mdecorde | replay(); |
192 | 3197 | mdecorde | } |
193 | 3197 | mdecorde | else {
|
194 | 3197 | mdecorde | resume(); |
195 | 3197 | mdecorde | } |
196 | 3197 | mdecorde | } |
197 | 3197 | mdecorde | |
198 | 3197 | mdecorde | @Override
|
199 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
200 | 3197 | mdecorde | }); |
201 | 3197 | mdecorde | |
202 | 3197 | mdecorde | // Button browseButton = new Button(this,SWT.PUSH);
|
203 | 3197 | mdecorde | // browseButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
|
204 | 3197 | mdecorde | // browseButton.setText("Open...");
|
205 | 3197 | mdecorde | // browseButton.addSelectionListener(new SelectionListener() {
|
206 | 3197 | mdecorde | // @Override
|
207 | 3197 | mdecorde | // public void widgetSelected(SelectionEvent e) {
|
208 | 3197 | mdecorde | // selectMedia();
|
209 | 3197 | mdecorde | // }
|
210 | 3197 | mdecorde | //
|
211 | 3197 | mdecorde | // @Override
|
212 | 3197 | mdecorde | // public void widgetDefaultSelected(SelectionEvent e) {}
|
213 | 3197 | mdecorde | // });
|
214 | 3197 | mdecorde | |
215 | 3197 | mdecorde | stopButton = new Button(this, SWT.PUSH); |
216 | 3197 | mdecorde | stopButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); |
217 | 3197 | mdecorde | stopButton.setText(MessagesMP.stop); |
218 | 3197 | mdecorde | stopButton.addSelectionListener(new SelectionListener() {
|
219 | 3197 | mdecorde | |
220 | 3197 | mdecorde | @Override
|
221 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
222 | 3197 | mdecorde | if (jfxPlayer != null) { |
223 | 3197 | mdecorde | userStopped = true;
|
224 | 3197 | mdecorde | jfxPlayer.stop(); |
225 | 3197 | mdecorde | } |
226 | 3197 | mdecorde | } |
227 | 3197 | mdecorde | |
228 | 3197 | mdecorde | @Override
|
229 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
230 | 3197 | mdecorde | }); |
231 | 3197 | mdecorde | |
232 | 3197 | mdecorde | timeLabel = new Label(this, SWT.NONE); |
233 | 3197 | mdecorde | timeLabel.setText("00:00"); //$NON-NLS-1$ |
234 | 3197 | mdecorde | |
235 | 3197 | mdecorde | timeRange = new TripleRangeSlider(this, SWT.None); |
236 | 3197 | mdecorde | timeRange.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); |
237 | 3197 | mdecorde | timeRange.setToolTipText(MessagesMP.time_range); |
238 | 3197 | mdecorde | timeRange.addSelectionListener(new SelectionListener() {
|
239 | 3197 | mdecorde | |
240 | 3197 | mdecorde | @Override
|
241 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
242 | 3197 | mdecorde | TripleRangeSlider.SELECTED_KNOB sk = timeRange.getLastSelectedKnob(); |
243 | 3197 | mdecorde | switch (sk) {
|
244 | 3197 | mdecorde | case UPPER:
|
245 | 3197 | mdecorde | end = timeRange.getUpperValue(); |
246 | 3197 | mdecorde | |
247 | 3197 | mdecorde | jfxPlayer.setStopTime(Duration.seconds(end));
|
248 | 3197 | mdecorde | if (end < time) {
|
249 | 3197 | mdecorde | // System.out.println("Upper changed: fix time");
|
250 | 3197 | mdecorde | time = end; |
251 | 3197 | mdecorde | jfxPlayer.seek(Duration.seconds(time));
|
252 | 3197 | mdecorde | } |
253 | 3197 | mdecorde | break;
|
254 | 3197 | mdecorde | case LOWER:
|
255 | 3197 | mdecorde | start = timeRange.getLowerValue(); |
256 | 3197 | mdecorde | jfxPlayer.setStartTime(Duration.seconds(start));
|
257 | 3197 | mdecorde | if (start > time) {
|
258 | 3197 | mdecorde | // System.out.println("Lower changed: fix time");
|
259 | 3197 | mdecorde | time = start; |
260 | 3197 | mdecorde | jfxPlayer.seek(Duration.seconds(time));
|
261 | 3197 | mdecorde | } |
262 | 3197 | mdecorde | break;
|
263 | 3197 | mdecorde | case MIDDLE:
|
264 | 3197 | mdecorde | |
265 | 3197 | mdecorde | time = timeRange.getMiddleValue(); |
266 | 3197 | mdecorde | // System.out.println("Middle changed: fix time: " + time);
|
267 | 3197 | mdecorde | |
268 | 3197 | mdecorde | jfxPlayer.seek(Duration.seconds(time));
|
269 | 3197 | mdecorde | |
270 | 3197 | mdecorde | break;
|
271 | 3197 | mdecorde | default:
|
272 | 3197 | mdecorde | // nothing
|
273 | 3197 | mdecorde | } |
274 | 3197 | mdecorde | // System.out.println("time range: "+start+" -> "+end+" time="+time);
|
275 | 3197 | mdecorde | } |
276 | 3197 | mdecorde | |
277 | 3197 | mdecorde | @Override
|
278 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
279 | 3197 | mdecorde | }); |
280 | 3197 | mdecorde | |
281 | 3197 | mdecorde | repeatButton = new Button(this, SWT.CHECK); |
282 | 3197 | mdecorde | repeatButton.setText(MessagesMP.repeat); |
283 | 3197 | mdecorde | repeat = BackToMediaPreferences.getInstance().getBoolean(BackToMediaPreferences.REPEAT); |
284 | 3197 | mdecorde | repeatButton.setSelection(repeat); |
285 | 3197 | mdecorde | repeatButton.addSelectionListener(new SelectionListener() {
|
286 | 3197 | mdecorde | |
287 | 3197 | mdecorde | @Override
|
288 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
289 | 3197 | mdecorde | repeat = repeatButton.getSelection(); |
290 | 3197 | mdecorde | } |
291 | 3197 | mdecorde | |
292 | 3197 | mdecorde | @Override
|
293 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
294 | 3197 | mdecorde | }); |
295 | 3197 | mdecorde | |
296 | 3197 | mdecorde | Label l = new Label(this, SWT.NONE); |
297 | 3197 | mdecorde | l.setText(MessagesMP.rate); |
298 | 3197 | mdecorde | |
299 | 3197 | mdecorde | rateField = new Scale(this, SWT.BORDER); |
300 | 3197 | mdecorde | GridData gdata4 = new GridData(SWT.FILL, SWT.CENTER, false, false); |
301 | 3197 | mdecorde | gdata4.widthHint = 100;
|
302 | 3197 | mdecorde | rateField.setLayoutData(gdata4); |
303 | 3197 | mdecorde | rateField.setMaximum(140);
|
304 | 3197 | mdecorde | rateField.setMinimum(70);
|
305 | 3197 | mdecorde | rateField.setSelection(100);
|
306 | 3197 | mdecorde | rateField.setPageIncrement(5);
|
307 | 3197 | mdecorde | |
308 | 3197 | mdecorde | rateField.addSelectionListener(new SelectionListener() {
|
309 | 3197 | mdecorde | |
310 | 3197 | mdecorde | @Override
|
311 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
312 | 3197 | mdecorde | float rate = rateField.getSelection() / 100.0f; |
313 | 3197 | mdecorde | jfxPlayer.setRate(rate); |
314 | 3197 | mdecorde | rateValueLabel.setText("" + rateField.getSelection() + "%"); |
315 | 3197 | mdecorde | } |
316 | 3197 | mdecorde | |
317 | 3197 | mdecorde | @Override
|
318 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
319 | 3197 | mdecorde | }); |
320 | 3197 | mdecorde | |
321 | 3197 | mdecorde | rateValueLabel = new Label(this, SWT.NONE); |
322 | 3197 | mdecorde | rateValueLabel.setText("100%");//$NON-NLS-1$ |
323 | 3197 | mdecorde | |
324 | 3197 | mdecorde | l = new Label(this, SWT.NONE); |
325 | 3197 | mdecorde | l.setText(MessagesMP.volume); |
326 | 3197 | mdecorde | |
327 | 3197 | mdecorde | volumeField = new Scale(this, SWT.BORDER); |
328 | 3197 | mdecorde | gdata4 = new GridData(SWT.FILL, SWT.CENTER, false, false); |
329 | 3197 | mdecorde | gdata4.widthHint = 100;
|
330 | 3197 | mdecorde | volumeField.setLayoutData(gdata4); |
331 | 3197 | mdecorde | volumeField.setMinimum(0);
|
332 | 3197 | mdecorde | volumeField.setMaximum(100);
|
333 | 3197 | mdecorde | volumeField.setSelection(volume); |
334 | 3197 | mdecorde | volumeField.setPageIncrement(5);
|
335 | 3197 | mdecorde | volumeField.addSelectionListener(new SelectionListener() {
|
336 | 3197 | mdecorde | |
337 | 3197 | mdecorde | @Override
|
338 | 3197 | mdecorde | public void widgetSelected(SelectionEvent e) { |
339 | 3197 | mdecorde | jfxPlayer.setVolume(volumeField.getSelection()); |
340 | 3197 | mdecorde | volume = volumeField.getSelection(); |
341 | 3197 | mdecorde | volumeValueLabel.setText("" + volume + "%"); |
342 | 3197 | mdecorde | } |
343 | 3197 | mdecorde | |
344 | 3197 | mdecorde | @Override
|
345 | 3197 | mdecorde | public void widgetDefaultSelected(SelectionEvent e) {} |
346 | 3197 | mdecorde | }); |
347 | 3197 | mdecorde | |
348 | 3197 | mdecorde | volumeValueLabel = new Label(this, SWT.NONE); |
349 | 3197 | mdecorde | volumeValueLabel.setText("100%");
|
350 | 3197 | mdecorde | |
351 | 3197 | mdecorde | // vlcPlayer.events().addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
|
352 | 3197 | mdecorde | //
|
353 | 3197 | mdecorde | // @Override
|
354 | 3197 | mdecorde | // public void opening(MediaPlayer mediaPlayer) {
|
355 | 3197 | mdecorde | // if (videoComposite.isDisposed()) return;
|
356 | 3197 | mdecorde | // Log.finer("Opening media...");
|
357 | 3197 | mdecorde | // }
|
358 | 3197 | mdecorde | //
|
359 | 3197 | mdecorde | // @Override
|
360 | 3197 | mdecorde | // public void finished(MediaPlayer mediaPlayer) {
|
361 | 3197 | mdecorde | // if (videoComposite.isDisposed()) return;
|
362 | 3197 | mdecorde | // Log.finer("Finished playing media...");
|
363 | 3197 | mdecorde | // if (repeat) {
|
364 | 3197 | mdecorde | // replay();
|
365 | 3197 | mdecorde | // }
|
366 | 3197 | mdecorde | // else {
|
367 | 3197 | mdecorde | // hasEnded = true;
|
368 | 3197 | mdecorde | // }
|
369 | 3197 | mdecorde | // }
|
370 | 3197 | mdecorde | // });
|
371 | 3197 | mdecorde | |
372 | 3197 | mdecorde | |
373 | 3197 | mdecorde | //
|
374 | 3197 | mdecorde | // vlcPlayer.events().addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
|
375 | 3197 | mdecorde | //
|
376 | 3197 | mdecorde | // @Override
|
377 | 3197 | mdecorde | // public void timeChanged(MediaPlayer mediaPlayer, final long arg1) {
|
378 | 3197 | mdecorde | //
|
379 | 3197 | mdecorde | // }
|
380 | 3197 | mdecorde | //
|
381 | 3197 | mdecorde | // @Override
|
382 | 3197 | mdecorde | // public void lengthChanged(MediaPlayer mediaPlayer, final long arg1) {
|
383 | 3197 | mdecorde | // if (videoComposite.isDisposed()) return;
|
384 | 3197 | mdecorde | //
|
385 | 3197 | mdecorde | // if (firstLengthEvent) {
|
386 | 3197 | mdecorde | // firstLengthEvent = false;
|
387 | 3197 | mdecorde | //
|
388 | 3197 | mdecorde | // // initialize time range widget limits
|
389 | 3197 | mdecorde | // timeRange.getDisplay().syncExec(new Runnable() {
|
390 | 3197 | mdecorde | //
|
391 | 3197 | mdecorde | // @Override
|
392 | 3197 | mdecorde | // public void run() {
|
393 | 3197 | mdecorde | // if (timeRange.isDisposed()) return;
|
394 | 3197 | mdecorde | // timeRange.setMaximum((int) arg1);
|
395 | 3197 | mdecorde | // // if (start == end) end = (int)arg1;
|
396 | 3197 | mdecorde | //
|
397 | 3197 | mdecorde | // if (end > 0 && start != end) {
|
398 | 3197 | mdecorde | // timeRange.setUpperValue(end);
|
399 | 3197 | mdecorde | // }
|
400 | 3197 | mdecorde | // else {
|
401 | 3197 | mdecorde | // timeRange.setUpperValue((int) arg1);
|
402 | 3197 | mdecorde | // }
|
403 | 3197 | mdecorde | //
|
404 | 3197 | mdecorde | // timeRange.setLowerValue(start);
|
405 | 3197 | mdecorde | // // System.out.println("Range: "+start+" -> "+end+" song length "+arg1);
|
406 | 3197 | mdecorde | // }
|
407 | 3197 | mdecorde | // });
|
408 | 3197 | mdecorde | // }
|
409 | 3197 | mdecorde | // }
|
410 | 3197 | mdecorde | // });
|
411 | 3197 | mdecorde | } |
412 | 3197 | mdecorde | |
413 | 3197 | mdecorde | protected void resizeView() { |
414 | 3197 | mdecorde | if (view != null) { |
415 | 3197 | mdecorde | Point p = fxCanvas.getSize();
|
416 | 3197 | mdecorde | // if (previousP == null || (p.x != previousP.x && p.y != previousP.y)) { // ensure size changed
|
417 | 3197 | mdecorde | view.setFitHeight(p.y); |
418 | 3197 | mdecorde | view.setFitWidth(p.x); |
419 | 3197 | mdecorde | previousP = p; |
420 | 3197 | mdecorde | // }
|
421 | 3197 | mdecorde | } |
422 | 3197 | mdecorde | } |
423 | 3197 | mdecorde | |
424 | 3197 | mdecorde | public void resume() { |
425 | 3197 | mdecorde | if (jfxPlayer != null) { |
426 | 3197 | mdecorde | jfxPlayer.play(); |
427 | 3197 | mdecorde | playButton.setText(MessagesMP.pause); |
428 | 3197 | mdecorde | playButton.getParent().layout(); |
429 | 3197 | mdecorde | } |
430 | 3197 | mdecorde | } |
431 | 3197 | mdecorde | |
432 | 3197 | mdecorde | public void pause() { |
433 | 3197 | mdecorde | if (jfxPlayer != null) { |
434 | 3197 | mdecorde | jfxPlayer.pause(); |
435 | 3197 | mdecorde | playButton.setText(MessagesMP.resume); |
436 | 3197 | mdecorde | playButton.getParent().layout(); |
437 | 3197 | mdecorde | } |
438 | 3197 | mdecorde | } |
439 | 3197 | mdecorde | |
440 | 3197 | mdecorde | private void updateTimeLabel() { |
441 | 3197 | mdecorde | mins = time / 60;
|
442 | 3197 | mdecorde | secs = (time) % 60;
|
443 | 3197 | mdecorde | timeLabel.setText(String.format("%02d:%02d", mins, secs)); //$NON-NLS-1$ |
444 | 3197 | mdecorde | timeLabel.update(); |
445 | 3197 | mdecorde | } |
446 | 3197 | mdecorde | |
447 | 3197 | mdecorde | public void replay() { |
448 | 3197 | mdecorde | if (currentlyPlayed.length() > 0) { |
449 | 3197 | mdecorde | jfxPlayer.seek(Duration.seconds(start));
|
450 | 3197 | mdecorde | playButton.setText(MessagesMP.pause); |
451 | 3197 | mdecorde | playButton.getParent().layout(); |
452 | 3197 | mdecorde | } |
453 | 3197 | mdecorde | } |
454 | 3197 | mdecorde | |
455 | 3197 | mdecorde | protected void selectMedia() { |
456 | 3197 | mdecorde | Log.fine(MessagesMP.select_file); |
457 | 3197 | mdecorde | |
458 | 3197 | mdecorde | FileDialog fd = new FileDialog(JFXPlayer.this.getShell(), SWT.OPEN); |
459 | 3197 | mdecorde | fd.setText(MessagesMP.select_file_title); |
460 | 3197 | mdecorde | File f = new File(previouslyPlayed); |
461 | 3197 | mdecorde | if (f.isDirectory()) fd.setFilterPath(f.getPath());
|
462 | 3197 | mdecorde | else fd.setFilterPath(f.getParent());
|
463 | 3197 | mdecorde | |
464 | 3197 | mdecorde | String[] filterExt = { "*.*", "*.mp3", "*.mp4", "*.avi", "*.ogg", "*.ogv" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
465 | 3197 | mdecorde | fd.setFilterExtensions(filterExt); |
466 | 3197 | mdecorde | String selected = fd.open();
|
467 | 3197 | mdecorde | if (selected == null) { |
468 | 3197 | mdecorde | System.out.println(MessagesMP.cancel);
|
469 | 3197 | mdecorde | return;
|
470 | 3197 | mdecorde | } |
471 | 3197 | mdecorde | |
472 | 3197 | mdecorde | currentlyPlayed = selected; |
473 | 3197 | mdecorde | previouslyPlayed = selected; |
474 | 3197 | mdecorde | Log.fine(MessagesMP.opening + currentlyPlayed); |
475 | 3197 | mdecorde | play(new File(currentlyPlayed).toURI().toString(), 0, 0); |
476 | 3197 | mdecorde | } |
477 | 3197 | mdecorde | |
478 | 3197 | mdecorde | /**
|
479 | 3197 | mdecorde | *
|
480 | 3197 | mdecorde | * @param mrl
|
481 | 3197 | mdecorde | * @param time msec start time
|
482 | 3197 | mdecorde | * @param endtime msec end time
|
483 | 3197 | mdecorde | */
|
484 | 3197 | mdecorde | @Override
|
485 | 3197 | mdecorde | public boolean play(String mrl, int time, int endtime) { |
486 | 3197 | mdecorde | Log.fine(MessagesMP.bind(MessagesMP.playing, new Object[] { mrl, time, endtime })); |
487 | 3197 | mdecorde | return play(mrl, "" + time, "" + endtime); //$NON-NLS-1$ //$NON-NLS-2$ |
488 | 3197 | mdecorde | } |
489 | 3197 | mdecorde | |
490 | 3197 | mdecorde | @Override
|
491 | 3197 | mdecorde | public boolean play(String mrl, int time) { |
492 | 3197 | mdecorde | return play(mrl, time, time);
|
493 | 3197 | mdecorde | } |
494 | 3197 | mdecorde | |
495 | 3197 | mdecorde | public void hideStopButton() { |
496 | 3197 | mdecorde | if (this.stopButton != null && !this.stopButton.isDisposed()) { |
497 | 3197 | mdecorde | this.stopButton.dispose();
|
498 | 3197 | mdecorde | } |
499 | 3197 | mdecorde | } |
500 | 3197 | mdecorde | |
501 | 3197 | mdecorde | DateTimeFormatter hhmmssFormatter = DateTimeFormatter.ISO_LOCAL_TIME; |
502 | 3197 | mdecorde | |
503 | 3197 | mdecorde | private MediaView view;
|
504 | 3197 | mdecorde | |
505 | 3197 | mdecorde | private Group group; |
506 | 3197 | mdecorde | |
507 | 3197 | mdecorde | private Scene scene;
|
508 | 3197 | mdecorde | |
509 | 3197 | mdecorde | private String mrl; |
510 | 3197 | mdecorde | |
511 | 3197 | mdecorde | private Media media; |
512 | 3197 | mdecorde | |
513 | 3197 | mdecorde | @Override
|
514 | 3197 | mdecorde | public final void setCredentials(String login, String mdp) { |
515 | 3197 | mdecorde | Authenticator.setDefault(new Authenticator() { |
516 | 3197 | mdecorde | |
517 | 3197 | mdecorde | @Override
|
518 | 3197 | mdecorde | public PasswordAuthentication getPasswordAuthentication() { |
519 | 3197 | mdecorde | // System.out.println("PA: login=" + login + " mdp=" + mdp + " mrl=" + mrl + " req=" + getRequestingHost());
|
520 | 3197 | mdecorde | if (login != null && mdp != null && mrl.contains("://" + getRequestingHost() + "/")) { |
521 | 3197 | mdecorde | return new PasswordAuthentication(login, mdp.toCharArray()); |
522 | 3197 | mdecorde | } |
523 | 3197 | mdecorde | return null; |
524 | 3197 | mdecorde | } |
525 | 3197 | mdecorde | }); |
526 | 3197 | mdecorde | } |
527 | 3197 | mdecorde | |
528 | 3197 | mdecorde | /**
|
529 | 3197 | mdecorde | *
|
530 | 3197 | mdecorde | * @param mrl
|
531 | 3197 | mdecorde | * @param startTime "0.0" or ""hh:mm:ss" format
|
532 | 3197 | mdecorde | * @param endTime "0.0" or ""hh:mm:ss" format
|
533 | 3197 | mdecorde | */
|
534 | 3197 | mdecorde | @Override
|
535 | 3197 | mdecorde | public boolean play(String mrl, String startTime, String endTime) { |
536 | 3197 | mdecorde | |
537 | 3197 | mdecorde | if (mrl.contains("{0}:{1}@")) { |
538 | 3197 | mdecorde | mrl = mrl.replace("{0}:{1}@", ""); |
539 | 3197 | mdecorde | } |
540 | 3197 | mdecorde | |
541 | 3197 | mdecorde | this.mrl = mrl;
|
542 | 3197 | mdecorde | if (startTime.matches("[0-9]+.[0-9]+")) { |
543 | 3197 | mdecorde | start = (int) (Float.parseFloat(startTime)); |
544 | 3197 | mdecorde | } |
545 | 3197 | mdecorde | else if (startTime.matches("[0-9]+:[0-9]+:[0-9]+")) { |
546 | 3197 | mdecorde | if (startTime.indexOf(":") == 1) { |
547 | 3197 | mdecorde | startTime = "0" + startTime;
|
548 | 3197 | mdecorde | } |
549 | 3197 | mdecorde | LocalTime time1 = LocalTime.parse(startTime, hhmmssFormatter); |
550 | 3197 | mdecorde | start = ((time1.getHour() * 60 * 60) + (time1.getMinute() * 60) + time1.getSecond()); |
551 | 3197 | mdecorde | } |
552 | 3197 | mdecorde | |
553 | 3197 | mdecorde | if (endTime.matches("[0-9]+.[0-9]+")) { |
554 | 3197 | mdecorde | end = (int) (Float.parseFloat(endTime)); |
555 | 3197 | mdecorde | } |
556 | 3197 | mdecorde | else if (endTime.matches("[0-9]+:[0-9]+:[0-9]+")) { |
557 | 3197 | mdecorde | if (endTime.indexOf(":") == 1) endTime = "0" + endTime; |
558 | 3197 | mdecorde | LocalTime time1 = LocalTime.parse(endTime, hhmmssFormatter); |
559 | 3197 | mdecorde | end = ((time1.getHour() * 60 * 60) + (time1.getMinute() * 60) + time1.getSecond()); |
560 | 3197 | mdecorde | } |
561 | 3197 | mdecorde | |
562 | 3197 | mdecorde | // if (start == end) end = -1;
|
563 | 3197 | mdecorde | |
564 | 3197 | mdecorde | Log.finer(MessagesMP.bind(MessagesMP.playing, new Object[] { mrl, startTime, endTime })); |
565 | 3197 | mdecorde | // vlcPlayer.submit(new Runnable() {
|
566 | 3197 | mdecorde | //
|
567 | 3197 | mdecorde | // @Override
|
568 | 3197 | mdecorde | // public void run() {
|
569 | 3197 | mdecorde | // String[] options = { " :live-caching=200" }; // reduce video stream cache duration to 200ms
|
570 | 3197 | mdecorde | |
571 | 3197 | mdecorde | Log.finer("Preparing media...");
|
572 | 3197 | mdecorde | try {
|
573 | 3197 | mdecorde | javafx.application.Platform.runLater(new Runnable() { |
574 | 3197 | mdecorde | |
575 | 3197 | mdecorde | @Override
|
576 | 3197 | mdecorde | public void run() { |
577 | 3197 | mdecorde | Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { |
578 | 3197 | mdecorde | |
579 | 3197 | mdecorde | @Override
|
580 | 3197 | mdecorde | public void uncaughtException(Thread t, Throwable e) { |
581 | 3197 | mdecorde | System.out.println("JavaFX uncaught exception: " + e); |
582 | 3197 | mdecorde | } |
583 | 3197 | mdecorde | }); |
584 | 3197 | mdecorde | } |
585 | 3197 | mdecorde | }); |
586 | 3197 | mdecorde | media = new Media(mrl); |
587 | 3197 | mdecorde | if (jfxPlayer != null) { |
588 | 3197 | mdecorde | try {
|
589 | 3197 | mdecorde | jfxPlayer.stop(); |
590 | 3197 | mdecorde | } |
591 | 3197 | mdecorde | catch (Exception e) { |
592 | 3197 | mdecorde | |
593 | 3197 | mdecorde | } |
594 | 3197 | mdecorde | } |
595 | 3197 | mdecorde | |
596 | 3197 | mdecorde | Platform.setImplicitExit(false); // This is important to avoid Thread exception when re-opening a player |
597 | 3197 | mdecorde | jfxPlayer = new MediaPlayer(media);
|
598 | 3197 | mdecorde | |
599 | 3197 | mdecorde | if (jfxPlayer.getError() == null) { |
600 | 3197 | mdecorde | jfxPlayer.setOnError(new Runnable() { |
601 | 3197 | mdecorde | |
602 | 3197 | mdecorde | @Override
|
603 | 3197 | mdecorde | public void run() { |
604 | 3197 | mdecorde | System.out.println("JFX Player Error:"); |
605 | 3197 | mdecorde | jfxPlayer.getError().printStackTrace(); |
606 | 3197 | mdecorde | } |
607 | 3197 | mdecorde | }); |
608 | 3197 | mdecorde | } |
609 | 3197 | mdecorde | else {
|
610 | 3197 | mdecorde | System.out.println("Warning: could not retrieve media error logger"); |
611 | 3197 | mdecorde | } |
612 | 3197 | mdecorde | |
613 | 3197 | mdecorde | //initializePlayerListeners();
|
614 | 3197 | mdecorde | jfxPlayer.setAutoPlay(false);
|
615 | 3197 | mdecorde | |
616 | 3197 | mdecorde | view = new MediaView(jfxPlayer);
|
617 | 3197 | mdecorde | |
618 | 3197 | mdecorde | HBox buttonSection = new HBox(view);
|
619 | 3197 | mdecorde | buttonSection.setPadding(new Insets(2)); |
620 | 3197 | mdecorde | group = new Group(buttonSection); |
621 | 3197 | mdecorde | //group.setAutoSizeChildren(true);
|
622 | 3197 | mdecorde | // scene = new Scene(group, Color.rgb(fxCanvas.getBackground().getRed(), fxCanvas.getBackground().getGreen(), fxCanvas.getBackground().getBlue()));
|
623 | 3197 | mdecorde | scene = new Scene(group, Color.rgb(0, 0, 0)); |
624 | 3197 | mdecorde | |
625 | 3197 | mdecorde | fxCanvas.setScene(scene); |
626 | 3197 | mdecorde | |
627 | 3197 | mdecorde | //view.setPreserveRatio(true);
|
628 | 3197 | mdecorde | } |
629 | 3197 | mdecorde | catch (Exception e) { |
630 | 3197 | mdecorde | e.printStackTrace(); |
631 | 3197 | mdecorde | return false; |
632 | 3197 | mdecorde | } |
633 | 3197 | mdecorde | |
634 | 3197 | mdecorde | jfxPlayer.setOnReady(new Runnable() { |
635 | 3197 | mdecorde | |
636 | 3197 | mdecorde | @Override
|
637 | 3197 | mdecorde | public void run() { |
638 | 3197 | mdecorde | |
639 | 3197 | mdecorde | timeRange.setMinimum(0);
|
640 | 3197 | mdecorde | Duration d = jfxPlayer.getMedia().getDuration();
|
641 | 3197 | mdecorde | if (d.toSeconds() > 0) { |
642 | 3197 | mdecorde | timeRange.setMaximum((int) d.toSeconds());
|
643 | 3197 | mdecorde | } |
644 | 3197 | mdecorde | timeRange.setLowerValue(start); |
645 | 3197 | mdecorde | timeRange.setMiddleValue(start); |
646 | 3197 | mdecorde | |
647 | 3197 | mdecorde | jfxPlayer.setVolume(volume); |
648 | 3197 | mdecorde | |
649 | 3197 | mdecorde | jfxPlayer.setStartTime(Duration.seconds(start));
|
650 | 3197 | mdecorde | //jfxPlayer.seek(Duration.seconds(start));
|
651 | 3197 | mdecorde | if (end > start) {
|
652 | 3197 | mdecorde | timeRange.setUpperValue(end); |
653 | 3197 | mdecorde | jfxPlayer.setStopTime(Duration.seconds(end));
|
654 | 3197 | mdecorde | } |
655 | 3197 | mdecorde | else if (d.toSeconds() > 0) { |
656 | 3197 | mdecorde | timeRange.setUpperValue((int) jfxPlayer.getMedia().getDuration().toSeconds());
|
657 | 3197 | mdecorde | } |
658 | 3197 | mdecorde | Log.info("Playing media: "+media.getSource());
|
659 | 3197 | mdecorde | |
660 | 3197 | mdecorde | jfxPlayer.play(); |
661 | 3197 | mdecorde | //resizeView();
|
662 | 3197 | mdecorde | |
663 | 3197 | mdecorde | // if (new File(mrl + ".srt").exists()) { //$NON-NLS-1$
|
664 | 3197 | mdecorde | // vlcPlayer.sub.subpictures().setSubTitleFile(mrl + ".srt"); //$NON-NLS-1$
|
665 | 3197 | mdecorde | // }
|
666 | 3197 | mdecorde | currentlyPlayed = JFXPlayer.this.mrl; |
667 | 3197 | mdecorde | previouslyPlayed = JFXPlayer.this.mrl; |
668 | 3197 | mdecorde | |
669 | 3197 | mdecorde | if (!playButton.isDisposed()) {
|
670 | 3197 | mdecorde | playButton.setText(MessagesMP.pause); |
671 | 3197 | mdecorde | playButton.getParent().layout(true);
|
672 | 3197 | mdecorde | } |
673 | 3197 | mdecorde | firstLengthEvent = true;
|
674 | 3197 | mdecorde | } |
675 | 3197 | mdecorde | }); |
676 | 3197 | mdecorde | |
677 | 3197 | mdecorde | return true; |
678 | 3197 | mdecorde | } |
679 | 3197 | mdecorde | |
680 | 3197 | mdecorde | private void initializePlayerListeners() { |
681 | 3197 | mdecorde | |
682 | 3197 | mdecorde | jfxPlayer.currentTimeProperty().addListener(new InvalidationListener() {
|
683 | 3197 | mdecorde | |
684 | 3197 | mdecorde | @Override
|
685 | 3197 | mdecorde | public void invalidated(Observable ov) { |
686 | 3197 | mdecorde | if (fxCanvas.isDisposed()) return; |
687 | 3197 | mdecorde | if (jfxPlayer == null) return; |
688 | 3197 | mdecorde | |
689 | 3197 | mdecorde | Duration currentTime = jfxPlayer.getCurrentTime();
|
690 | 3197 | mdecorde | time = (int) currentTime.toSeconds();
|
691 | 3197 | mdecorde | if (previous == time) {
|
692 | 3197 | mdecorde | return;
|
693 | 3197 | mdecorde | } |
694 | 3197 | mdecorde | previous = time; |
695 | 3197 | mdecorde | |
696 | 3197 | mdecorde | timeLabel.getDisplay().syncExec(new Runnable() { |
697 | 3197 | mdecorde | |
698 | 3197 | mdecorde | @Override
|
699 | 3197 | mdecorde | public void run() { |
700 | 3197 | mdecorde | if (timeRange.isDisposed()) {
|
701 | 3197 | mdecorde | return;
|
702 | 3197 | mdecorde | } |
703 | 3197 | mdecorde | if (!timeRange.isDragMiddleKnob()) {
|
704 | 3197 | mdecorde | timeRange.setMiddleValue((int) time);
|
705 | 3197 | mdecorde | } |
706 | 3197 | mdecorde | updateTimeLabel(); |
707 | 3197 | mdecorde | |
708 | 3197 | mdecorde | // if (time >= end && end != start) {
|
709 | 3197 | mdecorde | // if (repeat) {
|
710 | 3197 | mdecorde | // vlcPlayer.seek(Duration.seconds(start));
|
711 | 3197 | mdecorde | // }
|
712 | 3197 | mdecorde | // else {
|
713 | 3197 | mdecorde | // vlcPlayer.stop();
|
714 | 3197 | mdecorde | // }
|
715 | 3197 | mdecorde | // }
|
716 | 3197 | mdecorde | } |
717 | 3197 | mdecorde | }); |
718 | 3197 | mdecorde | } |
719 | 3197 | mdecorde | }); |
720 | 3197 | mdecorde | } |
721 | 3197 | mdecorde | |
722 | 3197 | mdecorde | @Override
|
723 | 3197 | mdecorde | public void setRepeat(boolean repeat) { |
724 | 3197 | mdecorde | this.repeat = repeat;
|
725 | 3197 | mdecorde | if (this.repeat) { |
726 | 3197 | mdecorde | jfxPlayer.setCycleCount(Integer.MAX_VALUE);
|
727 | 3197 | mdecorde | } |
728 | 3197 | mdecorde | else {
|
729 | 3197 | mdecorde | jfxPlayer.setCycleCount(0);
|
730 | 3197 | mdecorde | } |
731 | 3197 | mdecorde | if (!repeatButton.isDisposed()) {
|
732 | 3197 | mdecorde | repeatButton.setSelection(repeat); |
733 | 3197 | mdecorde | } |
734 | 3197 | mdecorde | } |
735 | 3197 | mdecorde | |
736 | 3197 | mdecorde | @Override
|
737 | 3197 | mdecorde | public void stop() { |
738 | 3197 | mdecorde | if (jfxPlayer == null) return; // nothing to do |
739 | 3197 | mdecorde | |
740 | 3197 | mdecorde | |
741 | 3197 | mdecorde | userStopped = true;
|
742 | 3197 | mdecorde | jfxPlayer.stop(); |
743 | 3197 | mdecorde | |
744 | 3197 | mdecorde | jfxPlayer.dispose(); |
745 | 3197 | mdecorde | jfxPlayer = null;
|
746 | 3197 | mdecorde | if (!fxCanvas.isDisposed()) {
|
747 | 3197 | mdecorde | fxCanvas.setScene(null);
|
748 | 3197 | mdecorde | } |
749 | 3197 | mdecorde | currentlyPlayed = NOMEDIA; |
750 | 3197 | mdecorde | if (!playButton.isDisposed()) {
|
751 | 3197 | mdecorde | playButton.setText(MessagesMP.play); |
752 | 3197 | mdecorde | playButton.getParent().layout(); |
753 | 3197 | mdecorde | } |
754 | 3197 | mdecorde | } |
755 | 3197 | mdecorde | |
756 | 3197 | mdecorde | @Override
|
757 | 3197 | mdecorde | public boolean isMediaLoaded() { |
758 | 3197 | mdecorde | return jfxPlayer != null && jfxPlayer.getStatus().equals(Status.READY); |
759 | 3197 | mdecorde | } |
760 | 3197 | mdecorde | |
761 | 3197 | mdecorde | @Override
|
762 | 3197 | mdecorde | public void seek(float time) { |
763 | 3197 | mdecorde | |
764 | 3197 | mdecorde | this.jfxPlayer.seek(Duration.seconds(time)); |
765 | 3197 | mdecorde | } |
766 | 3197 | mdecorde | |
767 | 3197 | mdecorde | @Override
|
768 | 3197 | mdecorde | public void setVolume(double volume) { |
769 | 3197 | mdecorde | |
770 | 3197 | mdecorde | this.jfxPlayer.setVolume(volume);
|
771 | 3197 | mdecorde | } |
772 | 3197 | mdecorde | |
773 | 3197 | mdecorde | @Override
|
774 | 3197 | mdecorde | public void setRate(float rate) { |
775 | 3197 | mdecorde | |
776 | 3197 | mdecorde | this.jfxPlayer.setRate(rate);
|
777 | 3197 | mdecorde | } |
778 | 3197 | mdecorde | |
779 | 3197 | mdecorde | @Override
|
780 | 3197 | mdecorde | public boolean isPlaying() { |
781 | 3197 | mdecorde | |
782 | 3197 | mdecorde | return jfxPlayer.getStatus().equals(Status.PLAYING);
|
783 | 3197 | mdecorde | } |
784 | 3197 | mdecorde | |
785 | 3197 | mdecorde | @Override
|
786 | 3197 | mdecorde | public void setStartTime(float seconds) { |
787 | 3197 | mdecorde | |
788 | 3197 | mdecorde | this.jfxPlayer.setStartTime(Duration.seconds(seconds)); |
789 | 3197 | mdecorde | |
790 | 3197 | mdecorde | } |
791 | 3197 | mdecorde | |
792 | 3197 | mdecorde | @Override
|
793 | 3197 | mdecorde | public void setStopTime(float seconds) { |
794 | 3197 | mdecorde | |
795 | 3197 | mdecorde | this.jfxPlayer.setStopTime(Duration.seconds(seconds)); |
796 | 3197 | mdecorde | |
797 | 3197 | mdecorde | } |
798 | 3197 | mdecorde | |
799 | 3197 | mdecorde | } |