IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:16.1.2017 20:51

Zdravím, potřeboval bych poradit jak zjistím délku videa... Moc děkuji za každou odpověď :)

 
Odpovědět
16.1.2017 20:51
Avatar
Lako
Člen
Avatar
Lako:16.1.2017 20:58

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

 
Nahoru Odpovědět
16.1.2017 20:58
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Lako
Petr Kasnal:16.1.2017 21:32

Toto jsem už našel... Ale bohužel mi nejde importovat IContainer :/

 
Nahoru Odpovědět
16.1.2017 21:32
Avatar
doubleT
Člen
Avatar
doubleT:16.1.2017 23:30

Media media = new Media(new File(...cesta k souboru...).to­URI().toStrin­g());

double cas = media.getDura­tion().toHours(); (.toMinutes() atd. :) )

Editováno 16.1.2017 23:33
 
Nahoru Odpovědět
16.1.2017 23:30
Avatar
doubleT
Člen
Avatar
doubleT:17.1.2017 1:25

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);
    }

}
 
Nahoru Odpovědět
17.1.2017 1:25
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na doubleT
Petr Kasnal:17.1.2017 8:11

Ano toto opravdu funguje, ale kdyz se snazim ulozit tuto hodnotu do promene tak to nefunguje... Promenou mi to vypise prazdnou

 
Nahoru Odpovědět
17.1.2017 8:11
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:17.1.2017 9:06

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.

Nahoru Odpovědět
17.1.2017 9:06
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:17.1.2017 15:59
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í...

 
Nahoru Odpovědět
17.1.2017 15:59
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:17.1.2017 17:04

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.

Nahoru Odpovědět
17.1.2017 17:04
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:17.1.2017 20:59

Zkusil jsem to přes Thread.sleep(5000); a bohužel to nefunguje..

 
Nahoru Odpovědět
17.1.2017 20:59
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:18.1.2017 8:54

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.

Nahoru Odpovědět
18.1.2017 8:54
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:23.1.2017 0:06

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

 
Nahoru Odpovědět
23.1.2017 0:06
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:23.1.2017 14:50

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.

Nahoru Odpovědět
23.1.2017 14:50
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:23.1.2017 16:03

Ahoj, hele vyzkoušel jsem přesně tvůj kód a nefunguje mi :/

 
Nahoru Odpovědět
23.1.2017 16:03
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:23.1.2017 16:14

Tak sem dej chybu, kterou aplikace vypíše.

Nahoru Odpovědět
23.1.2017 16:14
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:23.1.2017 16:22

Aplikace žádnou chybu nevypíše, video se normálně přehraje ale nevypíše se "Hotovo"....

 
Nahoru Odpovědět
23.1.2017 16:22
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:23.1.2017 16:31

To je hodně divný. Mě to funguje normálně. Nemohl by tento kus kódu vyzkoušet ještě někdo jiný?

Nahoru Odpovědět
23.1.2017 16:31
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:23.1.2017 18:22

Už jsem nalezl problém.... Toto video nelze spustit v FX projektu ale pouze v obyčejném... Nevíš proč ?

 
Nahoru Odpovědět
23.1.2017 18:22
Avatar
Odpovídá na Petr Kasnal
Petr Štechmüller:23.1.2017 18:41

Těžko říct. Není video jako video. Třeba je v nějakém divnem kódování, fakt nevím.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
23.1.2017 18:41
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Petr Štechmüller
Petr Kasnal:23.1.2017 22:37

No nic tak se nedá asi nic dělat... Díky za pomoc :)

 
Nahoru Odpovědět
23.1.2017 22:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 20 zpráv z 20.