August 2nd, 2008
드디어 등장한 Java Media Component

한국시간으로 어제 8월 1일, 미국시간 7월 31에, 다소 지연 되었지만 JavaFX SDK의 prerelease가 출시되었다.
원래 June 2008에 나오기로 했는데 한달은 늦춰진다 해도 August가 되기 전에 급히 내 놓은듯 하다.

javafx sdk download

그런데 JavaFX 자체도 좋지만 SDK에 동봉된 JMC(Java Media Component)에 관심이 있다.
JavaFX가 사용하지만 JavaFX에 종속관계는 없다. jmc.jar만 찾으면 된다.
jmc.jar-mac
jmc.jar-win

사용하는 입장에선 JMediaPlayer와 JMediaPane만 알면 된다. 둘 다 JComponent이다.
JMediaPlayer jmediapane
JMediaPlayer의 center에 JMediaPane이 붙고 South에 제어판이 붙어있는 형태다.
JMediaPlayer

맥에서 동영상을 돌려봐야겠다. 소스는 원초적이다.

JAVA:
  1. package net.hanjava.jmc;
  2.  
  3. import java.io.File;
  4. import javax.swing.JFrame;
  5. import com.sun.media.jmc.JMediaPlayer;
  6.  
  7. public class JMediaPaneTest {
  8.     public static final String PATH_MOVIE = "/Users/behumble/Desktop/barsandtone.flv";
  9.  
  10.     public static void main(String[] args) {
  11.         JFrame frame = new JFrame("JMediaPane Test - http://hanjava.net");
  12.         File movieFile = new File( PATH_MOVIE );
  13.         JMediaPlayer mPlayer = new JMediaPlayer( movieFile.toURI() );
  14.         frame.add( mPlayer );
  15.         frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  16.         frame.setSize(800, 480);
  17.         frame.setVisible(true);
  18.     }
  19. }

실행결과는 이뭐병.
jmc mac

trace에서 볼 수 있듯이 내부적으로 플랫폼에 따라 다른 peer를 만든다.
안되는 원인을 조금 따라가 보다가 그만 털썩!

metainf

해석하자면 JAR service provider 기능을 정의한 파일을 열어보니 '이 JAR에는 윈도우용 구현체만 들어있소'라고 써있다.
급하다 보니 맥 배포판에 윈도우용 jar파일을 실수로 넣은듯 하다.
그래 맥은 포기하고 윈도우에서 실행해 보았다.

후뤼준부뤡3로 테스트.

VMWare상의 윈도우에서 화면 캡춰하면서 재생하니 엄청 버벅이는데 막상 해 보면 성능은 좋은편(근데 컨트롤 디자인이 저게 뭐냐..T_T).
lightweight component와 섞여서도 잘 나온다.
mix

JAVA:
  1. public class JMediaPlayerTest {
  2.     public static final String PATH_MOVIE = "C:/Share/prison3.avi";
  3.    
  4.     public static void main(String[] args) throws Exception {
  5.         JFrame frame = new JFrame("JMediaPane Test - http://hanjava.net");
  6.         File movieFile = new File(PATH_MOVIE);
  7.         JMediaPlayer mPlayer = new JMediaPlayer(movieFile.toURI());
  8.         frame.add(mPlayer);
  9.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  10.         Component gp = frame.getGlassPane();
  11.         gp.setVisible(true);
  12.         JLabel label = new JLabel("Hello JMC");
  13.         label.setFont(label.getFont().deriveFont(30f));
  14.         label.setForeground( Color.LIGHT_GRAY );
  15.         ((Container) gp).add(label);
  16.         frame.setSize(800, 480);
  17.         frame.setVisible(true);
  18.     }
  19. }