JMF java播放MP3文件

发布于 2021-11-21 22:55:27 字数 3853 浏览 876 评论 3

我在尝试 使用java播放MP3格式的文件 使用了JMF架包。

也是从网上找的各种支持的代码。但都报同一个错误。

  Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
Failed to realize: com.sun.media.PlaybackEngine@15601ea
Error: Unable to realize com.sun.media.PlaybackEngine@15601ea

我搞不清楚到底是代码的问题 还是包的问题。

请大神们指教。谢谢

其中一个支持播放MP3的代码是:


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

public class PlayerMusic implements ControllerListener {
 // 播放对象
 private Player player;
 // 是否循环播放
 private boolean first, loop;
 // 文件路径
 private String path;
 // 存放MP3文件
 private List<String> mp3List;
 // 当前MP3文件数量
 private int mp3NO = 0;

 PlayerMusic(List<String> mp3List) {
  this.mp3List = mp3List;
 }

 // 播放方法
 public void start() {
  try {
   player = Manager.createPlayer(new File(mp3List.get(mp3NO)).toURI()
     .toURL());
  } catch (NoPlayerException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
   System.out.println("不能播放此文件!");
   return;
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
   return;
  }
  if (player == null) {
   System.out.println("播放文件为空!");
   return;
  }
  player.addControllerListener(this);
  // 提取媒体内容
  player.prefetch();

 }

 @Override
 public void controllerUpdate(ControllerEvent e) {
  // 当媒体播放结束时,循环播放
  if (e instanceof EndOfMediaEvent) {
   mp3NO++;
   System.out.println(mp3NO);
   if (mp3NO < mp3List.size()) {
    this.start();
   }
   return;
  }
  // 当提取媒体的内容结束
  if (e instanceof PrefetchCompleteEvent) {
   System.out.println("内容结束");
   player.start();
   return;
  }
  // 当实例化后
  if (e instanceof RealizeCompleteEvent) {
   System.out.println("实例化");
   // pack(); //执行pack()操作
   return;
  }

 }

 public static void main(String[] args) {
  List<String> path = new ArrayList<String>();
  path.add("E:\KwDownloadx\song\选择.mp3");
  path.add("E:\KwDownloadx\song\陈淑桦-问.mp3");
  path.add("E:\KwDownloadx\song\五月天-温柔(Live).mp3");
  PlayerMusic play = new PlayerMusic(path);
  play.start();
 }

 

 

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最偏执的依靠 2021-11-22 00:26:21

你好,请问怎麽安装MP3解码器;运行registry后该怎么做,还是需要安装mp3 plugin,但是我找不到他的安装文件;能不能发给我呢?

小瓶盖 2021-11-22 00:26:02

有两种可能

1. 你用的jdk环境是64位的,jfm只有32位的dll,jvm无法调用32位dll,找不到相应的底层支持

2. 没有安装mp3 java解码器, 运行java JMFRegistry 相看是否安装

恋你朝朝暮暮 2021-11-21 22:55:38

我记得是mp3的采集率的问题,当时弄了一下也是同样错误,最后采用
http://www.oschina.net/p/jlayer 这个来弄的,你看一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文