JMF下载和安装

JMF,全名为Java Media Framework,它可以在java applet和application中使用音频,视频或者其他基于时间的多媒体。JMF所支持的多媒体格式如下:AIFF(.aiff),AVI(.avi),GSM(.gsm),HotMedia(.mvr),MID(.mid),MPEG-1(.mpg)(即常见的VCD文件),MPEG-2(.mp2)(即常见的DVD文件),QuickTime(.mov),Sun Audio(.au),Wave(.wav);JMF对RTSP(Real Time Streaming Protocol实时流控制协议)的支持:RTSP也是最近才加到JMF中的,它可以使得基于JMF的客户端通过RTSP与服务器交互,请求获取媒体的数据流。

JMF可以开发java 3D (游戏引擎),甚至视频聊天等。

JMF下载地址:http://www.oracle.com/technetwork/java/javase/download-142937.html

JMF安装方法:

1. 在linux或solaris下安装:

先到安装目录,然后执行% /bin/sh ./jmf-2_1_1e-solaris-sparc.bin

2 win下安装

直接执行该文件,即进入JMF安装向导,安装时应注意选择路径为jdk安装路径(C:\Program Files\Java\jdk1.6.0_21),因为JMF要有JDK的支持。

我下载的是JMF2.1,从网站下载JMF2.1以后,得到的是一个安装文件(windows系统下),运行jmf-2_1_1e-windows-i586.exe。该程序会将JMF2.1安装到我的一个指定的目录下。

当安装成功后,你需要确认一下安装程序正确设定了CLASSPATH和PATH环境变量。在CLASSPATH中需要包含jmf.jar和sound.jar;在PATH中需要包含JMF动态库的路径。

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
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;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class JMFMediaPlayer extends JFrame implements ActionListener,
		ControllerListener, ItemListener {
	// JMF的播放器
	Player player;
	// 播放器的视频组件和控制组件
	Component vedioComponent;
	Component controlComponent;
	// 标示是否是第一次打开播放器
	boolean first = true;
	// 标示是否需要循环
	boolean loop = false;
	// 文件当前目录
	String currentDirectory;

	// 构造方法
	public JMFMediaPlayer(String title) {
		super(title);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				// 用户点击窗口系统菜单的关闭按钮
				// 调用dispose以执行windowClosed
				dispose();
			}

			public void windowClosed(WindowEvent e) {
				if (player != null) {
					// 关闭JMF播放器对象
					player.close();
				}
				System.exit(0);
			}
		});
		// 创建播放器的菜单
		JMenu fileMenu = new JMenu("文件");
		JMenuItem openMemuItem = new JMenuItem("打开");
		openMemuItem.addActionListener(this);
		fileMenu.add(openMemuItem);
		// 添加一个分割条
		fileMenu.addSeparator();
		// 创建一个复选框菜单项
		JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
		loopMenuItem.addItemListener(this);
		fileMenu.add(loopMenuItem);
		fileMenu.addSeparator();
		JMenuItem exitMemuItem = new JMenuItem("退出");
		exitMemuItem.addActionListener(this);
		fileMenu.add(exitMemuItem);

		JMenuBar menuBar = new JMenuBar();
		menuBar.add(fileMenu);
		this.setJMenuBar(menuBar);
		this.setSize(200, 200);

		try {
			// 设置界面的外观,为系统外观
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			SwingUtilities.updateComponentTreeUI(this);
		} catch (Exception e) {
			e.printStackTrace();
		}
		this.setVisible(true);
	}

	/**
	 * 实现了ActionListener接口,处理组件的活动事件
	 */
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("退出")) {
			// 调用dispose以便执行windowClosed
			dispose();
			return;
		}
		FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
		fileDialog.setDirectory(currentDirectory);
		fileDialog.setVisible(true);
		// 如果用户放弃选择文件,则返回
		if (fileDialog.getFile() == null) {
			return;
		}
		currentDirectory = fileDialog.getDirectory();
		if (player != null) {
			// 关闭已经存在JMF播放器对象
			player.close();
		}
		try {
			// 创建一个打开选择文件的播放器
			player = Manager.createPlayer(new MediaLocator("file:"
					+ fileDialog.getDirectory() + fileDialog.getFile()));
		} catch (java.io.IOException e2) {
			System.out.println(e2);
			return;
		} catch (NoPlayerException e2) {
			e2.printStackTrace();
			System.out.println("不能找到播放器.");
			return;
		}
		if (player == null) {
			System.out.println("无法创建播放器.");
			return;
		}
		first = false;
		this.setTitle(fileDialog.getFile());
		// 播放器的控制事件处理
		player.addControllerListener(this);
		// 预读文件内容
		player.prefetch();
	}

	/**
	 * 实现ControllerListener接口的方法,处理播放器的控制事件
	 */
	public void controllerUpdate(ControllerEvent e) {
		// 调用player.close()时ControllerClosedEvent事件出现。
		// 如果存在视觉部件,则该部件应该拆除(为一致起见,
		// 我们对控制面板部件也执行同样的操作)
		if (e instanceof ControllerClosedEvent) {
			if (vedioComponent != null) {
				this.getContentPane().remove(vedioComponent);
				this.vedioComponent = null;
			}
			if (controlComponent != null) {
				this.getContentPane().remove(controlComponent);
				this.controlComponent = null;
			}
			return;
		}
		// 如果是媒体文件到达尾部事件
		if (e instanceof EndOfMediaEvent) {
			if (loop) {
				// 如果允许循环,则重新开始播放
				player.setMediaTime(new Time(0));
				player.start();
			}
			return;
		}
		// 如果是播放器预读事件
		if (e instanceof PrefetchCompleteEvent) {
			// 启动播放器
			player.start();
			return;
		}
		// 如果是文件打开完全事件,则显示视频组件和控制器组件
		if (e instanceof RealizeCompleteEvent) {
			vedioComponent = player.getVisualComponent();
			if (vedioComponent != null) {
				this.getContentPane().add(vedioComponent);
			}
			controlComponent = player.getControlPanelComponent();
			if (controlComponent != null) {
				this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
			}
			this.pack();
		}
	}

	// 处理“循环”复选框菜单项的点击事件
	public void itemStateChanged(ItemEvent e) {
		loop = !loop;
	}

	public static void main(String[] args) {
		new JMFMediaPlayer("JMF媒体播放器");
	}
}


Java术语,意为Java媒体框架(JMF)。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。 JMF实际上是Java的一个类包。JMF 2.1.1技术提供了先进的媒体处理能力,从而扩展了Java平台的功能。这些功能包括:媒体捕获、压缩、流转、回放,以及对各种主要媒体形式和编码的支 持,如M-JPEG、H.263、MP3、RTP/RTSP (实时传送协议和实时流转协议)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等。JMF 2.1.1还支持广受欢迎的媒体类型,如Quicktime、Microsofts AVI和MPEG-1等。此外,JMF 2.1.1软件中包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。 Sun以四种不同的专用版本提供JMF 2.1.1技术,满足专业开发人员的各类需求,第一个是一个轻便型版本,它完全采用Java语言编写,适用于任何Java兼容系统。此外,开发人员还可选 择分别适用于Solaris、Windows或Linux等操作系统的性能最优化软件包,以提高性能和能力。 JMF 2.1.1软件也是Java Media系列软件的一部分。Java Media系列软件包括Java 3D、Java 2D、Java Sound和Java Advanced Imaging等API。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将"编写一次,到处运行"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值