使用JMF实现java视频播放器

作者:Bird 时间:2022-12-26 00:28:25 

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


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

}

效果图:

使用JMF实现java视频播放器

标签:JMF,java,播放器
0
投稿

猜你喜欢

  • Java调用明华RF读写器DLL文件过程解析

    2022-12-17 04:31:06
  • SpringBoot整合Zookeeper详细教程

    2022-07-24 11:33:09
  • flutter实现发送验证码功能

    2023-07-05 19:03:12
  • 安卓图片反复压缩后为什么普遍会变绿而不是其它颜色?

    2023-04-20 03:08:26
  • 基于C#实现网络爬虫 C#抓取网页Html源码

    2022-11-16 22:19:05
  • Android开发ListView中下拉刷新上拉加载及带列的横向滚动实现方法

    2023-06-16 01:09:52
  • Android App中实现简单的刮刮卡抽奖效果的实例详解

    2023-07-12 19:06:44
  • C# DataSet查看返回结果集的实现

    2021-10-10 09:54:31
  • SpringCloud如何使用Eureka实现服务之间的传递数据

    2022-02-17 18:47:37
  • Spring MVC URL地址映射的示例代码

    2022-12-09 19:53:33
  • 浅析Java中的GC垃圾回收器的意义及与GC的交互

    2022-11-10 13:07:05
  • 基于Java字符编码的使用详解

    2023-02-26 23:13:01
  • Java 中的弱引用是什么

    2021-08-21 08:10:46
  • SpringBoot如何用java生成静态html

    2023-08-08 08:46:59
  • C语言使用strcmp()函数比较两个字符串的实现

    2023-10-15 13:06:55
  • Android刮刮卡效果实现代码

    2023-08-24 01:29:58
  • Spring Security认证的完整流程记录

    2021-12-15 13:04:03
  • java 使用异常的好处总结

    2023-11-29 13:35:49
  • Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android开发环境

    2023-06-17 06:47:11
  • Android小程序实现简易QQ界面

    2023-07-03 20:29:52
  • asp之家 软件编程 m.aspxhome.com