终于要放视频了!!!
从第一 次博客我就说要放视频,然后一直拖,一直拖。。。然后考试加磕盐加旅游。。。结果年都过了我还没把视频放出来。。。
(拖延症害死人啊!!!!)
今天我们真的来播放视频。JavaFX提供Media类用来表示多媒体(音视频),用MediaPlayer类播放音视频,再用一个MediaView类显示视频。它们都在javafx.scene.media中。使用时大致关系如下:
Media –> MediaPlayer –> MediaView
首先是Media类。Media类可以说是非常突出JavaFX为互联网应用而设计(虽然就是流行不起来)的特性了。Media类只能用URL来初始化,这给我们后面打开本地多媒体带来了一点小麻烦,网络上其他不少博客都提到了这个事情。待会我说如何解决。只是因为这个,我们会先播放网络上的流媒体。
这些类的初始化可以这样做:
String url = "http://www.gov.cn/guoqing/guoge/hc.mp3";
Media media = new Media(url);
MediaPlayer mplayer = new MediaPlayer(media);
MediaView mView = new MediaView(mplayer);
我相信有我前面3篇博客的铺垫,大家都能看懂以上代码了吧(笑)。如果大家懒得敲代码,我就把代码全贴上。。。
(温馨提示:测试的是MP3音频,大家听之前请起立。)
import javafx.application.Application;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
public class TestMediaDemo extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage){
String url = "http://www.gov.cn/guoqing/guoge/hc.mp3";
Media media = new Media(url);
MediaPlayer mplayer = new MediaPlayer(media);
MediaView mView = new MediaView(mplayer);
System.out.println(media.getSource());
Pane pane = new Pane();
pane.getChildren().add(mView);
mView.fitHeightProperty().bind(pane.heightProperty());
mView.fitWidthProperty().bind(pane.widthProperty());
Scene scene = new Scene(pane,640,360);
primaryStage.setTitle("MediaDemo");
primaryStage.setScene(scene);
primaryStage.show();
mplayer.play();
}
}
emmmm…
说好的测试视频人类圣经京紫纪元呢??emmm,请把url那行换成以下代码:
String url = "https://cn-sxxa-dx-v-02.acgvideo.com/vg1/6/2a/29662087-1-16.mp4?expires=1515985200&platform=flash&ssig=h3iTfwrKcM-DK2wB87aWpA&oi=2087966946&nfa=hno/XSvDsQc4EM4Yi2jKaw==&dynamic=1&hfa=2020138098&hfb=YzczMmRlMTk4ZTRhNzhlZGE4YTlmM2QzZTAxYzYyOTE=";
当我们想打开本地文件时,把这个URL替换成文件名是没用的,等着抛出异常吧;换成“file:文件名”还是没用的,等着抛出异常吧;换成“file:\文件名”更是没用的,等着抛出异常吧^_^。
一个主要原因是,JavaFX是为互联网应用设计的,所以对本地文件,也要改成URL格式,可本地文件的URL是什么呢?
幸好Java提供了为文件求URL的方法:
java.io.File file = new java.io.File("media\\Twinkle_Snow.mp4"); //关于这个视频是什么,我只能说无可奉告
url = file.toURI().toString();
我专门用一个System.out.println把这个本地文件的URL输出来:
file:/E:/java/VideoDemo/media/Twinkle_Snow.mp4
我真的是Windows啊!!!奈何Java只想要正斜杠呢。。。