最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用JMF實現(xiàn)java視頻播放器

 更新時間:2017年06月06日 10:01:36   作者:Bird  
這篇文章主要為大家詳細介紹了使用JMF實現(xiàn)java視頻播放器的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

JMF這個多媒體開發(fā)框架太牛了,簡單的幾句代碼就能實現(xiàn)一個視頻播放器的開發(fā),厲害,就是支持的格式少了一些,沒關系,這個視頻播放器可以播放mpg,avi,fvl等等,想播放其他的請開發(fā)自己的插件,下面將代碼貼上去 

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 {
   //通過調(diào)用Manager的createPlayer方法來創(chuàng)建一個Player的對象
   //這個對象是媒體播放的核心控制對象
   player = Manager.createPlayer(url);
  } catch (NoPlayerException e1) {
   e1.printStackTrace();
  } catch (IOException e1) {
   e1.printStackTrace();
  } 

  //對player對象注冊監(jiān)聽器,能噶偶在相關事件發(fā)生的時候執(zhí)行相關的動作
  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;
 
 //監(jiān)聽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();
  }
 }

}

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • springboot @Controller和@RestController的區(qū)別及應用詳解

    springboot @Controller和@RestController的區(qū)別及應用詳解

    這篇文章主要介紹了springboot @Controller和@RestController的區(qū)別及應用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • IDEA設置生成帶注釋的getter和setter的圖文教程

    IDEA設置生成帶注釋的getter和setter的圖文教程

    通常我們用idea默認生成的getter和setter方法是不帶注釋的,當然,我們同樣可以設置idea像MyEclipse一樣生成帶有Javadoc的模板,具體設置方法,大家參考下本文
    2018-05-05
  • 詳細總結Java基礎類和包裝類

    詳細總結Java基礎類和包裝類

    近幾天一直在復習Java基礎知識,今天就帶大家總結一下Java基礎類和包裝類,下文中有非常詳細的代碼示例,對正在學習Java基礎的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Sentinel的熔斷降級、資源規(guī)則詳解與實例

    Sentinel的熔斷降級、資源規(guī)則詳解與實例

    這篇文章主要介紹了Sentinel的熔斷降級、資源規(guī)則詳解與實例,Sentinel是阿里巴巴開源的一款流量控制和熔斷降級的框架,它主要用于保護分布式系統(tǒng)中的服務穩(wěn)定性,Sentinel通過對服務進行流量控制和熔斷降級,可以有效地保護系統(tǒng)的穩(wěn)定性,需要的朋友可以參考下
    2023-09-09
  • Mybatis-Plus自動生成的數(shù)據(jù)庫id過長的解決

    Mybatis-Plus自動生成的數(shù)據(jù)庫id過長的解決

    這篇文章主要介紹了Mybatis-Plus自動生成的數(shù)據(jù)庫id過長的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot多種生產(chǎn)打包方式詳解

    SpringBoot多種生產(chǎn)打包方式詳解

    生產(chǎn)上發(fā)布?Spring?Boot?項目時,流程頗為繁瑣且低效,但凡代碼有一丁點改動,就得把整個項目重新打包部署,耗時費力不說,生成的?JAR?包還特別臃腫,體積龐大,本文給大家介紹了SpringBoot多種生產(chǎn)打包方式,需要的朋友可以參考下
    2025-01-01
  • SpringBoot實現(xiàn)物品收藏功能

    SpringBoot實現(xiàn)物品收藏功能

    這篇文章主要介紹了SpringBoot實現(xiàn)物品收藏功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    這篇文章總結了一個在Spring Boot 2.6.x版本中,由于路徑匹配策略改變導致靜態(tài)資源無法加載的問題,并提供了解決方案:通過配置類或在配置文件中設置路徑匹配策略為AntPathMatcher,或者直接降級Spring Boot版本
    2025-02-02
  • springboot自定義攔截器簡單使用及舉例

    springboot自定義攔截器簡單使用及舉例

    Spring Boot攔截器是AOP的一種實現(xiàn),專門攔截對控制層的請求,主要應用于判斷用戶權限,攔截webSocket請求,下面這篇文章主要給大家介紹了關于springboot自定義攔截器簡單使用及舉例的相關資料,需要的朋友可以參考下
    2023-01-01
  • java調(diào)用opencv身份證號識別詳解

    java調(diào)用opencv身份證號識別詳解

    這篇文章主要為大家詳細介紹了java如何調(diào)用opencv實現(xiàn)身份證號的識別,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論

灵丘县| 随州市| 弥勒县| 四川省| 桐城市| 洪湖市| 锡林郭勒盟| 同仁县| 丰城市| 台山市| 石阡县| 盐山县| 嵊泗县| 原平市| 福鼎市| 东台市| 葵青区| 喀什市| 吉木萨尔县| 威海市| 桐庐县| 偃师市| 任丘市| 巩义市| 印江| 咸宁市| 务川| 湘西| 阿拉善盟| 东乡族自治县| 临海市| 铁岭市| 固原市| 承德市| 黄龙县| 华宁县| 英超| 中卫市| 扎兰屯市| 乐昌市| 桃源县|