getDuration() vom JMF Player liefert mir zu viele Sekunden ...

roxX0r

Mitglied
Ich hab ein echt komisch es Problem.
Ich programmiere soetwas wie einen mp3 Player und möchte nun ein mp3 abspielen. Es wird alles korrekt abgespielt usw, aber getDuration() liefert mir zu viele Sekunden für ein mp3 (winamp und alle andere tools sagen, es hat weniger). Es geht hier nicht um ein paar Sekunden, sondern um z.B. 200. Winamp sagt mir, mein mp3 hat 231 Sekunden, der Player meint 4xx.. ich verstehe nicht wieso ...

ich rufe
Code:
int dur = (int)player.getDuration().getSeconds();
nachem der Player prefetched hat auf. Sonst würde er ja "unknows" zurückliefern, also er findet da schon was, nur es ist ganz und garnicht das was es soll...

Auch wenn ich mir jede Sekunde "getMediaTime()" ausgeben lasse, dann läuft es bis zum (realen) ende des mp3 und dann ist ende, obowhl er angeblich ja noch 3 Minuten am mp3 hat. Aber wenn ich die clock manuell umsetze dann kann ich auch 3sec vor ende setzen und er spielt was ab (in der "phantom zone").

Ich poste mal ein bischen Code, vielleicht fällt euch ja was auf .. (ohne die Catches)

Code:
public void play() {   
                CreateMp3File();
                File file = new File(mp3.getPath());
                MediaLocator mediaLocator = new MediaLocator(file.toURI().toURL());
                player = Manager.createPlayer(mediaLocator);             
                player.addControllerListener(this);
                SC.mainwindow.setStringAtProgressBar("Realizing...");
                FileTitle = mp3.getTitle();
                player.realize();
    }

  public void controllerUpdate(ControllerEvent ev) {
        if(ev instanceof RealizeCompleteEvent) {
            player.prefetch();
            SC.mainwindow.setStringAtProgressBar("Prefetching...");
        }
        if(ev instanceof PrefetchCompleteEvent) {
            //Hier wird die dur ausgelesen
            Duration = (int)player.getDuration().getSeconds();          
            SC.mainwindow.setMaximumAtProgressBar(Duration);
            SC.mainwindow.setStringAtProgressBar("Playing: " + FileTitle);
            playThread = new Thread(this);
            playThread.start();   
            updateVolume();         
            player.start();
           
        }
        if(ev instanceof EndOfMediaEvent) {
            player.removeControllerListener(this);
            player.stop();
            player.close();
            player = null;
            mp3=null;
            if(playThread != null) {
                playThread = null;
            }
            SC.mainwindow.setValueAtProgressBar(0);
            next();
        }
    }

Also nochmal kurz das Problem: er returnt einfach die falschen Sekunden für das mp3 , aber für jedes. Abspielen geht aber ohne Probleme! Von daher habe ich nicht den Codec im Verdacht ...

jemand ne Idee an was es liegen könnte?
 
Zurück