Sample

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;

public class JMFSample implements ControllerListener {
public static void main(String[] args) {
JMFSample sp = new JMFSample();
sp.play();
}

private Frame f;
private Player player;
private Panel panel;
private Component visual;
private Component control = null;

public void play(){
f = new Frame("JMF Sample1");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
if(player != null) {
player.close();
}
System.exit(0);
}
});
f.setSize(500,400);

f.setVisible(true);
URL url = null;
try {
//準備一個要播放的視頻文件的URL
url = new URL("file://E:/sound.wav");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
//通過調用Manager的createPlayer方法來創建一個Player的對象
//這個對象是媒體播放的核心控制對象
player = Manager.createPlayer(url);
} catch (NoPlayerException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

//對player對象註冊監聽器,能噶偶在相關事件發生的時候執行相關的動作
player.addControllerListener(this);

//讓player對象進行相關的資源分配
player.realize();
}

private int videoWidth = 0;
private int videoHeight = 0;
private int controlHeight = 30;
private int insetWidth = 10;
private int insetHeight = 30;

//監聽player的相關事件
public void controllerUpdate(ControllerEvent ce) {
if (ce instanceof RealizeCompleteEvent) {
//player實例化完成後進行player播放前預處理
player.prefetch();
} else if (ce instanceof PrefetchCompleteEvent) {
if (visual != null)
return;

//取得player中的播放視頻的組件,並得到視頻窗口的大小
//然後把視頻窗口的組件添加到Frame窗口中,
if ((visual = player.getVisualComponent()) != null) {
Dimension size = visual.getPreferredSize();
videoWidth = size.width;
videoHeight = size.height;
f.add(visual);
} else {
videoWidth = 320;
}

//取得player中的視頻播放控制條組件,並把該組件添加到Frame窗口中
if ((control = player.getControlPanelComponent()) != null) {
controlHeight = control.getPreferredSize().height;
f.add(control, BorderLayout.SOUTH);
}

//設定Frame窗口的大小,使得滿足視頻文件的默認大小
f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
f.validate();

//啓動視頻播放組件開始播放
player.start();
} else if (ce instanceof EndOfMediaEvent) {
//當播放視頻完成後,把時間進度條恢復到開始,並再次重新開始播放
player.setMediaTime(new Time(0));
player.start();
}
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章