JMF - Abspielen eines mpeg1-Videos

Status
Nicht offen für weitere Antworten.

dan kirpan

Mitglied
Hi, nach ca 2 Arbeitstagen erfolgloser Suche habe ich es geschafft...
Code:
import java.awt.*;
import java.applet.*;
import java.io.IOException;

import javax.media.*;
public class myplayer {
	public static void main(String[] args) {
		Player player = null;
		MediaLocator mrl = null;
	    String mediaFile = "file:c:/java/Video-TEST/bin/stranglehold_2006_usa_NEW.mpg";
		mrl = new MediaLocator(mediaFile);
		try {
			player = Manager.createPlayer(mrl);
		} catch (NoPlayerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		player.start();
	}

}
Dieses schöne Script, welches ich mir aus vielen anderen zusammengebaut habe (100 % Handarbeit + Eclipse) funktioniert wie folgt, wenn man es über die Windows cmd startet: es bringt den Sound von stranglehold_2006_usa_NEW.mpg, aber kein Bild... ist ja auch irgendwie logisch, ist ja über console gestartet.

Und jetzt kommt der Hammer, warum ich das hier in den Anfängerbereich poste, obwohl jmf ja etwas fortgeschritten sein sollte: Wie schaffe ich es, dass sich a) das Script nach Ende des Videos beendet und b) sich das Video abspielt. Da ich ein Voll-Noob in Java bin, bitte einfach erklären und mir keinen Quellcode hinwerfen, die hab ich mir heut schon zu 1000enden durchgelesen und kaum was gefunden (ausser das da oben).

Das Ultimativ-Ziel ist ein Java-Videoplayer der ein Video brav abspielt. Mehr nicht ^^

Danke an alle, die sich die Mühe geben mir zu helfen!

Grüße

Dan Kirpan
 
Anzeigen des Videos (eher als Minimallösung zu verstehen):
Code:
player = Manager.createRealizedPlayer(mrl);
Frame frm = new Frame();
frm.setBounds( 100, 100, 400, 300);
frm.add( player.getVisualComponent());
frm.setVisible( true);
 
Danke!!! Jetzt weiß ich wenigstens, wie ich weiter machen muss! Ich versuchs einfach ein paar mal, und melde mich, wenn es geklappt hat und wenn nicht natürlich auch ^^
 
Code:
import java.awt.*;
import java.io.IOException;
import javax.swing.JFrame;
import javax.media.*;
public class myplayer {
	public static void main(String[] args) {
		Player player = null;
		MediaLocator mrl = null;
	    String mediaFile = "file:c:/java/Video-TEST/bin/stranglehold_2006_usa_NEW.mpg";
		mrl = new MediaLocator(mediaFile);
		try {
			player = Manager.createRealizedPlayer(mrl);
		} catch (NoPlayerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (CannotRealizeException e) {
			e.printStackTrace();
		}
		JFrame frm = new JFrame("MyPlayer");
		frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frm.setExtendedState(JFrame.MAXIMIZED_BOTH);
		frm.add(player.getVisualComponent());
		frm.setVisible(true);
		player.start();
	}
}
JUHU!!! Es funktioniert! Ich bin allerdings von Frame auf JFrame umgestiegen, um die Methode setDefaultCloseOperation besitzen zu können. Wie geht das mit dem Eventlistener? Ich habs versucht aus der API zu lesen, aber mein Eclipse bringt mir da nur Fehlermeldungen.
 
Suchst Du das?
Code:
player = Manager.createRealizedPlayer(mrl);
player.addControllerListener( 
	new ControllerListener() {
		public void controllerUpdate( ControllerEvent evt) {
			if ( evt instanceof EndOfMediaEvent) {
				System.exit( 0);
			}
		}
	});
 
jup, ich hab soetwas in der Richtung gesucht, aber nichts funktionierendes gefunden... atm bin ich dabei, das selbe auf ein Applet zu schreiben, aber hab wieder mal Probleme mit der Ausgabe ^^

Wo ist eigentlich der wichtige Unterschied zwischen JFrame und Frame?
 
sry, dass sagt mir nicht viel. Dass ich "import javax.swing.JFrame;" verwende sagte mir bereits, dass es Swing ist... aber wo ist der Unterschied zwischen Swing und AWT?
 
Code:
import java.awt.Component;
import java.awt.Dimension;
import java.io.IOException;
import javax.swing.JFrame;
import javax.media.*;
public class myplayer implements ControllerListener {
	static Player player = null;
	static MediaLocator mrl = null;
	static Component visualComponent = null;
	static String mediaFile = "file:c:/java/Video-TEST/bin/stranglehold_2006_usa_NEW.mpg";
	public static void main(String[] args)  {
		mrl = new MediaLocator(mediaFile);
		try {
			player = Manager.createRealizedPlayer(mrl);
		} catch (NoPlayerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (CannotRealizeException e) {
			e.printStackTrace();
		}
		JFrame frm = new JFrame("MyPlayer sogar nach meiner Meinung!!!");
		frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frm.setExtendedState(JFrame.MAXIMIZED_BOTH);
		visualComponent = player.getVisualComponent();
		frm.add(visualComponent);
		frm.setVisible(true);
		player.start();
	}
    public synchronized void controllerUpdate(ControllerEvent event) {
    	if (event instanceof EndOfMediaEvent) {
    	    // We've reached the end of the media; rewind and
    	    // start over
    	    player.setMediaTime(new Time(0));
    	    player.start();
    	} else if (event instanceof ControllerErrorEvent) {
    	    // Tell TypicalPlayerApplet.start() to call it a day
    	    player = null;
    	    Fatal(((ControllerErrorEvent)event).getMessage());
        }
    }
    void Fatal (String s) {
    	System.err.println("FATAL ERROR: " + s);
    	throw new Error(s);
    }
}

Mein Aktueller Quelltext, für alle, die das selbe Problem haben und nichts finden können, wie ich vorvorgestern...

Ist übrigens von diesem http://java.sun.com/products/java-media/jmf/2.1.1/samples/samples/SimplePlayerApplet.java abgeleitet. Jetzt werde ich noch ein paar Änderungen machen. Wie kann ich diesen Code am besten in ein Applet machen?
 
schieb!

selbe frage: kann man so was in ein applet packen, bzw ist es möglcih ein java applet zu schreibne, das windows media, quicktime und real media datein abspielen kann?
 
Zunächst mal: Dein Anfangsproblem hätte mit einem Blick in die FAQ auch ziemlich schnell gelöst werden können...

In einem Applet kannst du das grundsätzlich genauso machen. Die Datei musst du eben als URL angeben.

Probleme:
- Der User muss noch das JMF installieren
- Das Applet muss (glaube ich) signiert sein
 
gude!
ich hab das auch mal probiert... aber bei mir gibts nen fehler und ich weiß nit woran es liegt! vieleicht kann mir hier jemand weiter helfen.

das is mein quelltext:
Code:
package root.GUI;

import java.awt.Toolkit;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.media.*;

import root.ErkFrame;

public class PlayerMaske extends JFrame {

	private Player player = null;



	public PlayerMaske() {
 initPlayer("affe.mpg");
	}

	private void initPlayer(String pfad) {

		try {
			player =Manager.createRealizedPlayer(new MediaLocator(pfad)) ;
		} catch (NoPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 catch (CannotRealizeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	player.start();
	}

}

.... und das die exaption:

javax.media.NoPlayerException: Cannot find a Player for :affe.mpeg
at javax.media.Manager.createPlayerForContent(Manager.java:1412)
at javax.media.Manager.createPlayer(Manager.java:417)
at javax.media.Manager.createRealizedPlayer(Manager.java:553)
at root.GUI.PlayerMaske.initPlayer(PlayerMaske.java:27)
at root.Start.main(Start.java:12)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben