JMF Player spielt mp3 nur ohne Ton

Lexi

Bekanntes Mitglied
Guten Tag 🙂

Java:
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.AudioDeviceUnavailableEvent;
import javax.media.ControllerAdapter;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.StartEvent;
import javax.media.StopEvent;

public class PlayerTest3 {
	public static void main(String[] args){
		Player p = null;
		ControllerAdapter ca = new ControllerAdapter();
		ControllerListener cl = new ControllerAdapter(){
			@Override
			public void endOfMedia(EndOfMediaEvent e){
				System.out.println("EndOfMedia");
			}
			@Override
			public void audioDeviceUnavailable(AudioDeviceUnavailableEvent e){
				System.out.println("Audiodevice is not availible");
			}
			@Override
			public void start(StartEvent se){
				System.out.println("Got startEvent");
			}

			@Override
			public void stop(StopEvent se){
				System.out.println("Got stopEvent");
			}
		};

		try {
			p = Manager.createPlayer(new URL("file:///home/delexi/Musik/test.mp3"));
		} catch (NoPlayerException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		}
		p.addControllerListener(cl);
		System.out.println("Created");

		p.prefetch();
		System.out.println("Prefetched");
		p.realize();
		System.out.println("Realized");
		p.start();
		System.out.println("Started");
	}
}

Wenn ich oben stehenden Code ausführe bekomme ich zunächste einmal Folgendes auf der Konsole ausgegeben:
Code:
Created
Prefetched
Realized
Started
Got startEvent
Allerdings passiert nun nichts weiter. Ich höre nichts und es wird auch kein EndOfMedia- oder StopEvent ausgelöst. Jegliche Fehlermeldungen bleiben auch aus.
Die MP3 Datei ist vollkommen in Ordnung und kann mit anderen Playern ( VLC, Rythmbox, ... ) ohne weiteres abgespielt werden.
Was mache ich falsch ?
 
In deinem alten Thread benutzt du Jlayer, sofern ich das jetzt richtig gesehen habe, ist das nicht ebenfalls total veraltet ?

Zum fmj: Kennst du eventuell ein Tutorial zu diesem Framework ?
 
kA, aber als ich es damals verwendet habe, war es zumindest noch aktueller als das JMF. Beim FMJ findest du eigentlich vieles auf der Website, generell sind JMF und FMJ aber API-Kompatibel, so dass der Umstieg nicht sonderlich schwer fallen sollte.
 
Hi,

so wie versprochen hab ichs mir mal angekuckt 🙂

Also dein Code läuft bei mir auch nicht, da bekomm ich die Meldung:
Unable to realize com.sun.media.amovie.AMController

Ich habs dann mal bis auf ein Minimum runtergebrochen, aber er scheint bei mir dann den Teil bei mir nicht zu mögen:
Java:
"file:///home/delexi/Musik/test.mp3"

Ich hab bei mir nämlich gar keine einzelnen mp3s rein, sondern es wird immer eine per Zufall ausgewählt, das tut komischerweise ohne Probleme. Ich poste mal den Ausschnitt, vielleicht hilft es dir ja.
Code ist nicht gerade schön und einen deprecated teil nutz ich auch, war ja aber auch nur ein Test.
Java:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Random;

import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;


public class PlayerTest3 {

		
   private static Player player;
			
		
   public static File get (File[] fileList) {
      Random generator = new Random();
      int rnd = generator.nextInt(fileList.length);
      return fileList[rnd];
   }
		
   public static void main(String[] args) {
						
     File dir = new File("E:\\Musikvideos\\mp3");

     final File[] fileList = dir.listFiles();
			
     final File ret = PlayerTest3.get(fileList);
			
     try {
						
        player = Manager.createPlayer(ret.toURL());
						
        } catch (NoPlayerException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
     }

     player.start();
			
   }
			
}
 
Hi,

also die oben genannte Fehlermeldung kam selbst bei meinem Code als ich ein einzelnes File aufrufen wollte, genau der gleiche Code geht aber wenn ichs wie oben über ein Verzeichnis mach. Bin bisher daraus noch nicht schlau geworden.

grüße
 
Es ist doch so das das JMF von Sun aus lizenzrechtlichen Gründen gar kein MP3 mehr unterstützt. Oder irre ich mich da.
Jedenfalls habe ich bei meinem MP3 Player eine Bibliothek von JavaZOOM benutzt. Mag sein das es auch noch andere gibt.
 
@Heady Ich habs jetzt mal mit
Code:
dir.listFiles()
und
Code:
fileList[1].toURL()
versucht, hatte allerdings keinen Erfolg.

@The_S API kompatibel heißt also, dass ich meinen jetzt geschriebenen Code genauso übernehmen kann, abgesehen von den Imports, die dann aus dem anderen Package ( fmj ) kommen müssen ?

Kann es wirklich an den Codecs liegen, wenn ich mp3 Dateien außerhalb Java ohne Probleme wiedergeben kann ?

PS: Ich verwende Ubuntu 9.10 NBR
 
Lexi hat gesagt.:
@Heady Ich habs jetzt mal mit
Code:
dir.listFiles()
und
Code:
fileList[1].toURL()
versucht, hatte allerdings keinen Erfolg.

Hast du auch einfach mal meinen Code übernommen und den probiert obs so bei dir läuft?
Dann konnt man evtl. ein bischen einkreisen obs an dem Part mit dem Controller liegt.

Grüße
 
Das MP3 Plugin habe ich installiert, allerdings hilft das ebenfalls nicht weiter.

Ist es nötig die jmf.jar und die mp3plugin.jar in das /lib/ext/ Verzeichnis der JRE zu kopieren und dann den "java com.sun.media.codec.audio.mp3.JavaDecoder" Befehl auszuführen ? Kann man das nicht auch anders lösen ? zb die beiden jars in den Class-Path mit einbinden ?

Ich werde das ganze gleich mal an meinem Windows Rechner testen und die Ergebnisse hier posten.

Hat jemand noch Ideen, was hier schief laufen könnte ?
 
Schief läuft, dass du JMF mit mp3 und das auch noch unter Linux verwenden willst. Das JMF mit mp3 habe ich nur unter Windows zum Laufen gebracht, und dann auch nur, wenn ich das komplette Installationspackage verwendet habe - also nix über den Classpath eingebunden habe.

Noch mal der Tipp: Versuchs mit dem fmj oder mit javazoom.
 

Zurück
Oben