2011-03-29 3 views
0

작은 응용 프로그램을 만들려고했는데 hdd에서 비디오를 재생하려고했습니다. 나는 지금 3 일 동안 노력했지만 어떻게해야하는지 모르겠습니다. 현재의 javafx (jmc) 릴리스에서이를 수행하기위한 좋은 예제 또는 예제가 없습니다. javafx에서 jmc 클래스를 사용하는 스윙 응용 프로그램을 만들고 싶습니다. 나는 이것을 시도했다 :JMC/JavaFX - 비디오 재생

... 
MediaProvider mp; 
String mediaURI = "G:\\teste2.avi"; 
JFrame jf = new JFrame(); 

JPanel j = new JPanel(); 
j.setLayout(new BorderLayout()); 

    mp = new MediaProvider(); 
    try { 
     mp.setSource(new URL("file://" + mediaURI).toURI()); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    }catch (URISyntaxException ex2) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex2); 
    } 

mp.setRepeating(false); 
j.setSize(800, 600); 
j.setVisible(true); 
jf.add(j); 
jf.setSize(800, 600); 
j.setBackground(Color.red); 
jf.setVisible(true); 
mp.play(); 
... 

그러나 지금 : "mp"를 jpanel에 추가하는 방법? "j.add (mp);" 작동하지 않습니다 (jpanel은 color.red로 인해 빨간색으로 만 표시되지만 비디오는 표시되지 않음). 그것을 할 수있는 쉬운 방법이 있습니까? 고맙습니다.

또한 두 번째 클래스를 시도했다 :

public class Player 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 Player(File path, JPanel panel) { 
    ig = (Graphics2D) panel.getGraphics(); 
    this.panel = panel; 
    prov = new MediaProvider(path.toURI()); 
    renderer = prov.getControl(VideoRenderControl.class); 
    renderer.addVideoRendererListener(this); 
    prov.play(); 
    System.out.println(prov.getDuration()); 

} 

@Override 
public void videoFrameUpdated(VideoRendererEvent arg0) { 
     float ratio = renderer.getFrameHeight()/(float)renderer.getFrameWidth(); 

     int diff = (panel.getHeight() - Math.round(ratio * panel.getHeight()))/2; 

     System.out.println(renderer.getFrameHeight()); 


     /* renderer.paintVideo(ig, 
       new Rectangle(0, 0, renderer.getFrameWidth(), renderer.getFrameHeight()) 
       , 
       new Rectangle(0, diff, panel.getWidth(), Math.round(ratio * panel.getHeight()))); 
*/ 
} 

} 

내 주요 클래스 인 JPanel이 추가 :

Player p = new Player(); 
p.Player(f,j); 

하지만 "renderer.paintVideo()"방법 ISN ' t 사용할 수 있습니다 :(그래서 또한이 작동하지 않습니다 (어쩌면 jmc의 이전 버전으로, 내가 인터넷에서 이것을 발견했기 때문에)

누구와 어떻게 스윙 응용 프로그램에 로컬 비디오를 추가 할 수 있습니까?javafx, jmc의 현재 릴리스?

답변