JMF入门(Java Media Framework)

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,代码和具体的解释如下:

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() {
            
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:/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的相关事件
     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();
        } 
else   if  (ce  instanceof  EndOfMediaEvent) {
            
// 当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
            player.setMediaTime( new  Time( 0 ));
            player.start();
        }
    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值