# Videofile einlesen



## WinterDragon (26. Apr 2008)

Hallo an alle!

Ich arbeite gerade an meinem ersten Projekt mit JavaME, wofür ich gerne ein Video einlesen würde. Ich habe mir das Beispielvideo von Sun runtergeladen(http://java.sun.com/products/java-media/mma/media/test-mpeg.mpg) und es in den "res" Ordner von Eclipse kopiert.

Nun hab ich folgende Frage: Wie kann ich das File aus dem Ordner einlesen? 
Also mittels 
	
	
	
	





```
player = Manager.createPlayer("file://test-mpeg.mpg");
```
funktioniert das nicht, weil er dann im Ordner j2mewtk\2.5.2\appdb\MediaControlSkin\filesystem/test-mpeg.mpg nach dem File sucht. 
Wie gesagt ich kenne mich leider damit nicht gut aus und bin über jede Hilfe sehr dankbar!!

Könnte mir bei gelegenheit dann auch gleich jemand sagen, wie das dann mit dem File aussehen würde, wenn ich dann mein fertiges Programm aufs Handy lade - also ändert sich dann irgendwie der Pfad oder wird dann eh alles was im res Ordner von Eclispe ist gepackt und mitkopiert?

Danke im Voraus für die Hilfe!

lg

WinterDragon


----------



## WinterDragon (29. Apr 2008)

Kann mir niemand irgendwie dabei helfen? Oder hab ich irgendwas unverständlich geschrieben?

lg

WinterDragon


----------



## MiDniGG (29. Apr 2008)

Musst halt dein sach etz eintragen:


```
Image title = Image.createImage(getClass().getResourceAsStream("/ordner/file"));
```


----------



## WinterDragon (30. Apr 2008)

Muss ich dann den ganzen Pfad angeben wo das File ist - also C:/USER/DOKUMENTE usw? Mich wurmt es nur, dass er sich das file nicht aus dem res  Ordner vom Eclipse einfach nimmt - der Code läuft dann doch auf dem Handy nicht, wenn ich einen Pfad vom pc eingeb.

Vielleicht hab ich das auch bisschen falsch erklärt - das Videofile was ich einlesen will, soll immer vorhanden sein - also wird auch bei der installation dann mitgeliefert, da es sich im ein Intro handelt - also es ist kein random File, was ich dann einlesen und dem User anzeigen will, sondern ein Intro was immer beim start der Anwendung abgespielt wird.

Steh da irgendwie auf der Leitung.

lg

WinterDragon


----------



## MiDniGG (30. Apr 2008)

Natürlich ned.

Also des ganze image zeug ersetzen. Das is klar. Ich weiß nicht ob de da auf den res kommst. Aber versuch doch einfach mal mit ...getResourceAsStream("/res/FILENAME.FORMAT")...

wenn nicht mach dir einfach ein package z.B. de.name.video und haus da rein. Dann kannst über .."/de/name/video/FILENAME.FORMAT"... drauf zugreifen.

hf


----------



## WinterDragon (30. Apr 2008)

Danke für die schnelle Antwort - ich kann das erst am Abend ausprobieren - danke auf jeden Fall für die Hilfe - ich sag dann bescheid obs geklappt hat!

lg

WinterDragon


----------



## WinterDragon (19. Mai 2008)

Hallo!
Ich hab das jetzt ausprobieren können und das mit dem Einlesen funktioniert jetzt super. Danke nochmal dafür!

Ich hätte da aber noch eine Frage:
Ich habe ein Midlet was für meine Anwendung das Hauptmenü ist und von dort aus alles aufgerufen werden soll - jetzt weiß ich nicht ganz wie ich das machen kann, dass von dem Hauptmenü-midlet dann das Intro aufgerufen werden soll und nachdem das intro dann fertig ist (oder skip) dann erst dass Hauptmenü erscheinen soll. Wie kann ich dem Hauptmenü sagen, dass das Intro zu ende ist ? Ich hab mir eventuell gedacht, dass man einen Thread erstellen könnte mit dem das intro aufgerufen wird

Kann ich dann die intro Klasse als Midlet lassen oder muss ich die dann in zb Canvas oder so umwandeln damit das geht - kenn mich wie gesagt nicht so doll aus damit.

lg

WinterDragon


----------



## MiDniGG (19. Mai 2008)

Hey,

ziemlich langer Abend 

joa also en Thread wäre jetzt auch das was ich mir vorstellen könnte. 

Du weißt ja wie lange das Video läuft und dann lässt eben den Thread so lange laufen bis das Video zu Ende ist oder bis Skip gedrückt wurde.

Hm. weiß nicht ob das als MIDlet so läuft... Musst halt mal ausprobieren. Und wenns nicht geht eben ma von Canvas erben lassen... Den Command für "Skip" kannste ja da auch einfügen...

Hoffe das hilft ein bisschen. Hab mich mit Videos noch nicht so wirklich beschäftigt...


----------



## WinterDragon (19. Mai 2008)

Hi 

Gibts eine Möglichkeit das vll. dynamisch zu machen - also dass der Thread erst dann abschließt wenn das Video(von dem ich die Zeit daweil nicht weiß, weil das video noch bearbeitet wird und ich mit dem testvideo von sun noch immer arbeite) zu ende gespielt hat oder eben der skip button gedrückt wurde?

Wenn ich meine intro klasse von canvas erben lasse - wo könntest du dir vorstellen kommt dann der Code rein für das Video anzeigen und was tu ich in die paint(Graphics g) methode vor allem rein, oder soll der Code dan da rein?


Ich hab das nämlich bissl komisch gemacht denk ich mir, weil ich den Konstruktor von meine Intro klasse mal eine Form zuweise die quasi nur anzeigt, dass das video gerade geladen wird, damit der user nicht einen leeren screen sieht und halt einen skip button gibts auch noch.
Danach wird, da ja die Klasse noch ein Midlet ist, die startApp() Methode geladen, wo ich eben meinen player initalisiere usw...

Probleme über Probleme  :bahnhof:


----------



## WinterDragon (19. Mai 2008)

Okay das Aufrufen von dem hab ich jetzt doch noch hinbekommen - jetzt ist mein einziges Problem wie ich das in einen Thread packen soll, damit im Hauptmenü zuerst das intro aufgerufen wird und nachdem das fertig ist, dann erst weitergemacht wird.

lg

WinterDragon


----------



## MiDniGG (19. Mai 2008)

Ja. wie gesagt kenn mich mit Videos ned so aus. Aber steht in der API ned zufällig ne Methode die sowas sagt wie Video.isActive oder sowas?...

Du hast ja für dein Video ne extra Klasse und wenn der Thread durch ist musst eben die Menüklasse laden. Ich könnt mir des so in etwa vorstellen (Pseudo!):


```
Thread.....{...
   while(video.isActive()) {
       sleep(1000);
   }
   Menuclass();...
```


EDIT:

Vllt. hilft ja das?
http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/media/Player.html#getState()


----------



## WinterDragon (19. Mai 2008)

Ja so ähnlich wollte ich das auch machen - ich hab halt mal den Befehl 
	
	
	
	





```
thread.isAlive()
```
 hergenommen - mal sehen vielleicht reicht der auch aus dafür - ich muss jetzt mal nur rauskriegen wie man den thread dem Displayable übergeben kann - weil sound kann ich vom intro jetzt hören nur zeigt er mir das intro nicht an...

Danke aber für die Hilfe von dir - finds echt total super, dasst mir weitergeholfen hast!!

lg

WinterDragon


----------



## MiDniGG (19. Mai 2008)

So hab leider keine Video zum Testen da... Aber kannst ja mal schaun ob des so evtl. geht?!


```
public class MyPlayer extends MIDlet implements CommandListener {

	private Player player = null;
	private Form form = null;
	private Display disp = null;
	private Command skip = null;
	
	public MyPlayer()  {
		disp = Display.getDisplay(this);
		startIntro();
	}
	protected void sleep(long millis) {
		try {
			Thread.sleep(millis);
		}
		catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	private void startIntro() {
		try {
			player = Manager.createPlayer(getClass().getResourceAsStream("Pfad + Name"), "Intro");
		}
		catch(IOException ioe) {
			ioe.printStackTrace();
		}
		catch(MediaException me) {
			me.printStackTrace();
		}
		
		skip = new Command("Skip", Command.OK, 0);
		
		form = new Form("");
		form.addCommand(skip);
		form.setCommandListener(this);
		
		new Thread(new Runnable() {
			public void run() {
				while(player.getState() == Player.STARTED) {
					sleep(1000);
				}
				System.out.println("FERTIG");
//zu Startmenü wechseln
			}
		}).start();
	}
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}
	protected void pauseApp() {}
	protected void startApp() throws MIDletStateChangeException {
		disp.setCurrent(form);
	}
	public void commandAction(Command com, Displayable disa) {
//zu Startmenü wechseln
	}
}
```


----------



## WinterDragon (20. Mai 2008)

Hi!

Hey danke, dass du dir da so viel Mühe gibst - find ich echt voll nett danke!!

Sorry, aber hab den Code von dir gestern nicht mehr Testen können - ich setz mich gleich wieder dran und sag dir dann bescheid!

Danke nochmal!

lg

WinterDragon


----------



## MiDniGG (20. Mai 2008)

Jojo np. Sag bescheid ob es so annähernd funktioniert ^^


----------



## WinterDragon (20. Mai 2008)

Annähernd funktionierts - ich hab nur wieder wie vorher kein Bild aber dafür Ton.

Ich hab eine Frage aber an dich  - wieso tust du den Thread direkt in der MyPlayer Klasse erzeugen - sollt der nicht in der Hauptmenü klasse drin sein?

Ich kann dir ja mal den Code den ich hab per PM schicken wenn du den anschaun magst - aber ich will dich da auch ned zu viel damit nerven - du hast ma scho sehr viel weitergeholfen - Danke nochmal dafür!

lg

WinterDragon


----------



## MiDniGG (20. Mai 2008)

Naja. Die Hauptmenüklasse läuft meines erachtens noch nicht... Die würde ich erst nach dem Thread starten...

Ja schick mal, dann schau ich s mir mal an.

Hab hier eh ned so viel zu tun grad..


----------

