java jmf视频播放器无法播放视频问题

原创 2015年11月20日 17:21:08

初学java,谢了一个参照网上代码写了个java jmf视频播放器,运行调试代码没问题,可是被这个avi视频格式纠结的要死,换了n多个avi格式视频依然不行,经过查阅资料发现现在网上流行的avi格式并不是真正的avi格式,大都是其他格式转化来的,所以jmf无法识别,必须使用真正的avi格式。在这里附上源码,测试通过的avi视频。




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) { 
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媒体播放器"); 


JMF播放视频的问题

最近在公司开发一个视频分析的项目时,由于用到的是Java继
  • johnsonzhao2011
  • johnsonzhao2011
  • 2014年07月26日 23:35
  • 1122

Atitit. 软件---多媒体区---- jmf 2.1.1 Java Media Framework 支持的格式

Atitit. 软件---多媒体区---- jmf 2.1.1 Java Media Framework 支持的格式   JMF,全名为Java Media Framework,它可以在java ap...
  • attilax
  • attilax
  • 2014年11月15日 12:58
  • 1215

使用JMF实现java写自己的视频播放器

JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将...
  • a352193394
  • a352193394
  • 2011年10月15日 14:08
  • 27519

java jmf视频播放器无法播放视频问题

初学java,谢了一个参照网上代码写了个java jmf视频播放器,运行调试代码没问题,可是被这个avi视频格式纠结的要死,换了n多个avi格式视频依然不行,经过查阅资料发现现在网上流行的avi格式并...
  • l1315925504
  • l1315925504
  • 2015年11月20日 17:21
  • 1457

Java媒体框架JMF 音视频处理最新类包(共4个jar包)

  • 2011年12月10日 11:26
  • 1.87MB
  • 下载

利用JMF播放视频 简单示例

本文主要使用JMF来实现在一个Applet中播放本地MPEG格式视频文件。并给出一个实例。 author: ZJ   06-11-15 Blog: [url]http://zhangjunhd.b...
  • cao478208248
  • cao478208248
  • 2014年05月15日 14:11
  • 1864

基于JMF录制和播放视频源码

仅仅播放摄像头拍摄内容(修改版) package org.bruce.myown_product; import java.awt.Component; import java.awt.Dimen...
  • yang3wei
  • yang3wei
  • 2010年12月25日 17:34
  • 3187

一个基于JMF的超简易型MP3播放器

import java.awt.Font;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.WindowAdapt...
  • Relyn
  • Relyn
  • 2008年02月23日 00:45
  • 2808

基于JMF下的Java的MP3播放

Java的基本API类中是不能播放MP3格式音频。 可以通过JMF(Java Media Framework Java媒体框架)来增加对mp3及更多格式音视频的播放。 JMF是也不可以播放MP3的...
  • Mr_Pang
  • Mr_Pang
  • 2015年08月19日 20:30
  • 3223

JMF -java media framwork的安装问题

电脑配置是:win7旗舰版64位,JDK和eclipse都是64位的;下载的JMF是jmf-2_1_1e-windows-i586,这个东西网上好多人说只支持32位JDK,如你所料。下载下来也是安装不...
  • JQ_AK47
  • JQ_AK47
  • 2015年08月18日 13:59
  • 1993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java jmf视频播放器无法播放视频问题
举报原因:
原因补充:

(最多只允许输入30个字)