在Java中播放音視頻可以使用多種方案,最常見的是通過Swing組件JFrame和JLabel來嵌入JMF(Java Media Framework)或Xuggler。不過,JMF已經不再被推薦使用,而Xuggler是基于DirectX的,不適用于跨平臺。而且上述方案都需要使用第三方庫。
在JDK 8.0版本中,一個最簡單的音視頻播放器跨平臺解決方案是使用JavaFX,它提供了MediaPlayer類來播放音視頻。
JavaFX 最初是由 Oracle 推出的一個用于開發富客戶端應用程序的框架,它提供了豐富的用戶界面控件、布局容器、3D圖形繪制、音視頻媒體播放和動畫等功能,旨在取代較舊的 Swing 框架。JavaFX 于 2007 年推出,2011 年 10 月發布了2.0 版本。JavaFX 2.0 的一個優點是適用于跨平臺,而且可以完全用 Java 語言編寫代碼。
2014年發布的JDK 8.0就包含了JavaFx 2.0 版本。然而,隨著時間的發展和技術的變遷,JavaFx 2.0并未達到預期目標,而且在與其他的技術標準竟爭中處于下風。從 JDK 11 開始,Oracle 決定不再將 JavaFX 包含在 JDK 中,如有需要JavaFX必須單獨下載和使用。
盡管如此,JavaFX 仍然是一個強大的開發工具,開發者可用它來設計、編寫、測試、調試和部署富客戶端程序,支持跨平臺使用。
以下是在JDK 8.0版本使用JavaFX實現音視頻播放器的例程:
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
public class SimpleVideoPlayer extends Application {private static final String PATH = "D:/Temp/太極拳.mp4"; //private static final String PATH = "D:/Temp/大約在冬季.mp3";@Overridepublic void start(Stage stage) {// 創建媒體播放器Media media = new Media(new File(PATH).toURI().toString());MediaPlayer mediaPlayer = new MediaPlayer(media);mediaPlayer.setAutoPlay(true); // 設置自動播放// 創建媒體視窗MediaView mediaView = new MediaView(mediaPlayer);// 創建根框架窗口布局StackPane root = new StackPane();root.getChildren().add(mediaView);// 創建場景Scene scene = new Scene(root, 800, 600);// 設置舞臺stage.setScene(scene);stage.setTitle("最簡視頻播放器");stage.show();}public static void main(String[] args) {launch(args);}
}
在上面的代碼中,我們首先創建了一個媒體Media對象,其中PATH表示視頻文件的路徑。然后,我們創建了一個媒體播放器MediaPlayer對象,并將媒體Media對象作為參數傳入。接下來,我們創建了一個MediaView對象,用于顯示視頻內容。然后,我們創建了一個根框架窗體和場景,并將MediaView添加到場景中。最后,我們設置舞臺。通過設置MediaPlayer的自動播放功能來播放視頻。
說明:
在JDK中不包含JavaFX的時代,Java編程如果沒有第三方庫的支持是無法正常播放mp3音頻文件的。但是有了JavaFX 2.0 一切皆有可能。在本例程中,如果提供一個mp3的文件路徑,就可正常播放音頻文件。修改一行代碼,就能播放音樂。
private static final String PATH = “D:/Temp/大約在冬季.mp3”;
下面是播放視頻的截屏:
說明:
很多博文都認為,JavaFX支持多種視頻格式,包括常見的MP4、AVI、FLV等格式。下面是我的測試情況:MP4格式的視頻是能播放,但有一些MP4視頻未顯示圖像也沒報錯,原因未知。測試了AVI、RMVB格式的視頻,都不能正常播放,報“不支持的格式”例外錯誤。
JavaFX 2.0 支持的音頻和視頻格式如下: