java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 28.12.2009, 19:15   #1 (permalink)
Benutzer
int
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Standard Videos abspielen etc.

Hallo liebe Gemeinde,

Wie ich bereits in meinem ersten beitrag hier geschrieben habe bin ich noch ein blutiger Anfänger was JAVA angeht.

Jedenfalls gilt es nun in einem Frame ein Video abzuspielen. Es soll jedoch möglich sein je nach Gegebenheiten innerhalb von einer Reihe von Videos eines auszusuchen was dann abgespielt wird. Das heisst der benutzer soll keinerlei Einfluss auf die Wahl des Videos haben sondern nur Play/Pause/Stop (evtl. Lautstärke).

Meine Frage hierzu ist nun ob ich das nun mit JMF oder jVLC oder eventuell mit etwas völlig anderem umsetzen soll. Das Einbinden soll dabei möglichst einfach sein, aber effektiv.

Kleine Neben"frage":

Bei der Pfadauswahl zur Videodatei (da das Programm auf mehreren Plattformen funktionieren soll) erstelle ich im Arbeitsverzeichnis ein Ordner vid (/dist/vid) und hau dort die videos rein so dass im Listing die Pfadangabe der Videos etwa so aussieht: System.getProperties("user.dir") + "/" + dateiname1;

Was mich daran wieder stutzig macht ist das "/" da es ja bei Windows ein \ ist...

Gibt sicherlich eine bessere Möglichkeit?!


Vielen Dank

Grüsse
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 28.12.2009, 19:50   #2 (permalink)
Stammbenutzer
Floppy Disc
 
Benutzerbild von Guybrush Threepwood
 
Registriert seit: 19.05.2009
Fachbeiträge: 769
Abgegebene Danke: 52
Erhielt 87 Danke für 70 Beiträge
zur Frage mit dem Dateipfad: Nimm lieber File.Separator statt "/". Da wird dann das richtige Zeichen eingesetzt. Zum Mediaplayer kann ich Dir leider keinen endgültigen Tipp geben. Es gibt mehrere Projekte, aber was jetzt am Besten ist - keine Ahnung.
Guybrush Threepwood ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
erxx (02.01.2010)
Alt 28.12.2009, 21:55   #3 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von faetzminator
 
Registriert seit: 05.01.2007
Fachbeiträge: 5.038
Abgegebene Danke: 61
Erhielt 560 Danke für 541 Beiträge
Hier noch eine Anmerkung zu Guybrush Threepwood's Post, das wird dir in dem Zusammenhang weiterhelfen: System (Java Platform SE 6)
__________________
Ich bin keine Signatur, ich headbang hier nur!
faetzminator ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.12.2009, 18:02   #4 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Danke euch für die Antworten. Das hat mir bereits etwas weitergeholfen.

Hat vielleicht jemand ein konkretes Beispiel um ein Video in einem Frame abzuspielen ?
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 02.01.2010, 17:35   #5 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Ja, nimm JMC, DAs sind die Java Media Classes...

Ist zur Zeit die beste Lösung fürs Abspielen bei Java. Ist noch in einem inoffiziellen Stadium, aber kommt mit JDK 7 offiziell raus.

Wie du daran kommst, ist hier beschrieben:

(Ist aus einem anderen Forum kopiert, deshalb Englisch)

Hi,
thanks for the replies Smiley

I think it would be the best to write a small tutorial about JMC. The rest (Drawing a BufferedImage to ImageGraphics)
is nothing special.

Because JMC is officially not part of the jdk, there is no documentation about these classes. I read a lot about JMC and finally i was able to create a simple MediaPlayer.

1. At first you'll need the JMC files. The files consist of a jmc.jar file, which is used for every OS and a few dynamic library files. (On windows they are called *.dll)

How can i get these files ?

Download and install JavaFX SDK 1.2. After installation switch to the install folder and enter the directory "lib/desktop".

Now you will see a lot of files. You need the jmc.jar file and the particular dll files (On mac and linux these files have another extension)

The names of the files: jmc.dll, msvcp71.dll, msvcr71.dll

Now you have everything to create a very fast media application. If your java application runs on Windows, the DirectShow codecs are used, on Mac the Core library and on Linux the GStreamer library... You do not have to care about compiling new codecs... I think the library will be released offcially in JDK 7!

To use the classes in your java application you have to add the files to your buildpath.



How can i create a simple media application ?

It's easier than you think! The following code shows a simple implementation of a MediaPlayer:

Code:

public class MediaPlayer implements VideoRendererListener {

private MediaProvider prov; //This is the most important class!

private VideoRenderControl renderer; //It's a interface to control the rendering

private Graphics2D g2;

public MediaPlayer(File path, Graphics2D g2) {
this.g2 = g2;
prov = new MediaProvider(path.toURI());
renderer = prov.getControl(VideoRenderControl.class);
renderer.addVideoRendererListener(this);
}

@Override
public void videoFrameUpdated(VideoRendererEvent arg0) {
if(g2 != null)
renderer.paintVideoFrame(g2, new Rectangle(0, renderer.getFrameSize().height,
getWidth(), getHeight()));
}
}


It could be happen that the MediaProvider says that the media file is invalid... Check your path! Empty spaces are restricted!

Now you can draw a video on a Graphics2D object! So you are ready! To access the track control or sound control, you can easily use prov.getControl(VideoRenderControl.class); You must replace VideoRenderControl in this case with the control type you need. The package com.sun.media.jmc.control contains all control interfaces...

Ok, i hope i could help to intergrate the new Java Media Classes! They are very powerful and should be used instead of JMF for simple playback!!
Chris





Das sollte dir helfen...

Gruß,

Chris
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
erxx (02.01.2010)
Alt 02.01.2010, 20:41   #6 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Danke erstmal für deine Antwort. Jedoch habe ich in der Zeile ein Problem:

renderer.paintVideoFrame(g2, new Rectangle(0, renderer.getFrameSize().height,
getWidth(), getHeight()));


will er vom obenstehenden Code Beispiel nicht annehmen.

internal error, cannot instantiate Rectangle(int,int,int,int) at java.awt.Rectangle to ()


Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
10
11
12
13
14
15
16
17
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package audiovideo;
 
import com.sun.media.jmc.MediaProvider;
import com.sun.media.jmc.control.VideoRenderControl;
import com.sun.media.jmc.event.VideoRendererEvent;
import com.sun.media.jmc.event.VideoRendererListener;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.File;
 
public class MediaPlayer implements VideoRendererListener {
 
private MediaProvider prov; //This is the most important class!
 
private VideoRenderControl renderer; //It's a interface to control the rendering
 
private Graphics2D g2;
 
public void MediaPlayer(File path, Graphics2D g2) {
    this.g2 = g2;
    prov = new MediaProvider(path.toURI());
    renderer = prov.getControl(VideoRenderControl.class);
    renderer.addVideoRendererListener(this);
}
 
@Override
public void videoFrameUpdated(VideoRendererEvent arg0) {
    if(g2 != null)
        renderer.paintVideoFrame(g2, new Rectangle(0, renderer.getFrameSize().height,
getWidth(), getHeight()));
}
}
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 02.01.2010, 21:53   #7 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Upps, mein Fehler!

getHeight() und getWidth gibt es ja garnicht in dieser Klasse!
Musst sie ersetzen durch JFrame oder JPanel.getWidth/getHeight

Nimm am besten folgenden Codeabschnitt, damit gewährleitest du, dass das Video korret skaliert wird:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        JPanel panel;
        Graphics2D ig = (Graphics2D)panel.getGraphics(); //Das musst du iwo anders aufrufen ;)
 
    @Override
    public void videoFrameUpdated(VideoRendererEvent arg0) {
        float ratio = vrc.getFrameSize().height / (float)vrc.getFrameSize().width;
        
        int diff = ( panel.getHeight() - Math.round(ratio * panel.getHeight())) / 2; 
        
 
        vrc.paintVideo(ig,
                new Rectangle(0, 0, vrc.getFrameSize().width, vrc.getFrameSize().height)
                ,               
                new Rectangle(0, diff, panel.getWidth(), Math.round(ratio * panel.getHeight())));
    }
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.01.2010, 13:37   #8 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Ich befürchte dass meine java Kenntnisse noch nicht ausreichen um das Komplett nachzuvollziehen.
Jedenfalls wird nun das vrc nicht erkannt.


ich habe auch diesen code gefunden
jedenfalls erkennt er dort das JMediaPlayer nicht,

import com.sun.media.jmc.JMediaPlayer macht da Probleme da das JMediaPlayer in dem package nicht existiert bei mir.


01.package test;
02.
03.import java.io.File;
04.
05.import javax.swing.JFrame;
06.
07.import com.sun.media.jmc.JMediaPlayer;
08.
09.public class TestJMC {
10. public static void main(String[] args) throws Exception {
11. JFrame frame = new JFrame("Testing JMC"); {
12. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13. frame.setSize(800, 600);
14.
15. JMediaPlayer player = new JMediaPlayer(new File("trailer_1080p.mov").toURI()); {
16. frame.add(player);
17. }
18.
19. frame.setVisible(true);
20. }
21. }
22.}

Geändert von erxx (03.01.2010 um 13:40 Uhr)
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.01.2010, 16:20   #9 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Hi, sry... Mann, ich mach aber auch doofe FEhler in der Eile

Dein Code kann nicht klappen. Der ist für JMC1.1 ausgelegt.. (JavaFX 1.1)

Einfach vrc durhc arg0 ersetzen. Tut mir Leid. Hätte ich sehen müssen....
vrc ist das Event!

Gruß,
Chris
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.01.2010, 21:21   #10 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Danke für deine Antworten

arg0.paintVideo existiert jedoch auch nicht :/
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 01:45   #11 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Ok, jetzt weiß ichs wieder:

vrc ist in der Tat nicht der Parameter... vrc ist ein VideoRenderControl...
So kommst du dran: (Einfach )

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
        //Extract the render control
        VideoRenderControl vrc = prov.getControl(VideoRenderControl.class); //prov ist dein Media Provider!!
        vrc.addVideoRendererListener(this); //"This" ist auf die eigene Instanz der Klasse bezogen, die den "VideoRendererListener" implementiert!

In deinem Code weiter oben, wo nur getHeight und getWidth nicht erkannt wurde... Da war das schon richtig umbenannt!
Da hies es "renderer" vrc gibt es in dem Code den ich dir geschickt hab dann natürlich nicht... Da musse dann "renderer" und nicht
vrc nehmen ...
Nun sollte es gehen. vrc ist ein VideoRenderControl. Damit kann man zeichnen. arg0 braucht man garnicht. Ist schon ne Weile her gewesen.

Gruß,

Chris

PS:
Weil ich dir hier nur Fragmente gebe, nochmal zum Schluss einen vollständigen Player:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package audiovideo;
 
 
import com.sun.media.jmc.MediaProvider;
import com.sun.media.jmc.control.VideoRenderControl;
import com.sun.media.jmc.event.VideoRendererEvent;
import com.sun.media.jmc.event.VideoRendererListener;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.io.File;
 
 
 
public class MediaPlayer implements VideoRendererListener {
 
private MediaProvider prov; //This is the most important class!
 
private VideoRenderControl renderer; //It's a interface to control the rendering
 
private Graphics2D ig;
 
private JPanel panel;
 
public void MediaPlayer(File path, JPanel panel) {
    ig = panel.getGraphics();
    this.panel = panel;
    prov = new MediaProvider(path.toURI());
    renderer = prov.getControl(VideoRenderControl.class);
    renderer.addVideoRendererListener(this);
}
 
@Override
public void videoFrameUpdated(VideoRendererEvent arg0) {
        float ratio = renderer.getFrameSize().height / (float)renderer.getFrameSize().width;
        
        int diff = ( panel.getHeight() - Math.round(ratio * panel.getHeight())) / 2; 
        
 
        renderer.paintVideo(ig,
                new Rectangle(0, 0, renderer.getFrameSize().width, renderer.getFrameSize().height)
                ,               
                new Rectangle(0, diff, panel.getWidth(), Math.round(ratio * panel.getHeight())));
 
}

SO!, Jetzt sollte es aber klappen. Lass dich nicht entmutigen, es macht Sinn sich diese Lib jetzt shconmal anzueignen.
Bald ist sie Teil vom JDK

Jetzt aber gut nacht

Geändert von Kr0e (04.01.2010 um 01:59 Uhr)
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
erxx (04.01.2010)
Alt 04.01.2010, 06:30   #12 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Herzlichen Dank,

Ich musste jedoch noch ein paar kleinere änderungen vornehmen bei den imports sowie in Zeile 32 und 52-54 damit netbeans nicht meckert, ist das noch so okay ?

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
46
47
48
49
50
51
52
53
54
55
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package audiovideo;
 
import com.sun.media.jmc.MediaProvider;
import com.sun.media.jmc.control.VideoRenderControl;
import com.sun.media.jmc.event.VideoRendererEvent;
import com.sun.media.jmc.event.VideoRendererListener;
import java.awt.Graphics2D;
 
import java.awt.Rectangle;
import java.io.File;
import javax.swing.JPanel;
 
public class MediaPlayer implements VideoRendererListener {
 
private MediaProvider prov; //This is the most important class!
 
private VideoRenderControl renderer; //It's a interface to control the rendering
 
private Graphics2D ig;
 
private JPanel panel;
 
public void MediaPlayer(File path, JPanel panel) {
    ig = (Graphics2D) panel.getGraphics();
    this.panel = panel;
    prov = new MediaProvider(path.toURI());
    renderer = prov.getControl(VideoRenderControl.class);
    renderer.addVideoRendererListener(this);
}
 
@Override
public void videoFrameUpdated(VideoRendererEvent arg0) {
        float ratio = renderer.getFrameSize().height / (float)renderer.getFrameSize().width;
 
        int diff = ( panel.getHeight() - Math.round(ratio * panel.getHeight())) / 2;
 
        renderer.paintVideo(ig,
                new Rectangle(0, 0, renderer.getFrameSize().width, renderer.getFrameSize().height)
                ,
                new Rectangle(0, diff, panel.getWidth(), Math.round(ratio * panel.getHeight())));
 
}
    public static void main(String[] args) {
 
    }
}
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 12:31   #13 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Ist in Ordnung so! Ich habe die Zusammenstellung jetzt nicht mehr mit NetBeans gemacht.. Haben sich wohl ein paar Fehler eingeschlichen... Also es funktioniert ?
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 13:08   #14 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Lässt sich kompilieren, jedoch habe ich grad keine Ahnung wie ich das richtig aufrufe.

Bisher habe ich in meinem Projekt immer so gearbeitet dass ich Funktionen über Class.Funktion(Parameter...) aufgerufen habe dies geht aber in diesem Fall nicht.

Wie wäre denn ein konkretes Beispiel um mit dem Code ein Video abzuspielen?
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 13:46   #15 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Selbstverständlich,

du musst beim Parameter "prov" (Oben in der Class definiert) einfach .play() aufrufen! NAtürlich vorher die Klassen erstellen..

new MediaPlayer(File, JPanel) für File und JPanel musst du jetzt selbst sorgen

Btw: Der Pfad darf nicht LEerzeichen enthalten.. Das ist noch wichtig!

EDIT: Wäre das vlt. etwas für diE FAQ ?

Geändert von Kr0e (04.01.2010 um 13:48 Uhr)
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 14:04   #16 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Also das File leg ich zB in ner anderen Klasse fest
Java Code: Quelltext in neuem Fenster öffnen
1
File f = new File(System.getProperty("user.dir") + File.separator + "test.avi");
Genau so wie das Panel was ich per Drag an Drop in die Form schmeiße.


Wie übergebe ich denn nun die beiden Daten an den Player?


Bzw. wie meinst du ich muss die Klassen noch erstellen ^^?

Tut mir leid aber hab nun grad noch weniger Durchblick... Für mich ist das Gebiet noch Neuland und muss mich da erstmal zurecht finden
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 14:43   #17 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Meinst du Java im allgemeinen oder was jetzt ?

Also wie du die übergibst bzw erstellst...

Da du offensichtlich mit dem GUI-Builder Matisse arbeitest, werde ich das dementsprechend erklären:

Mach z.b. noch einen Button, Doppelclick druff, dann sollte sich iwas "onButtonClicked" mäßiges erstellen..

Dort schreibst du dann z.b. rein :

MediaPlayer m = new MediaPlayer(f, jPanel1);

Den Namen vom Panel hab ich jetzt geraten, der sollte aber stimmen sofern es das einzige Panel bei deinem Programm ist, ansonsten halt jPanel2 usw.. Musse halt mal schauen wie das heißt.. "f" ist ja das File das du erstellt hast...

Da du nun auch noch das Video starten willst, musst du in den Konstruktor vom MediaPlayer noch eine letzte Zeile einfügen.

public void MediaPlayer(File path, JPanel panel) {
ig = (Graphics2D) panel.getGraphics();
this.panel = panel;
prov = new MediaProvider(path.toURI());
renderer = prov.getControl(VideoRenderControl.class);
renderer.addVideoRendererListener(this);

//WICHTIG
prov.play(); //Das startet nun das Video
}

Ich weiß garnciht, ob der Konstruktor ne Exception schmeißt, ich meine aber nicht.

Gruß,
Chris

PS: Dein Pfad könnte unter Umständen probleme geben... "user.dir" hat evt. Leerzeichen... Ich denke da grad an WIndows
"C:/Dokumente und Einstellngen/usw"

Fürn Test, kopier dein Video einfach nach C:/test.avi und dann dementsprechend : new File ("C:/test.avi") ...
Achja, ist nich schlimm, dass das Neuland ist, jeder fängt mal klein an. Aber vlt. brauchst du noch ein paar basics ?!
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 14:57   #18 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Vielen Dank werde ich gleich mal ausprobieren.

Naja meine Kenntnisse reichen immerhin schonmal aus um ein Funktionstüchtiges Lernprogramm (Brüche) zu erstellen welches oft gemachte Fehler beim Schüler ausfindig macht. Ist mit Sicherheit schonmal etwas awer die Klassen usw machen mir noch einige Schwierigkeiten da ich gerade aus der Delphi Welt komme.

Edit:

also in meiner Klasse runIt habe ich nun

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        File f = new File(System.getProperty("user.dir") + File.separator + "test.avi");
        MediaPlayer m = new MediaPlayer(f, jPanel1);
    }

Wobei mir das zweite MediaPlayer bei
Java Code: Quelltext in neuem Fenster öffnen
1
MediaPlayer m = new MediaPlayer(f, jPanel1);
unterstrichen wird.
Code:
Cannot Find Symbol 
Symbol: constructor MediaPlayer(java.io.File,javax.swing.JPanel)
location: class audiovideo.MediaPlayer


Hier meine Form mit meinem Panel:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
/*
 * Video.java
 *
 * Created on 04.01.2010, 16:08:10
 */
 
package audiovideo;
 
import java.io.File;
 
/**
 *
 * @author erxx
 */
public class Video extends javax.swing.JFrame {
 
    /** Creates new form Video */
    public Video() {
        initComponents();
    }
 
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
 
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 457, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 334, Short.MAX_VALUE)
        );
 
        jButton1.setText("jButton1");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(20, 20, 20)
                        .addComponent(jButton1)))
                .addContainerGap())
        );
 
        pack();
    }// </editor-fold>
 
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        File f = new File("F:\test.avi");
        //new File(System.getProperty("user.dir") + File.separator + "test.avi");
        MediaPlayer m = new MediaPlayer(f, jPanel1);
    }
 
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Video().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
 
}


und hier die MediaPlayer.java

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
52
53
54
55
56
57
58
59
60
61
62
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package audiovideo;
 
import com.sun.media.jmc.MediaProvider;
import com.sun.media.jmc.control.VideoRenderControl;
import com.sun.media.jmc.event.VideoRendererEvent;
import com.sun.media.jmc.event.VideoRendererListener;
import java.awt.Graphics2D;
 
import java.awt.Rectangle;
import java.io.File;
import javax.swing.JPanel;
 
public class MediaPlayer implements VideoRendererListener {
 
private MediaProvider prov; //This is the most important class!
 
private VideoRenderControl renderer; //It's a interface to control the rendering
 
private Graphics2D ig;
 
private JPanel panel;
 
public void MediaPlayer(File path, JPanel panel) {
//    File f = new File(System.getProperty("user.dir") + File.separator + "test.avi");
//    path = f;
//    panel = runIt.jPanel1;
    ig = (Graphics2D) panel.getGraphics();
    this.panel = panel;
    prov = new MediaProvider(path.toURI());
    renderer = prov.getControl(VideoRenderControl.class);
    renderer.addVideoRendererListener(this);
 
    prov.play();
}
 
@Override
public void videoFrameUpdated(VideoRendererEvent arg0) {
        float ratio = renderer.getFrameSize().height / (float)renderer.getFrameSize().width;
 
        int diff = ( panel.getHeight() - Math.round(ratio * panel.getHeight())) / 2;
 
        renderer.paintVideo(ig,
                new Rectangle(0, 0, renderer.getFrameSize().width, renderer.getFrameSize().height)
                ,
                new Rectangle(0, diff, panel.getWidth(), Math.round(ratio * panel.getHeight())));
 
}
    public static void main(String[] args) {
 
    }
 
}

Geändert von erxx (04.01.2010 um 15:12 Uhr)
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 15:26   #19 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 17.04.2008
Fachbeiträge: 1.107
Abgegebene Danke: 67
Erhielt 80 Danke für 75 Beiträge
Der "Konstruktor" ist kein Konstruktor...

public VOID MediaPlayer(File path, JPanel panel) { //Mach das void raus. Dann sollte es klappen, In Java haben Konstruktoren keinen Rückgabewert!
// File f = new File(System.getProperty("user.dir") + File.separator + "test.avi");
// path = f;
// panel = runIt.jPanel1;
ig = (Graphics2D) panel.getGraphics();
this.panel = panel;
prov = new MediaProvider(path.toURI());
renderer = prov.getControl(VideoRenderControl.class);
renderer.addVideoRendererListener(this);

prov.play();
}


Wie gesagt, ich habe den Code ohne Editor gemacht... Da können sich kleine Fehler einschleichen
Kr0e ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.01.2010, 16:23   #20 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 19.12.2009
Fachbeiträge: 45
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Ach die Fehler sind kein Problem

Bin ja froh dass mir überhaupt einer weiter hilft!

Jedenfalls schreibt er nun da ich das void weggemacht habe, folgendes:

com.sun.media.jmcimpl.plugins.javapeer.MediaPlayer is abstract; cannot be instantiated


Edit:


jetzt funzt es jedoch erhalte ich beim ausführen des Buttons:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: com.sun.media.jmcimpl.plugins.directshow.DShowEngine.ndsInit()Z
        at com.sun.media.jmcimpl.plugins.directshow.DShowEngine.ndsInit(Native Method)
        at com.sun.media.jmcimpl.plugins.directshow.DShowEngine.nInit(DShowEngine.java:234)
        at com.sun.media.jmcimpl.plugins.directshow.DShowProvider$1.run(DShowProvider.java:206)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.media.jmcimpl.plugins.directshow.DShowProvider.init(DShowProvider.java:182)
        at com.sun.media.jmcimpl.plugins.directshow.DShowProvider.canPlay(DShowProvider.java:247)
        at com.sun.media.jmcimpl.PeerManager.getPlayerPeer(PeerManager.java:78)
        at com.sun.media.jmc.MediaProvider.setSource(MediaProvider.java:561)
        at com.sun.media.jmc.MediaProvider.<init>(MediaProvider.java:169)
        at audiovideo.MediaPlayer.<init>(MediaPlayer.java:38)
        at audiovideo.Video.jButton1MouseClicked(Video.java:90)
        at audiovideo.Video.access$000(Video.java:20)
        at audiovideo.Video$1.mouseClicked(Video.java:55)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6266)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Geändert von erxx (04.01.2010 um 17:48 Uhr)
erxx ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JMF - API Videos abspielen radiac Allgemeine Java-Themen 1 23.10.2009 20:32
Mit JAVA Videos aufnehmen und abspielen. Xams Allgemeine Java-Themen 3 03.10.2009 19:34
JMF Exception beim abspielen von Videos muluhumu Allgemeine Java-Themen 0 17.11.2008 13:51
Kann Java Videos abspielen? bienchen Java Basics - Anfänger-Themen 2 26.10.2007 23:27
videos abspielen blubbbla Spiele- und Multimedia-Programmierung 2 17.08.2007 10:10


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de