欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

JMF這個(gè)多媒體開發(fā)框架太牛了,簡單的幾句代碼就能實(shí)現(xiàn)一個(gè)視頻播放器的開發(fā),厲害,就是支持的格式少了一些,沒關(guān)系,這個(gè)視頻播放器可以播放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 {
   //準(zhǔn)備一個(gè)要播放的視頻文件的URL
   url = new URL("file:/d:/2.mpg");
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }  
  try {
   //通過調(diào)用Manager的createPlayer方法來創(chuàng)建一個(gè)Player的對象
   //這個(gè)對象是媒體播放的核心控制對象
   player = Manager.createPlayer(url);
  } catch (NoPlayerException e1) {
   e1.printStackTrace();
  } catch (IOException e1) {
   e1.printStackTrace();
  } 

  //對player對象注冊監(jiān)聽器,能噶偶在相關(guān)事件發(fā)生的時(shí)候執(zhí)行相關(guān)的動(dòng)作
  player.addControllerListener(this);
  
  //讓player對象進(jìn)行相關(guān)的資源分配
  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的相關(guān)事件
 public void controllerUpdate(ControllerEvent ce) {
  if (ce instanceof RealizeCompleteEvent) {
   //player實(shí)例化完成后進(jìn)行player播放前預(yù)處理
   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);
   }
   
   //設(shè)定Frame窗口的大小,使得滿足視頻文件的默認(rèn)大小
   f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
   f.validate();
   
   //啟動(dòng)視頻播放組件開始播放
   player.start();
   mediaPlayer.start();
  } else if (ce instanceof EndOfMediaEvent) {
   //當(dāng)播放視頻完成后,把時(shí)間進(jìn)度條恢復(fù)到開始,并再次重新開始播放
   player.setMediaTime(new Time(0));
   player.start();
  }
 }

}

效果圖:

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

相關(guān)文章

  • SpringBoot中application.properties與application.yml區(qū)別小結(jié)

    SpringBoot中application.properties與application.yml區(qū)別小結(jié)

    本文主要介紹了SpringBoot中application.properties與application.yml區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • 利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    在項(xiàng)目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨(dú)封裝成一個(gè)第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時(shí),卻提示找不到對應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法
    2022-10-10
  • 基于String不可變字符與StringBuilder可變字符的效率問題

    基于String不可變字符與StringBuilder可變字符的效率問題

    這篇文章主要介紹了String不可變字符與StringBuilder可變字符的效率問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java元組類型javatuples使用實(shí)例

    Java元組類型javatuples使用實(shí)例

    這篇文章主要介紹了Java元組類型javatuples使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 簡單學(xué)習(xí)Java+MongoDB

    簡單學(xué)習(xí)Java+MongoDB

    本文給大家介紹的是如何簡單的使用java+MongoDB實(shí)現(xiàn)數(shù)據(jù)調(diào)用的問題,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-03-03
  • Windows下Java環(huán)境變量配置詳解

    Windows下Java環(huán)境變量配置詳解

    這篇文中給大家介紹的是關(guān)于Windows下JAVA環(huán)境變量JAVA_HOME、CLASSPATH、PATH設(shè)置的相關(guān)資料,文中介紹的還是相對比較詳細(xì)的,對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明

    Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明

    這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot實(shí)現(xiàn)修改請求狀態(tài)404改為200

    springboot實(shí)現(xiàn)修改請求狀態(tài)404改為200

    這篇文章主要介紹了springboot實(shí)現(xiàn)修改請求狀態(tài)404改為200方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java用split分割字符串的一個(gè)有趣現(xiàn)象

    java用split分割字符串的一個(gè)有趣現(xiàn)象

    最近在項(xiàng)目中使用了java中的split分割字符串,發(fā)現(xiàn)了一個(gè)bug,充分了展示了自己對java底層的認(rèn)知有很多的不足和欠缺。下面將這次的經(jīng)過總結(jié)出來分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • Java8中Lambda表達(dá)式使用和Stream API詳解

    Java8中Lambda表達(dá)式使用和Stream API詳解

    這篇文章主要給大家介紹了關(guān)于Java8中Lambda表達(dá)式使用和Stream API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論