티스토리 뷰



"자바 환경에서 동영상 출력하기 - VLCJ 준비"에 이어서 VLCJ 프레임워크와 VLC 미디어 플레이어를 기반으로 자바 환경(Java AWT 및 Swing JFrame )에서 동영상 출력하기를 다룰까 합니다. VLCJ 프레임워크는 Java AWT나 Swing 내부에 VLC 미디어플레이어를 올려주는 역할을 하기 때문에 JNA(Java Native Access) 라이브러리를 필요로 합니다. 프로젝트에 JNA 라이브러리를 포함시키거나 실행 환경에 설치되어 있어야 합니다.

JNA는 https://github.com/java-native-access/jna 에서 다운로드 받을 수 있습니다. 위의 그림처럼 jna.jar과 jna-platform.jar 모두가 필요합니다. JNA와 더불어서 동영상을 출력하기 위해서 필요한 것은 VLC 미디어 플레이어입니다. "참 맘에 드는 VLC 미디어 플레이어"를 참조해서 최신 버전으로 설치하고 이미 설치되어 있다면  VLC 미디어 플레이어>도움말>업데이트 확인 메뉴를 통해서 최신 버전으로 업데이트 합니다. 자바 프로그램을 배포해야 하는 상황이라면 각 컴퓨터에도 VLC 미디어 플레이어를 설치해야 정상적으로 동작시킬 수 있습니다.

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JPanel;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.MediaPlayer;
import java.awt.BorderLayout;

public class AVPanel extends JPanel {
    private EmbeddedMediaPlayerComponent component;
    private EmbeddedMediaPlayer player;
    private int file_index = 0;
    private String[] av_list;
    
    public AVPanel() 
    {
        boolean found = new NativeDiscovery().discover();
        System.out.println(found);
        System.out.println(LibVlc.INSTANCE.libvlc_get_version());
        component = new EmbeddedMediaPlayerComponent();
        player = component.getMediaPlayer();

        setLayout(new BorderLayout());
        setAlignmentX(Component.LEFT_ALIGNMENT);
        setPreferredSize(new Dimension(640, 480));
        setVisible(true);
        add(component, BorderLayout.CENTER);
        player.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
            @Override
            public void finished(MediaPlayer mediaPlayer) {
                endAV();
            }
        });
    }
    
    public void setAV(final String fnames[]) {
        av_list = fnames;
        file_index = 0;
        runAV();
    }
    
    private void runAV() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                player.playMedia(av_list[file_index]);
            }
        }).start();
    }
    
    private void endAV() {
        component.release();
        remove(component);
        component = new EmbeddedMediaPlayerComponent();
        player = component.getMediaPlayer();
        add(component, BorderLayout.CENTER);
        player.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
            @Override
            public void finished(MediaPlayer mediaPlayer) {
                endAV();
            }
        });
        file_index = ++ file_index % av_list.length;
        runAV();
    }
}

JFrame을 배경으로 사용할 수도 있지만 위의 예제는 JPanel을 배경으로 했습니다. VLCJ와 관련한 샘플 및 튜토리얼은 http://capricasoftware.co.uk/#/projects/vlcj/tutorial/first-steps 를 참조하시기 바랍니다.  위의 코드를 사용하려면 클래스를 "m_avpanel =  new AVPanel();" 처럼 선언하고 m_avpanel.setAV(m_videos); 처럼 출력할 동영상 파일 목록을 배열로 전달하면 됩니다. 출력할 동영상 파일 목록을 받으면 각 동영상을 차례대로 출력하는데 finished 이벤트를 통해서 한 동영상 출력이 끝나면 다음 동영상을 플레이 하는 방식입니다. 파일 인덱스를 통해서 프로그램 종료 시점까지 전체 동영상 출력이 반복되도록 했습니다. 

VLC 미디어 플레이어를 자바 프로그램에 내장하는 방식은 전문 도구를 통해서 유용성을 확보한다는 장점이 있습니다. 동영상 파일 뿐만아니라 스트리밍에도 대응할 수 있고 다양한 영상 포맷에도 적절하게 대응할 수 있으므로 자바 프로그램에서의 동영상 출력에 VLCJ를 채용하는 방법은 적극 검토할 가치가 있습니다.


댓글
댓글쓰기 폼