JMF入门(Java Media Framework)

原创 2011年01月12日 00:14:00

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

}

JMF入门(Java Media Framework)

     JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库,JMF的推出已经有几年的历史了,目前最新的版本为2.1.1e,这里我们来讲述使用Java的AWT组件来...
  • stevencn76
  • stevencn76
  • 2007年12月11日 20:42
  • 10132

jmf环境的配置

一 JMF的安装与环境的配置:      搭建JMF运行平台(Eclipse)  选择使用Windows xp操作系统,如果想利用JMF的功能,就必须要安装Sun公司的JDK和JMF(Java...
  • Iamduoluo
  • Iamduoluo
  • 2012年03月23日 18:47
  • 8134

Java Media Framework 基础教程(三)

第五节.传播接收媒体JMF和实时传输协议(RTP)许多的友善网络的特征直接建立在JMF中,这些使为客户端程序通过网络传输和接收媒体非常容易。当在一个网络上的一个用户想要接收任何种类的媒体流的时候,它不...
  • jackfor001
  • jackfor001
  • 2007年12月14日 17:28
  • 3535

Java Media Framework 基础教程(学习JMF中,看到好的中文教程,在这里记录下来)

Java Media Framework 基础教程作者:Eric Olson     来源:ibm摘要:很少发现有关于jmf方面的中文资料,这是在IBM上面找的一本书,可作为jmf的入门学习,业余时间...
  • cecoo
  • cecoo
  • 2008年05月19日 23:11
  • 13778

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

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

64位机器上安装和使用JMF

多媒体开发环境的安装
  • liugan5371375
  • liugan5371375
  • 2015年12月15日 22:28
  • 2542

用JAVA中的JMF来打开摄像头

今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的。然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路。下面我把我的学习过程展示出...
  • itjobs07
  • itjobs07
  • 2016年07月07日 15:52
  • 1716

简单使用JMF调用摄像头

JMF(Java Media Framework)是Java媒体框架,包含了许多用于处理多媒体的API可以让基于JAVA的应用实现音频、视频的捕捉、处理、播放、传输等功能。利用它,可以实现音、视频播放...
  • liuruiqun
  • liuruiqun
  • 2015年10月13日 23:53
  • 1539

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

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

利用JMF播放视频 简单示例

本文主要使用JMF来实现在一个Applet中播放本地MPEG格式视频文件。并给出一个实例。 author: ZJ   06-11-15 Blog: [url]http://zhangjunhd.b...
  • cao478208248
  • cao478208248
  • 2014年05月15日 14:11
  • 1862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JMF入门(Java Media Framework)
举报原因:
原因补充:

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