Diskuze: Délka videa
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Co třeba tohle:
private static final String filename = "c:/myvideo.mp4";
IContainer container = IContainer.make();
int result = container.open(filename, IContainer.Type.READ, null);
long duration = container.getDuration();
long fileSize = container.getFileSize();
Zcela okopírováno z prvního odkazu na googlu: http://stackoverflow.com/…ngth-in-java
Toto jsem už našel... Ale bohužel mi nejde importovat IContainer :/
Tak muj předešlý koment nefunguje... Ale toto v JavaFX ano:
public class Test extends Application {
private final String video = "C:\\myvideo.mp4";
private final File file = new File(video);
private Media media;
private MediaPlayer player;
@Override
public void start(Stage primaryStage) {
media = new Media(file.toURI().toString());
player = new MediaPlayer(media);
player.setOnReady(new Runnable() {
@Override
public void run() {
System.out.println("Delka: " + media.getDuration().toSeconds()+ " sec");
//player.play();
}
});
}
public static void main(String[] args) {
launch(args);
}
}
Ano toto opravdu funguje, ale kdyz se snazim ulozit tuto hodnotu do promene tak to nefunguje... Promenou mi to vypise prazdnou
Ahoj, jakým způsobem se snažíš uložit tu hodnotu do proměnné? Co jsem koukal, tak tady řešili stejný problém. Musíš jí ukládat v tom handleru onReady, protože ten objekt Media potřebuje nějaký čas na inicializaci.
After Creating the Media Object it needs some time to get fully initialized.
double delka;
player.setOnReady(new Runnable() {
@Override
public void run() {
delka = mediaPlayerIntro.getTotalDuration().toMillis();
}
});
Takhle to zkouším zkoušel jsem to dát i jako třídní proměnnou.... Ale nefunguje mi to porměnnou lze vypsat v té metodě setOnReady, ale nejde vypsat mimo ní...
Tak si ji schválně zkus vypsat až po nějakém čase. Jenom
experimentálně si dej do kódu nějaký sleep (třeba 1 vteřinu) a uvidíš,
že už tam ta proměnná bude.
Řešení je jednoduché. Prostě zajisti, aby kód pokračoval v tý metodě
run, kterou vyvolal event onReady.
Zkusil jsem to přes Thread.sleep(5000); a bohužel to nefunguje..
Ahoj, ted jsem si uvědomil, ze ten sleep je blbost. Ty to všechno je des v
hlavním vlákně, takže sleep je k ničemu. Tady pomůže pouze to, ze hodíš
výkonný kód do toho handleru onReady.
btw javaFX se da velmi dobře vystavět MVC architektura. Tady je vidět, ze
mícháš jabka s hruskama (věci z modelu do kontroléru). Zamýšlí se,
zda-li by to nešlo vymyslet lépe. Oddělit logiku od kontroléru.
Hele já bych potřeboval zjistit délku videa z tý metody onReady poté jí dosadit do metody setStopTime(), díky tomu budu moci naprogramovat metodu setOnEndOfMeida() a díky tomu říct programu co má dělat po skončení toho videa... O todle mi jde a moc nevím jak to uděla... Moc děkuji za tvoje rady
Ahoj, nechápu, proč to máš tak komplikovaně. Handler onEndOfMedia reaguje normálně, aniž by jsi nastavoval délku videa. Vyzkoušej si tento kus kódu:
Group root = new Group();
Media media = new Media(getClass().getResource("video.mp4").toExternalForm()); // Cesta k videu
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
mediaPlayer.setOnEndOfMedia(() -> System.out.println("Hotovo")); // Normálně se nastaví handler
MediaView mediaView = new MediaView(mediaPlayer);
root.getChildren().add(mediaView);
Scene scene= new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
Žádný nastavování délky videa není potřeba.
Ahoj, hele vyzkoušel jsem přesně tvůj kód a nefunguje mi :/
Aplikace žádnou chybu nevypíše, video se normálně přehraje ale nevypíše se "Hotovo"....
To je hodně divný. Mě to funguje normálně. Nemohl by tento kus kódu vyzkoušet ještě někdo jiný?
Už jsem nalezl problém.... Toto video nelze spustit v FX projektu ale pouze v obyčejném... Nevíš proč ?
Těžko říct. Není video jako video. Třeba je v nějakém divnem kódování, fakt nevím.
No nic tak se nedá asi nic dělat... Díky za pomoc
Zobrazeno 20 zpráv z 20.