注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

众里寻他千百度,名师成就满分路

AP 微积分 AP 计算机 腾飞的博客

 
 
 

日志

 
 
关于我

大学讲师,中国首批AP计算机教师,著有中国第一套,历经五年实践证明深受学生欢迎的成功的AP计算机双语教材,2013年以93%的满分率开创了中国AP计算机成功的先河,远远超出全美26.6%的满分率,为中国AP计算机教学树立了典范,并在同年加拿大计算机竞赛中勇夺桂冠,任教学生获哥伦比亚大学,麻省理工学院,卡耐基梅隆大学,宾夕法尼亚大学,康奈尔大学,西北大学等学校录取,远程学生遍及北京、长春、南京、重庆、广州、济南, 深圳、成都、费城,洛杉矶,加州,宾州,新罕布什尔州等地,希望借此平台为信息技术的发展做出贡献!

网易考拉推荐

JMF实现多媒体播放器  

2011-11-02 10:37:32|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在写程序的时候,有时候需要静下心来,如果环境比较嘈杂的话,就可以听听歌了,由于一直以来都是用Netbeans写程序的,而NB又可以开发插件,于是就想到在NB上开发一个播放音乐的插件,那岂不是更好,一打开NB就可以听音乐了,也不用打开别的什么播放器了,并且即使老板看到也无所谓,我只是打开了一个IDE在那里写程序而已。好了,先贴截图来看一看吧! 498)this.style.width=498;">
图1
498)this.style.width=498;">
图2
498)this.style.width=498;">
图3

在装此插件之前,目标电脑上必须要装有JMF,因为本程序是用JMF来播放音乐的。JMF可以在如下地址下载,下载完之后,并且还要下载一个MP3的播放插件,因为JMF并不支持MP3格式的音频文件。它们的下载地址是:

JMF地址:http://java.sun.com/products/java-media/jmf/2.1.1/download.html

JMF的MP3插件地址:http://java.sun.com/products/java-media/jmf/mp3/download.html

先安装JMF,然后再安装MP3插件,就可以了。装完这些以后,就可以安装NB的插件了。NB6.0的插件安装方法是:

点击菜单的Tools->Plugins->Downloaded->Add plugins。然后,会弹出一个对话框,要求你选择NBM文件,也就是NB的插件后缀名,其实nbm文件也就是一个压缩文件而已,把它后缀名改为rar以后一样可以解压缩,但是我们不要改,因为改了NB就不认识了,然后选择下一步,其中会弹出对话框说,这个插件是没有签名的,我们选择继续,就可以了,安装完之后,不用重启NB,立即就可以看到效果了。

一般来说在工具栏会显示在Memory旁边,所以你得让Memory显示在工具栏上,一般默认它是不会显示在那的。还有,如果显示不下,可以把别的工具去掉或者选择小图标显示工具栏。对着“正在播放”双击就可以打开歌曲编辑窗口了,对着列表点右键可以添加歌曲,删除歌曲,双击列表里面的歌曲就可以播放了。目前只能选择MP3,WAV,AU这三种格式的歌曲。

要打开播放列表窗口可以通过如下方法:

1、按全局快捷键:Ctrl+Shift+Alt+M
2、打开菜单Tools->音乐播放
3、双击工具栏上的“正在播放”。

源代码的Netbeans工程以及插件文件nbm文件,请点击这里下载。


文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/java/javaxl/20100705/331001.html 

 

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平台的固有优势,将"编写一次,到处运行"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。
     首先下载JMF,去Oracle官网找到就行,现在最高级版本为2.1.1e,下载下来安装,然后把他的三个包  jmf.jar,sound.jar和mdeiaplayer.jar拿出来,下面开始写代码 
  
view plaincopy to clipboardprint?
package com.bird.jmf;  
  
import java.io.File;  
import java.net.MalformedURLException;  
import java.net.URL;  
  
import javax.media.Manager;  
import javax.media.Player;  
  
@SuppressWarnings("restriction")  
public class SimpleAudioPlayer {  
    private Player audioPlayer = null;//建立一个播放接口   
    public SimpleAudioPlayer(URL url) throws Exception{//创建一个准备Player,准备好播放   
        audioPlayer = Manager.createRealizedPlayer(url);  
    }  
    @SuppressWarnings("deprecation")  
    public SimpleAudioPlayer(File file) throws MalformedURLException, Exception{//将本地文件改为URL   
        this(file.toURL());  
    }  
      
    public void play(){//直接调用播放方法就可以   
        audioPlayer.start();  
    }  
      
    public void stop(){//停止的时候一定要释放资源   
        audioPlayer.stop();  
        audioPlayer.close();  
    }  
      
    public static void main(String [] args) throws MalformedURLException, Exception{  
        File file = new File("d://1.mp3");  
        SimpleAudioPlayer Player = new SimpleAudioPlayer(file);  
        Player.play();  
    }  
}  

 

 

JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将代码贴上去

     
view plaincopy to clipboardprint?
package com.bird.jmf;  
  
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.CannotRealizeException;  
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;  
  
@SuppressWarnings({ "restriction", "unused" })  
public class JMFSample implements ControllerListener {  
    public static void main(String[] args) {  
        JMFSample sp = new JMFSample();  
        sp.play();  
    }  
     
    private Player mediaPlayer;  
    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:/d:/2.mpg");  
        } 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();  
            mediaPlayer.start();  
        } else if (ce instanceof EndOfMediaEvent) {  
            //当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放   
            player.setMediaTime(new Time(0));  
            player.start();  
        }  
    }  
  
}  

  评论这张
 
阅读(139)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017