【多媒體】Java實現MP4和MP3音視頻播放器【JavaFX】【音視頻播放】

在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 支持的音頻和視頻格式如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39751.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

拒絕信息差!一篇文章說清Stable Diffusion 3到底值不值得沖

前言 就在幾天前,Stability AI正式開源了Stable Diffusion 3 Medium(以下簡稱SD3M)模型和適配CLIP文件。這家身處風雨飄搖中的公司,在最近的一年里一直處于破產邊緣,就連創始人兼CEO也頂不住壓力提桶跑路。 即便這樣&…

[leetcode]minimum-absolute-difference-in-bst 二叉搜索樹的最小絕對差

. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null…

java如何在字符串中間插入字符串

java在字符串中插入字符串,需要用到insert語句 語法格式為 sbf.insert(offset,str) 其中,sbf是任意字符串 offset是插入的索引 str是插入的字符串 public class Insert {public static void main(String[] args) {// 將字符串插入到指定索引StringBuffer sbfn…

FFmpeg5.0源碼閱讀——格式檢測

摘要:在拿到一個新的格式后,FFmpeg總是能夠足夠正確的判斷格式的內容并進行相應的處理。本文在描述FFmpeg如何進行格式檢測來確認正在處理的媒體格式類型,并進行相應的處理。 ??關鍵字:FFmpeg,format,probe 在調用FFmpeg的APIav…

變量的定義和使用

1.定義 變量,就是用來表示數據的名字 Python 中定義變量非常簡單,只需將數據通過等號()賦值給一個符合命名規范的標識符即可 name"Camille" name 123 變量的使用 變量的使用是指在程序中引用一個已經定義的變量。 例如,如果…

LeetCode 196, 73, 105

目錄 196. 刪除重復的電子郵箱題目鏈接表要求知識點思路代碼 73. 矩陣置零題目鏈接標簽簡單版思路代碼 優化版思路代碼 105. 從前序與中序遍歷序列構造二叉樹題目鏈接標簽思路代碼 196. 刪除重復的電子郵箱 題目鏈接 196. 刪除重復的電子郵箱 表 表Person的字段為id和email…

昇思MindSpore學習總結七——模型訓練

1、模型訓練 模型訓練一般分為四個步驟: 構建數據集。定義神經網絡模型。定義超參、損失函數及優化器。輸入數據集進行訓練與評估。 現在我們有了數據集和模型后,可以進行模型的訓練與評估。 2、構建數據集 首先從數據集 Dataset加載代碼&#xff0…

檢測站機動車授權簽字人試題附答案

16、___的輪胎胎冠上花紋深度不得小于3.2mm。( ) A、乘用車 B、摩托車 C、貨車的轉向輪(正確答案) D、掛車 17、最大設計時速≥100km/h的機動車其轉向盤自由轉動量不大于__。( ) A、30 度 B、20 度(正確答案) C、45 度 D、40度…

在windows上安裝objection

安裝命令pip install objection -i https://mirrors.aliyun.com/pypi/simple hook指定進程 objection -g 測試 explore 進程名不定是包名,也可能是app名字,如“測試”就是app的名字 若出現如下錯誤,說明python 缺少setuptools 直接安裝setu…

擲骰子游戲 、 求絕對值,平方根,對數,正弦值 題目

題目 JAVA33 擲骰子游戲分析:代碼: JAVA34 求絕對值,平方根,對數,正弦值分析:代碼: JAVA33 擲骰子游戲 描述開發一個擲骰子游戲,即每次運行程序時,產生一個[1,6]之間的隨…

秋招突擊——設計模式補充——單例模式、依賴倒轉原則、工廠方法模式

文章目錄 引言正文依賴倒轉原則工廠方法模式工廠模式的實現簡單工廠和工廠方法的對比 抽線工廠模式最基本的數據訪問程序使用工廠模式實現數據庫的訪問使用抽象工廠模式的數據訪問程序抽象工廠模式的優點和缺點使用反射抽象工廠的數據訪問程序使用反射配置文件實現數據訪問程序…

檢索增強生成RAG系列6--RAG提升之查詢結構化(Query Construction)

系列5中講到會講解3個方面RAG的提升,它們可能與RAG的準確率有關系,但是更多的它們是有其它用途。本期來講解第二部分:查詢結構化(Query Construction)。在系列3文檔處理中,我們著重講解了文檔解析&#xff…

C++ dll導出類的方法

要在C動態庫中導出類,可以使用以下步驟: 定義一個類并實現其成員函數。在類的聲明前加上__declspec(dllexport)標記(Windows平臺)或__attribute__((visibility("default")))標記(Linux平臺)&…

C語言學習筆記--第一個程序

第一個C語言程序 #include<stdio.h> //引用輸入輸出頭文件&#xff0c;每一次都需要引用這個文件 //.h是頭文件 // .c是源文件 // .cpp是C源文件&#xff0c;兼容C //C的第一個程序 // 行注釋&#xff08;只能注釋這一行&#xff09; /*塊注釋 */ int main() {printf(&…

能保存到相冊的風景視頻在哪下載?下載風景視頻網站分享

在當今以視覺為核心的時代&#xff0c;高清美麗的風景視頻不僅能夠豐富我們的日常生活&#xff0c;還能提供心靈上的慰藉。無論是為了制作視頻項目&#xff0c;還是僅僅想要珍藏一些精美的風景畫面&#xff0c;獲取高質量的風景視頻素材顯得尤為重要。許多人可能會問&#xff1…

PTrade量化軟件常見問題整理系列2

一、研究界面使用get_fundamentals函數報錯&#xff1a;error_info:獲取token失敗&#xff1f; 研究界面使用get_fundamentals函數報錯&#xff1a;error_info:獲取token失敗&#xff1f; 1、測試版本202202.01.052&#xff0c;升級202202.01.051版本后&#xff0c;為了解決不…

在虛擬仿真中學習人工智能,可以達到什么目標?

人工智能已經成為引領社會創新的關鍵力量&#xff0c;想要在這個充滿機遇的領域中脫穎而出&#xff0c;掌握扎實的專業技能和積累豐富的實踐經驗至關重要。然而&#xff0c;許多學習者在追求這一目標的過程中面臨著幾個主要問題&#xff1a;專業技術掌握有難度、實踐經驗積累存…

linux中awk,sed, grep使用

《linux私房菜》這本書中將sed和awk一同歸為行的修改這一點&#xff0c;雖然對&#xff0c;但不利于實際處理問題時的思考。因為這樣的話&#xff0c;當我們實際處理問題時&#xff0c;遇到比如說統計文本打印內容時&#xff0c;我們選擇sed還是awk進行處理呢&#xff1f; 也因…

?香橙派AIpro測評:usb魚眼攝像頭的Camera圖像獲取

一、前言 近期收到了一塊受到業界人士關注的開發板"香橙派AIpro",因為這塊板子具有極高的性價比&#xff0c;同時還可以兼容ubuntu、安卓等多種操作系統&#xff0c;今天博主便要在一塊832g的香橙派AI香橙派AIpro進行YoloV5s算法的部署并使用一個外接的魚眼USB攝像頭…

React 中如何使用 Monaco

Monaco 是微軟開源的一個編輯器&#xff0c;VSCode 也是基于 Monaco 進行開發的。如果在 React 中如何使用 Monaco&#xff0c;本文將介紹如何在 React 中引入 Monaco。 安裝 React 依賴 yarn add react-app-rewired --dev yarn add monaco-editor-webpack-plugin --dev yarn…