初学了一段时间Java。想做一个应用程序,程序只需要播放一个本地视频,MP4格式,求教怎么做

装了eclipse。。。求代码,或者教程也行,只需要完成以上条件。。十分感谢,急求

使用javafx的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();
         // 关闭当前的player
         if (player != null) {
         player.stop();
         player.dispose();
         }
         processSlider.setValue(0);
         // 创建一个新的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);
}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-10-05
JAVA 对 视频的支持,太有限了。。。。。。。没法直接播放。

~

~

~

~

~
第2个回答  2015-04-25
把文件流,跟多媒体的那些资料先看熟再说。。求你妹的代码。。给你也看不懂。。估计追问

哦,多谢指点!

本回答被提问者采纳

初学了一段时间Java。想做一个应用程序,程序只需要播放一个本地视频...
使用javafx的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...

求教:一些视频格式的比较
打个比方,格式1可能是把这一秒的视频和这一秒音频放在一起,下一秒的视频和下一秒音频放在一起……一直到文件结束;格式2可能是把所有的视频和音频单独存放,这一段文件内容是完整的视频,那一段文件内容是完整的音频;格式3是……这样,同样的临时文件,经过不同的封装就变成不同的样子了。而md5只跟...

mp4格式和编码格式例如utf-8的详细解释。 想将一个mp4格式的视频文件...
如果手机播放,就不需要M3U8文件,直接把要播放的视频文件(如RMVB)转换成mp4,然后导入到手机就可以了。

MP5不能播放MP4格式视频
直接用格式工厂转换rmvb或者其他格式就用mp5打开了。。记得好像mp5除了mp4格式外其他都可以播放的

MP5不能播放MP4格式视频
直接用格式工厂转换rmvb或者其他格式就用mp5打开了。。记得好像mp5除了mp4格式外其他都可以播放的

7z格式的视频怎么看
材料\/工具:7z转换工具 操作如下:1、打开7z转换工具,选择提取选项。2、在弹出的窗口中选择7z格式的视频保存的位置,选择确定。3、这样就会得到一个mp4格式的视频,点击打开。4、mp4对应的打开方式,如下图。5、这样就可以正常观看了。

求教啊!急急急急!!怎么在ipad里面播放视频?
第一,因为电影所存位置不在迅雷或是oplayer文件夹,所以不行。想在那里看,需要在itunes应用程序同步的界面下,向下看,有个部分程序列表,肯定有迅雷和oplayer,旁边有个空白,你先选程序,然后把电影拖进去就行。(这个不越狱就行)第二,ipad本身视频播放好像不行,但是你装的播放器应该支持的,你...

电脑视频exe格式怎么才能转化到手机上可以看???求教啊!!!
1、首先打开录像专家,然后点击软件工具栏上的“工具”,点击“EXE\/LXE转成AVI” 如图。2、在弹出的设置窗口中,点击选择需要转换的视频文件,然后打钩“自动扩帧” ,在点击“转换” 如图。3、这时候会弹出一个设置转换好的视频文件存放的位置,然后点击“保存” 如图。4、在弹出的视频压缩设置窗口中...

sony摄像机拍出来的格式有的是mxf,有的是mp4?
sony摄像机拍出来的格式是mxf,也可以转换。MXF是英文MaterialeXchangeFormat(素材交换格式)的缩语。MXF是SMPTE(美国电影与电视工程师学会)组织定义的一种专业音视频媒体文件格式。MXF主要应用于影视行业媒体制作、编辑、发行和存储等环节。也许需要等一段时间,就像物理学家牛顿提出的惯性定律:除非受到外力...

我用XY助手导入了一个MP4的视频在苹果上,可是视频软件里面没有找到,
首先下载安装爱思助手PC版,连接好以后点击“我的设备”-“视频”。2.如下图所示,在默认的几个播放器中选择一个你喜欢的安装,我们以AcePlayer为例。3.安装完以后,就可以导入你想要的视频进行观看了;点击上方“导入”“导出”按钮,然后选择你需要导入导出的视频即可,支持7种格式视频导入(mp4、mov...

相似回答