您的位置:首页 > 编程语言 > Java开发

JMF入门(Java Media Framework)

2011-01-12 00:14 225 查看
JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库,JMF的推出已经有几年的历史了,目前最新的版本为
2.1.1e,这里我们来讲述使用Java的AWT组件来开发一个视频播放器,采用JMF作为视频的播放库,希望能够抛砖引玉,使得更多的人能够对JMF
进行更加深入的研究,并贡献出自己的研究所得。

首先,您需要下载用于自身操作系统的JMF安装包,下载地址:http://java.sun.com/products/java-media/jmf

/2.1.1/download.html,我们这里针对Windows操作系统进行JMF的开发。要注意的是,JMF针对不同平台的实现是有少许差别
的,不同的平台对媒体文件格式的支持可能存在差异,具体的平台对媒体文件格式的支持细节,您可以直接查看:http://java.sun.com
/products/java-media/jmf/2.1.1/formats.html。安装过程就不用多解释了,您可以直接运行安装文件,选择自己
所希望的目录完成安装,我们这里不多做说明。

接下来,我们可以使用Eclipse新建一个普通的java应用程序,把JMF安装目录下的lib中的jmf.jar、mediaplayer.jar、

sound.jar三个jar文件加入到项目的classpath(如果您对classpath不了解,可以在我的博客中找到关于classpath的详
细解释的文章)中,到这里,编译和运行项目的基本配置都准备好了,下面可以编写代码了。

在项目中添加一个类JMFSample,代码和具体的解释如下:

package com.jmfsample2;

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:/c-d.avi");

} 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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: