JMF播放视频
来源:互联网 发布:mac怎么全屏浏览图片 编辑:程序博客网 时间:2024/05/18 00:36
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,代码和具体的解释如下:
完成上述代码,直接编译运行就可以了,是不是您的视频播放器开始工作了?恭喜你,成功了!
首先,您需要下载用于自身操作系统的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() {
publicvoid 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的相关事件
publicvoid controllerUpdate(ControllerEvent ce) {
if (ceinstanceof RealizeCompleteEvent) {
//player实例化完成后进行player播放前预处理
player.prefetch();
} elseif (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();
} elseif (ce instanceof EndOfMediaEvent) {
//当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
}
}
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() {
publicvoid 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的相关事件
publicvoid controllerUpdate(ControllerEvent ce) {
if (ceinstanceof RealizeCompleteEvent) {
//player实例化完成后进行player播放前预处理
player.prefetch();
} elseif (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();
} elseif (ce instanceof EndOfMediaEvent) {
//当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
}
}
完成上述代码,直接编译运行就可以了,是不是您的视频播放器开始工作了?恭喜你,成功了!
0 0
- 利用JMF播放视频
- 利用JMF播放视频
- JMF播放视频
- JMF播放视频的问题
- 基于JMF录制和播放视频源码
- 利用JMF播放视频 简单示例
- java jmf视频播放器无法播放视频问题
- 视频拍照与播放——JMF多媒体库
- 使用JMF实现java写自己的视频播放器
- 使用JMF实现java写自己的视频播放器
- 使用JMF实现java写自己的视频播放器
- jmf 播放wav文件
- jmf java播放媒体文件
- Java JMF播放音频文件
- JMF(视频传输)
- JMF机器人视频发现
- Java 视频捕获(JMF)
- JMF(视频传输)
- 大数据行业应用风暴:数据挖掘把握商机
- 17--2--13字符串比较
- 美国虚拟主机商在中国市场如何打赢营销战
- 浅谈C++ delete this
- C# DataGridView导出Excel示例
- JMF播放视频
- jdbc连接数据库
- 密码学及相关理论
- 关于Dev控件gridView中内嵌repositoryItemComboBox等控件失去焦点后值消失问题
- 使用yum在centos下安装最新版的ffmpeg
- UCenter密码算法规则和生成方法
- 各式各样的极品程序员,你属于哪一种
- android 调试注意事项
- 查询字符串乱码问题