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

packagecom.jmfsample2;importjava.awt.BorderLayout;importjava.awt.Component;importjava.awt.Dimension;importjava.awt.Frame;importjava.awt.Panel;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.IOException;importjava.net.MalformedURLException;importjava.net.URL;importjavax.media.ControllerEvent;importjavax.media.ControllerListener;importjavax.media.EndOfMediaEvent;importjavax.media.Manager;importjavax.media.MediaLocator;importjavax.media.NoPlayerException;importjavax.media.Player;importjavax.media.PrefetchCompleteEvent;importjavax.media.RealizeCompleteEvent;importjavax.media.Time;publicclassJMFSampleimplementsControllerListener {publicstaticvoidmain(String[] args) {

JMFSample sp=newJMFSample();

sp.play();

}privateFrame f;privatePlayer player;privatePanel panel;privateComponent visual;privateComponent control=null;publicvoidplay(){

f=newFrame("JMF Sample1");

f.addWindowListener(newWindowAdapter() {publicvoidwindowClosing(WindowEvent we) {if(player!=null) {

player.close();

}

System.exit(0);

}

});

f.setSize(500,400);

f.setVisible(true);

URL url=null;try{//准备一个要播放的视频文件的URLurl=newURL("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();

}privateintvideoWidth=0;privateintvideoHeight=0;privateintcontrolHeight=30;privateintinsetWidth=10;privateintinsetHeight=30;//监听player的相关事件publicvoidcontrollerUpdate(ControllerEvent ce) {if(ceinstanceofRealizeCompleteEvent) {//player实例化完成后进行player播放前预处理player.prefetch();

}elseif(ceinstanceofPrefetchCompleteEvent) {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();

}elseif(ceinstanceofEndOfMediaEvent) {//当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放player.setMediaTime(newTime(0));

player.start();

}

}

}

完成上述代码,直接编译运行就可以了,是不是您的视频播放器开始工作了?恭喜你,成功了!

java jmf 教程_JMF入门(Java Media Framework)相关推荐

  1. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  2. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  3. java培训教程分享:Java中用户如何自定义异常?

    我们在学习java技术的时候应该有了解过,在java中是定义了很多的异常类的,虽然这些大量异常类可以帮助我们描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在 ...

  4. Java视频教程,java全套教程从入门到精通:13天学会Java编程!

    java,编程语言排行榜榜首,常年来霸占排行榜,在加上工资高,导致了学习java的人群越来越多,但是好多人又找不到学习java好的教程,不知道该如何入门?今天分享一套java入门教程,让你轻松入门ja ...

  5. java学习教程基础入门及提高,22年最新

    武汉Java编程入门怎么学?希望会对你的学习有所促进和帮助,让大家的Java编程入门.一.Java编程零基础可以学,但自学的确阻力有些大.作为一门技术语言,它所蕴含 接下来就要学习的是Java的面向对 ...

  6. Java学习路线,java学习教程(入门到精通)

    你好,欢迎来到编程领域:阅读"Java入门",打包好了Java学习包,以及良好的阅读体验. 关于 Java 语言 由于 JVM 的支持,使得 Java 成为一种跨平台的编程语言,一 ...

  7. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  8. [java手把手教程][第二季]java后端博客系统文章系统——No10

    项目github地址:github.com/pc859107393- 实时项目同步的地址是国内的码云:git.oschina.net/859107393/m- 我的简书首页是:www.jianshu. ...

  9. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

最新文章

  1. 最新!国内芯片70个细分领域重要代表企业 VS 国外
  2. 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性
  3. 运行roscore时候报错 Unable to contact my own server at 及 小海龟动不了的问题
  4. Android中.9.png图片的使用过程和原理
  5. python rsa加密长度_python RSA加密最新(RSA/ECB/PKCS1Padding)
  6. Windows的特色
  7. oracle job 及存储过程案例
  8. ubuntu 的问题,我一个人使用,却显示两人登录?
  9. (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.conf、/var/named)设置实现和解释...
  10. 数论知识(2)-------------欧拉函数
  11. exsi添加gpu卡 v100s和a100 配置直通模式虚机电源启动失败
  12. mysql索引详细介绍简书_细说mysql索引
  13. 写给四十岁男人的忠告
  14. PCL NARF关键点提取、SIFT关键点提取、Harris关键点提取
  15. Python处理视频文件的实用姿势
  16. 离线数仓搭建_15_ADS层数据构建
  17. 如果当面试官问你懂不懂npm,你知道怎么说吗?
  18. 《人工智能》之《机器学习》
  19. 高可用架构之限流降级
  20. 关于2000版ISO 9001标准的新思考之四(转载)

热门文章

  1. 教孩子学习乘法和除法,我算是绞尽脑汁了
  2. mt4的服务器在哪个文件,MT4服务器地址在哪个文件
  3. 网易云音乐中你见过最扎心的热评是什么
  4. MVP2006成都聚会图片
  5. centos7脚本部署云盘(seafile)
  6. memcached使用总结篇一
  7. javajavaScript常见校验器
  8. 7Ps营销理论(转载)
  9. 2018 ACM-ICPC南京网络赛 Magical Girl Haze(分层最短路)
  10. java全文检索word中的内容_搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结...