본문 바로가기
IT/Programming

JMF™(Java Media FrameWork)의 개요 및 설치

by Jany 2009. 4. 8.
반응형

JMF™(Java Media FrameWork)의 개요 및 설치

이 문서의 License는 GPL을 따릅니다.(This document follows GPL.)
○작성자 : Hops(최호필 - hops@bcline.com)
○작성일 : Aug 22, 2000.

○테스트 환경(S/W) : Window2000 Advanced Server, JDK1.3(Sun Microsystems), JMF2.1
○테스트 환경(H/W) : AMD K6-2 300Hz, 192MB RAM

※참고 사이트 :
  1. 찬미네 인터넷 보금자리(http://myhome.naver.com/kingseft/)
  2. JMF™ Guide

※편의상 경어는 생략합니다.

  JMF™ - Java Media FrameWork - 는 Java진영에서 JMF라는 것은 기존의 자바 프로그래밍에서의 가장 취약했던
멀티미디어 제어관련 API 및 SDK를 보강한 것으로서, 옛날 윈도우의 VIdeo for windows 프로그래밍 SDK와
마찬가지로, 비디오 및 오디오의 캡쳐, 저장, 전송, 스트리밍 기술등에 이용되는 멋진 기술이다.
  JMF라는 기술은 미국의 Sun과 IBM의 협력에 의해 만들어 졌고 , 이 JMF에서는 MPEG, AVI, MOV등의 비디오
기술과 더불어 H.261 H.263등의 영상회의 코덱 표준도 지원하고 , G.721 G>723 등의 오디오 코덱도 더불어 제공하고 있다.

  또한 가장 멋진 기능인 RTP : Realtime Transfer Protocol을 지원함으로서 실시간으로 동영상과 음성을 전송하고,
이러한 기능을 통해서 인터넷 멀티채팅, 화상회의, 원격 감시등에도 그 이용분야가 상당히 높다.

  한마디로 말해서 이 JMF를 통하여 자바에서는 MP3, MPEG 등의 멀티미디어들을 지원하고 있다. 따라서 원하기만 한다면,
여러분들은 이것을 이용해서 자신들만의 MP3 Player도 만들 수 있을 것이다.

  이에 이번에 JMF를 설치해 보고 간단한 프로그램을 작성해 보았다(아직까진 저두 잘 몰라서리.. 어려운건 묻지 말아주세용..).
  
1. JMF 구하기 및 설치
  JMF는 CORE부분에 들어 있지 않다. 따라서 JDK를 설치했다고 JMF를 할 수 있는 것이 아니라 Sun사에 가서 필요한 화일을
다운받아서 설치해야 한다.
  먼저 설치에 필요한 시스템 요구사항은 다음과 같다.(JMF 2.0 기준)
    ●166 MHz Pentium, 160 MHz PowerPC, or 166 MHz UltraSparc
      ●32 MB RAM or greater
    ●Optional: An appropriate sound card for audio play back, if necessary. For example, a SoundBlaster-compatible
        card for Windows machines without built-in audio support, or an Ultimedia sound card for AIX machines without
         built-in audio support.
        
자신의 컴퓨터가 위의 사항들을 만족한다면 다운받도록 하자.
     http://java.sun.com/products/java-media/jmf/index.html
그곳으로 가면 Reference Implementation으로 가면 다운받을 수 있다. Select Download Format에서 원하는 포맷을 선정하여
다운받으면 된다(참고로 난 Windows Performace Pack으로 선정하여 다운받았다).
  Install하는 좀 더 자세한 방법은 그 페이지에 보면 아주 자세히 설명을 해 놓았으니 참고하길 바란다. 단, 영어에 자신이
있다면...
  
  자, 다 다운받았다면.. 이제 설치해 보자. 윈도우상에서 설치하는 방법은 무척이나 쉽다. 기냥 화일을 다블클릭만 하면 끝이다.
설치와 동시에 클래스패스를 설정하기에 별다른 클래스패스의 설정이 필요없다. 단, 우리가 여기서 한가지 짚고 넘어가야 할 것이
있다. 자바의 특성상 클래스들을 사용하기에 클래스패스에 "."(현재 디렉토리를 의미)가 포함되어 있는지 꼭 확인하자.
  Win2000에서는 NT/9x와 다르게 환경변수가 2가지가 있다. 시스템변수와 사용자변수. JMF가 설치되면서 자동으로 설정하는 클래스
패스는 사용자변수로 잡힌다. 만일 시스템변수로 바꾸고자 한다면 내컴퓨터->등록정보->고급->환경변수에서 바꿔주면 된다.

  이제는 잘 설치가 되었는지 확인을 해 보는 단계이다.
  
      http://java.sun.com/products/java-media/jmf/2.1/jmfdiagnostics.html
  
  위의 URL로 가서 애플릿을 통하여 검증받을 수 있다. 다음은 나의 경우이다. 참고하길 바란다.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      JMF Diagnostics:

    Java 1.1 compliant browser.....Maybe
    JMF classes.....Found

    JMF Version... 2.1

    Win32 Build
    Native Libraries Found
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  만일 IE에서 에러가 발생하고 Netscape에서는 에러가 없다면 IE용 JVM을 다운받아 설치해야 한다. IE용 JVM은 위의 JMF Diagnostics
  페이지에서 다운받을 수 있다.

자... 이제는 테스트용으로 JVM을 이용한 간단한 프로그램을 하나 만들어 보도록 하자.
이 프로그램은 D:\Java\에 위치를 한다. 원하면 바꿀수도 있다. 그리고 cult.mpg라는 동영상을 Playback해 주는 프로그램이다.

####################################### Program Source #################################################
//TestJMF.java
import! java.awt.*;            // Window프로그램으로 만들기 위한 AWT class들을 Import!.
import! java.awt.event.*;    // 종료 Event를 처리하기 위하여 Import!.
import! java.net.*;            // JMF는 기본적으로 Network환경을 바탕으로 되었기 때문에 필요하다.
import! javax.media.*;        // 실질적으로 JMF관련 클래스들을 Import!.

// JMF의 기본 이벤트를 받으려면 우리가 만든 클래스가 ControllerListener 클래스를 구현상속 해야 한다.
public class TestJMF extends Frame implements ControllerListener {
    Player player;        // Media를 사용하기 위해 Media Player 선언
    
    // 생성자
    public TestJMF() {
        // Frame의 타이틀을 설정
        super("Test JMF Program");    
        
        // URL생성부분과 Player의 생성은 try~catch절로 처리해야 한다.
        try {
            // 미디어 파일의 위치를 정해준다. 원하는 화일과 경로를 지정하면 된다.
            // 경로와 화일명은 URL방식으로 적는다.
            URL fileurl = new URL("file:///d:/java/cult.mpg");
            player = Manager.createPlayer(fileurl);
            
            // 이벤트핸들러 추가
            player.addControllerListener(this);
        } catch(Exception e) {
            System.out.println("Get Exception : " + e.toString());
        }
        setLayout(new BorderLayout());
        
        // 종료이벤트 처리.
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                if (player != null) {
                // 미디어 플래이어가 생성되어 있다면 아래부분을 처리한다.
                // 종료시 실행될 부분이기에 플레이어를 종료하고 메모리할당된 것을 회수한다.
                    player.stop();
                    player.deallocate();
                    // 그리고 종료한다.
                    player.close();
                }
                System.exit(0);        // 프로그램 종료
            }
        });
        setSize(400,300);
        setVisible(true);
        
        // 플레이어 실행
        player.start();
    }
    
    // 실제로 이벤트 발생시 우리가 원하는 작업을 하기위한 이벤트처리 함수를 정의
    public synchronized void controllerUpdate(ControllerEvent e) {
        // 여러 이벤트중에서 RealizeCompleteEvent 가 발생하게되면 프레임에 Video 컴포넌트하고,
        // 플레이를 위한 컴포넌트를 추가한다.
        if (e instanceof RealizeCompleteEvent) {
            Component comp;
            if ((comp = player.getVisualComponent())!=null)
                add("Center",comp);
            if ((comp = player.getControlPanelComponent())!=null)
                add("South",comp);
            validate();
        }
    }
    
    public static void main(String[] args) {
        TestJMF jmf = new TestJMF();
    }
}
########################################################################################################

위의 코드를 컴파일하고 실행해 보시기 바랍니다. 그리고 한번 MPEG가 아닌 MP3화일과 같은 것도 실행해 보세요..
실행하시면 jmf.log라는 화일이 생성됩니다. 그 로그화일을 보시면 Detail한 내용들이 보이니 참고하시길 바랍니다.
JMF를 시작하시려는 분들께 많은 도움이 되길 바랍니다.

반응형

'IT > Programming' 카테고리의 다른 글

JXTA  (0) 2013.01.18
정규표현식 (Regular Expressions)  (0) 2012.03.19
자바 제네릭스(JAVA Generics)  (0) 2009.04.06
public static void main(String args[])  (1) 2009.04.01
C 포인터, 확실히 알자(5) - Call by Reference  (6) 2009.03.31

댓글