
正文
java调视频进度代码 java 视频处理
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
求JAVA视频播放器代码
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
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;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMFjava调视频进度代码的播放器
Player player;
// 播放器的视频组件和控制组件
Component vedioComponent;
Component controlComponent;
// 标示是否是第一次打开播放器
boolean first = true;
// 标示是否需要循环
boolean loop = false;
// 文件当前目录
String currentDirectory;
// 构造方法
public JMFMediaPlayer(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose();
}
public void windowClosed(WindowEvent e){
if (player != null){
// 关闭JMF播放器对象
player.close();
}
System.exit(0);
}
});
// 创建播放器的菜单
JMenu fileMenu = new JMenu("文件");
JMenuItem openMemuItem = new JMenuItem("打开");
openMemuItem.addActionListener(this);
fileMenu.add(openMemuItem);
// 添加一个分割条
fileMenu.addSeparator();
// 创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
fileMenu.addSeparator();
JMenuItem exitMemuItem = new JMenuItem("退出");
exitMemuItem.addActionListener(this);
fileMenu.add(exitMemuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
this.setJMenuBar(menuBar);
this.setSize(200, 200);
try {
// 设置界面的外观,为系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
this.setVisible(true);
}
/**
* 实现java调视频进度代码了ActionListener接口,处理组件的活动事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
// 调用dispose以便执行windowClosed
dispose();
return;
}
FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
fileDialog.setDirectory(currentDirectory);
fileDialog.setVisible(true);
// 如果用户放弃选择文件,则返回
if (fileDialog.getFile() == null){
return;
}
currentDirectory = fileDialog.getDirectory();
if (player != null){
// 关闭已经存在JMF播放器对象
player.close();
}
try {
// 创建一个打开选择文件的播放器
player = Manager.createPlayer(new MediaLocator("file:"
+ fileDialog.getDirectory() + fileDialog.getFile()));
} catch (java.io.IOException e2) {
System.out.println(e2);
return;
} catch (NoPlayerException e2) {
System.out.println("不能找到播放器.");
return;
}
if (player == null) {
System.out.println("无法创建播放器.");
return;
}
first = false;
this.setTitle(fileDialog.getFile());
// 播放器的控制事件处理
player.addControllerListener(this);
// 预读文件内容
player.prefetch();
}
/**
* 实现ControllerListener接口的方法,处理播放器的控制事件
*/
public void controllerUpdate(ControllerEvent e) {
// 调用player.close()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// java调视频进度代码我们对控制面板部件也执行同样的操作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
this.getContentPane().remove(vedioComponent);
this.vedioComponent = null;
}
if (controlComponent != null) {
this.getContentPane().remove(controlComponent);
this.controlComponent = null;
}
return;
}
// 如果是媒体文件到达尾部事件
if (e instanceof EndOfMediaEvent) {
if (loop) {
// 如果允许循环,则重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
return;
}
// 如果是播放器预读事件
if (e instanceof PrefetchCompleteEvent) {
// 启动播放器
player.start();
return;
}
// 如果是文件打开完全事件,则显示视频组件和控制器组件
if (e instanceof RealizeCompleteEvent) {
vedioComponent = player.getVisualComponent();
if (vedioComponent != null){
this.getContentPane().add(vedioComponent);
}
controlComponent = player.getControlPanelComponent();
if (controlComponent != null){
this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
}
this.pack();
}
}
// 处理“循环”复选框菜单项的点击事件
public void itemStateChanged(ItemEvent e) {
loop = !loop;
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒体播放器");
}
}
试试吧,我这里运行正常
相关问答
Q1: java/html中拉动进度条怎么做?类似调显示器颜色时的进度条!可以用jquery!
我用jquery做过一个,是我学jq的练习作品,代码写得有点菜,下面贴上它的拖动类,完整的代码见参考资料
$(function () {
/* 滑动条类
@param obj sliSlt 滑动条
@param obj sliBck 滑动块
@param obj numBox 颜色值框
@param obj sliMin 滑动范围最小值
@param obj sliMax 滑动范围最大值
*/
function slideBar(sliSlt,sliBck,numBox,sliMin,sliMax) {
this.sliSlt=sliSlt,
this.sliBck=sliBck,
this.numBox=numBox,
this.sliMin=sliMin,
this.sliMax=sliMax,
this.clr=255,
this.doc=$(document);
var _this=this;
this.startDrag=function (evt1) {
//初始化
var inX=evt1.layerX || evt1.offsetX,
outLeft=_this.sliSlt.offset().left,
temX=0;
//绑定mousemove事件
_this.doc.mousemove(function(evt2) {
temX=evt2.clientX-outLeft-1-inX;
if(!_this.moveTo(temX,_this.sliMin,_this.sliMax)) return ;
_this.clr=parseInt(_this.calClr(temX));
_this.chgVal();
_this.setClrByRGB();
});
};
//移动滑块
this.moveTo=function (x,min,max) {
if(xmin || xmax) return false;
_this.sliBck.css('left',x);
return true;
};
//计算颜色值
this.calClr=function (x) {
return x*255/(_this.sliMax-_this.sliMin);
};
//改变颜色值
this.chgVal=function (c) {
c= c || _this.clr;
_this.numBox.val(c);
};
//停止拖动
this.stopDrag=function () {
_this.doc.unbind('mousemove');
};
//设置颜色
this.setBodyClr=function (hexStr) {
$("body").css('backgroundColor',hexStr);
};
//设置#hexColor
this.setHexClr=function (hexStr) {
hexClrBox.val(hexStr);
};
//setColorByRGB
this.setClrByRGB=function () {
var hexStr=calcHexClr(clrBox.r.val(),clrBox.g.val(),clrBox.b.val());
_this.setBodyClr(hexStr);
_this.setHexClr(hexStr);
};
//绑定mousedown/up事件
this.sliBck.mousedown(function(evt) {_this.startDrag(evt);});
this.numBox.keydown(function(evt) {
if(evt.keyCode==13) {
if(!setPos()) return ;
_this.setClrByRGB();
};
});
this.doc.mouseup(_this.stopDrag);
};
var s1Slt=$("#cR"),s1Bck=$("#cR .slider"),s1Box=$("#cR .showBox"),
s2Slt=$("#cG"),s2Bck=$("#cG .slider"),s2Box=$("#cG .showBox"),
s3Slt=$("#cB"),s3Bck=$("#cB .slider"),s3Box=$("#cB .showBox"),
hexClrBox=$("#hexColor"),sliRag={min:0,max:495},randBtn=$("#randClr");
//创建类的实例
var s1=new slideBar(s1Slt,s1Bck,s1Box,sliRag.min,sliRag.max),
s2=new slideBar(s2Slt,s2Bck,s2Box,sliRag.min,sliRag.max),
s3=new slideBar(s3Slt,s3Bck,s3Box,sliRag.min,sliRag.max),
clrBox={
r:s1.numBox,
g:s2.numBox,
b:s3.numBox
};
//hexColor
hexClrBox.keydown(function(evt) {
if(evt.keyCode==13) {
hexStr=hexClrBox.val();
setClrByHex(hexStr);
};
});
//init
setClrByHex('#ABCDEF');
//由十六进制颜色值来设置
function setClrByHex(hexStr) {
var rgbClr=hexrgb(hexStr);
if(!rgbClr) return false;
s1.numBox.val(rgbClr.r);
s2.numBox.val(rgbClr.g);
s3.numBox.val(rgbClr.b);
setPos();
s1.setHexClr(hexStr);
s1.setBodyClr(hexStr);
};
//设置位置
function setPos() {
var clr={r:parseInt(s1Box.val()),g:parseInt(s2Box.val()),b:parseInt(s3Box.val())};
if(!checkRGB(clr)) return false;
var temp=sliRag.max-sliRag.min;
s1Bck.css('left',clr.r*temp/255);
s2Bck.css('left',clr.g*temp/255);
s3Bck.css('left',clr.b*temp/255);
return true;
};
//randBtn
randBtn.click(function () {
var clrVal={r:0,g:0,b:0}, animTime={r:0,g:0,b:0};
clrVal=objAsn(clrVal,0,495);
animTime=objAsn(animTime,500,800);
//修改并禁用按钮
randBtn.val('生成中…');
randBtn.attr('disabled','true');
//设置动画
crtAnim(s1Bck,{left:clrVal.r},animTime.r);
crtAnim(s2Bck,{left:clrVal.g},animTime.g);
crtAnim(s3Bck,{left:clrVal.b},animTime.b);
//动画时改变颜色及颜色值
var t= setInterval(function() {
rwVal(s1);
rwVal(s2);
rwVal(s3);
s1.setClrByRGB();
},60);
//动画结束后恢复按钮
setTimeout(function() {
randBtn.val('随机产生颜色');
randBtn.removeAttr('disabled');
clearInterval(t);
},findMax(new Array(animTime.r,animTime.g,animTime.b)));
//修改文本框的值
function rwVal(o) {
o.chgVal(parseInt(o.calClr(parseInt(o.sliBck.css("left")))));
};
//创建动画 o:创建动画的元素;c:css集合;t:动画时间
function crtAnim(o,c,t) {
o.animate(c,t,'swing');
};
});
//消息弹出窗口
var infoBtn=$('.infoBtn'),infoBrd=$('#infoBrd'),closeBtn=$('#infoBrd a'),infoIfr=$('#infoBrd iframe');
infoBtn.click(function () {
$('p',{'id':'loadTip',text:'Loading......'}).appendTo(infoBrd);
infoIfr.attr("src",this.href);
infoBrd.toggle('normal');
return false;
});
closeBtn.click(function () {
infoBrd.toggle('fast');
infoIfr.removeAttr("src");
return false;
});
infoIfr.load(function(){
$('p#loadTip').empty();
});
});
Q2: 初学了一段时间Java。想做一个应用程序,程序只需要播放一个本地视频,MP4格式,求教怎么做
使用javafxjava调视频进度代码的Media,MediaPlayer,MediaView。代码如下:
import java.io.File;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ReadOnlyProperty;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.Slider;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaPlayer.Status;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
import javafx.util.Duration;
public class App extends Application {
private MediaView mediaView;
private Slider processSlider;
private static final Object AUTO = new Object(), MANUAL = new Object();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("javafx视频播放器");
BorderPane root = new BorderPane();
// 菜单栏
initMenu(root);
// 视频播放控件
mediaView = initMediaView(root);
// 视频功能控件
initMediaControllView(root);
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.setOnCloseRequest(event - System.exit(0));
primaryStage.show();
}
private MenuBar initMenu(final BorderPane parent) {
Menu menu = new Menu("菜单");
MenuItem item = new MenuItem("打开");
item.setOnAction(event - {
FileChooser chooser = new FileChooser();
chooser.setTitle("选择视频文件");
chooser.getExtensionFilters().add(new ExtensionFilter("视频文件", "*.mp4", "*.flv"));
File file = chooser.showOpenDialog(parent.getScene().getWindow());
if (file != null) {
MediaPlayer player = mediaView.getMediaPlayer();
// 关闭当前java调视频进度代码的player
if (player != null) {
player.stop();
player.dispose();
}
processSlider.setValue(0);
// 创建一个新java调视频进度代码的player并自动播放
player = new MediaPlayer(new Media(file.toURI().toString()));
player.currentTimeProperty().addListener(this::mediaProcessChanged);
player.setAutoPlay(true);
mediaView.setMediaPlayer(player);
}
});
menu.getItems().add(item);
item = new MenuItem("退出");
item.setOnAction(event - parent.getScene().getWindow().hide());
menu.getItems().add(item);
MenuBar menuBar = new MenuBar(menu);
parent.setTop(menuBar);
return menuBar;
}
private MediaView initMediaView(final BorderPane parent) {
MediaView view = new MediaView();
Pane pane = new Pane(view);
parent.setCenter(pane);
// 视频宽高可随着窗口变化而自动缩放
view.fitWidthProperty().bind(Bindings.selectDouble(view.parentProperty(), "width"));
view.fitHeightProperty().bind(Bindings.selectDouble(view.parentProperty(), "height"));
view.setPreserveRatio(true);
return view;
}
private void initMediaControllView(final BorderPane parent) {
VBox bottom = new VBox(10);
bottom.setAlignment(Pos.CENTER);
parent.setBottom(bottom);
Slider slider = new Slider(0, 100, 0);
slider.valueProperty().addListener(this::processSliderChanged);
// slider.setOnMouseClicked(this::processSliderClicked);
bottom.getChildren().add(slider);
processSlider = slider;
HBox hbox = new HBox(10);
bottom.getChildren().add(hbox);
hbox.setAlignment(Pos.CENTER);
Button btn = new Button(null, new ImageView(loadImage("pause.png")));
btn.setOnAction(this::pauseOrPlay);
hbox.getChildren().add(btn);
btn = new Button(null, new ImageView(loadImage("stop.png")));
btn.setOnAction(this::stopPlay);
hbox.getChildren().add(btn);
}
private static Image loadImage(String resPath) {
return new Image(Thread.currentThread().getContextClassLoader().getResourceAsStream(resPath));
}
private void pauseOrPlay(ActionEvent event) {
MediaPlayer player = mediaView.getMediaPlayer();
if (player == null) {
return;
}
Status status = player.getStatus();
if (status == Status.READY || status == Status.PAUSED) {
player.play();
((Button) event.getTarget()).setGraphic(new ImageView(loadImage("pause.png")));
} else if (status == Status.PLAYING) {
player.pause();
((Button) event.getTarget()).setGraphic(new ImageView(loadImage("play.png")));
}
}
private void stopPlay(ActionEvent event) {
MediaPlayer player = mediaView.getMediaPlayer();
if (player == null) {
return;
}
player.stop();
}
// private void processSliderClicked(MouseEvent event) {
// Slider slider = (Slider) event.getSource();
// if (mediaView.getMediaPlayer() != null) {
// Duration d = mediaView.getMediaPlayer().getTotalDuration().multiply(slider.getValue() / slider.getMax());
// mediaView.getMediaPlayer().seek(d);
// }
// }
private void processSliderChanged(ObservableValue? extends Number observable, Number oldValue, Number newValue) {
Slider slider = (Slider) ((ReadOnlyProperty? extends Number) observable).getBean();
if (slider.getUserData() == AUTO) { // 进度条是自动改变的,因此不用设置播放器
slider.setUserData(null);
return;
}
if (mediaView.getMediaPlayer() != null) {
slider.setUserData(MANUAL);
Duration d = mediaView.getMediaPlayer().getTotalDuration().multiply(newValue.doubleValue() / slider.getMax());
mediaView.getMediaPlayer().seek(d);
}
}
private void mediaProcessChanged(ObservableValue? extends Duration observable, Duration oldValue, Duration newValue) {
if (processSlider.getUserData() == MANUAL) { // 手动点击进度条
processSlider.setUserData(null);
return;
}
MediaPlayer player = (MediaPlayer) ((ReadOnlyProperty? extends Duration) observable).getBean();
processSlider.setUserData(AUTO);
processSlider.setValue(newValue.toMillis() / player.getTotalDuration().toMillis() * 100);
}
}
Q3: JAVA的JMF如何实现从特定时间点开始播放并结束于特定时间点
哦java调视频进度代码,java调视频进度代码我之前学习时候用swing写过一个播放器java调视频进度代码,带播放进度条和播放模式,不过界面不好看。
部分代码也许对你有帮助。
方法一
/**
* 开始播放songList集合中第index首歌曲,并返回播放路径
* @param mpf
* @param b(b为真则播放第index首,如果为假则播放原来那首)
* @return
*/
public static String playBegin(MediaPlayerFrm mpf,int b,Time time) {
mpf.btnBegin.setText("播放");
if (mpf.index 0) {
return null;
}
// 如果当时没有音乐播放就走上面-----如果当时有音乐在播放就走下面
if (!mpf.isSing) {
mpf.singing = mpf.songVec.get(mpf.index);
mpf.af = new AudioFile(mpf.singing);
mpf.af.play();
} else{
System.out.println("cut------------换个歌");
// 辞旧
playEnd(mpf);
// 迎新
//如果是1,就是按index播放,如果是2就播放原来那首歌,如果是3就按time播放原来那首歌
if(b==1){
mpf.singing = mpf.songVec.get(mpf.index);
mpf.af = new AudioFile(mpf.singing);
mpf.af.play();
}else if(b==2){
mpf.af = new AudioFile(mpf.singing);
mpf.af.play();
}else if(b==3){
mpf.af = new AudioFile(mpf.singing);
mpf.af.getPlayer().setMediaTime(time);
mpf.af.play();
}
}
mpf.btnBegin.setText("暂停");
mpf.isSing = true;
// 线程2,控制进度条和时间
new Thread(new PlayThread(mpf)).start();
// 线程1,时刻检查歌曲是否唱完
new Thread(mpf).start();
return mpf.singing;
}
方法二 这个是当点击进度条的时候让播放器在新的位置播放文件
public void mouseClicked(MouseEvent e) {
if(e.getSource()==btnLeft){
if(e.getX()=3){
playBegin(this,2,null);
return;
}
if(!isSing||changeless==0.0){
return;
}
int newBorderline=e.getX()-3;
setSchedule(this, newBorderline);
//设置新的播放位置
double newLoc=changeless*(newBorderline*1.0/300);
JOptionPane.showMessageDialog(this, newLoc);
if(newLoc==0.0){
return;
}
//把player停掉
af.getPlayer().stop();
Time newTime=new Time(1);
// playBegin(this,3,new Time(newLoc));
}
}
从上次关掉时结束的1分19秒开始,然后播到2分33秒的时候结束,
可以将关闭时候播放前播放的歌曲和时间持久在文件中,在每次打开播放器就读取文件。
至于需要在两个时间段中,循环,可以在播放的时候,开启一个子进程,让子进程去监控时间。
Q4: java实现进度条
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class Test extends JFrame {
public Test(){
super();
setSize(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
JProgressBar progressBar = new JProgressBar();
getContentPane().add(progressBar,BorderLayout.NORTH);
progressBar.setStringPainted(true);
for (int i = 0;i 50;i++){
progressBar.setValue(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Test();
}
}
for循环里面加java调视频进度代码了个延时函数。
Q5: java播放器进度条
你可以去网上尝试下载些第三方控件,会直接有的。或者自己创建一个带进度条的窗口javaJProgressBar progress=new JProgressBar(200,200);//构造函数 progress.setStringPainted(true);//指定是否要在进度条内显示文字 progress.setBorderPainted(true);//指定是否绘制进度条边界 progress.setString("wait");//在进度内显示文字 1
java调视频进度代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 视频处理、java调视频进度代码的信息别忘了在本站进行查找喔。







