使用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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- java代碼實現(xiàn)截圖功能(屏幕截圖)
- java實現(xiàn)區(qū)域內(nèi)屏幕截圖示例
- java編程實現(xiàn)屏幕截圖(截屏)代碼總結
- 使用Java實現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)
- Java實現(xiàn)屏幕截圖及剪裁
- Java模擬QQ桌面截圖功能實現(xiàn)方法
- java調(diào)用ffmpeg實現(xiàn)視頻轉(zhuǎn)換的方法
- 用java實現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實現(xiàn)代碼
- java解析sina視頻
- 詳解java調(diào)用ffmpeg轉(zhuǎn)換視頻格式為flv
- Java實現(xiàn)對視頻進行截圖的方法【附ffmpeg下載】
相關文章
SpringBoot中application.properties與application.yml區(qū)別小結
本文主要介紹了SpringBoot中application.properties與application.yml區(qū)別小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-10-10
利用Maven實現(xiàn)將代碼打包成第三方公共jar包
在項目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨封裝成一個第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時,卻提示找不到對應的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法2022-10-10
基于String不可變字符與StringBuilder可變字符的效率問題
這篇文章主要介紹了String不可變字符與StringBuilder可變字符的效率問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明
這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
springboot實現(xiàn)修改請求狀態(tài)404改為200
這篇文章主要介紹了springboot實現(xiàn)修改請求狀態(tài)404改為200方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Java8中Lambda表達式使用和Stream API詳解
這篇文章主要給大家介紹了關于Java8中Lambda表達式使用和Stream API的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-05-05

