【多媒体】Java实现MP4视频播放器【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"; @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的自动播放功能来播放视频。
下面是播放页面的截屏:


说明:
很多博文都认为,JavaFX支持多种视频格式,包括常见的MP4、AVI、FLV等格式。下面是我的测试情况:MP4格式的视频是能播放,但有一些MP4视频未显示图像也没报错,原因未知。测试了AVI、RMVB格式的视频,都不能正常播放,报“不支持的格式”例外错误。
相关文章:
【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】
在Java中播放视频可以使用多种方案,最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过,JMF已经不再被推荐使用,而Xuggler是基于DirectX的,不适用于跨平台。而且上述方案都需要使用第三方库。…...
2024 Parallels Desktop for Mac 功能介绍
Parallels Desktop的简介 Parallels Desktop是一款由Parallels公司开发的桌面虚拟化软件,它允许用户在Mac上运行Windows和其他操作系统。通过强大的技术支持,用户无需重新启动电脑即可在Mac上运行Windows应用程序,实现了真正的无缝切换。 二…...
颍川韩氏,来自战国七雄韩国的豪族
颍川是战国七雄韩国故土,韩国被秦国灭国后,王公贵族们除了坚决反秦的被杀了外,大部分都留存了下来。这些人在楚、汉反秦战争中,成为反秦统一战线的重要力量,其中两人先后被封为重新恢复的韩国的国王。 一个是横阳君韩…...
Spring boot中如何使用Thymeleaf模板
大家好,我是 网创有方。今天给大家分享下Spring boot中如何使用Thymeleaf模板。 在 IntelliJ IDEA 中使用 Thymeleaf 模板引擎来开发 Spring Boot 应用程序是相对简单的。以下是一些基本步骤,帮助你在 IDEA 中设置和使用 Thymeleaf: 创建一个…...
单片机学习(14)--DS18B20温度传感器
DS18B20温度传感器 13.1DS18B20温度传感器基础知识1.DS18B20介绍2.引脚及应用电路3.内部结构框图4.存储器框图5.单总线介绍6.单总线电路规范7.单总线时序结构8.DS18B20操作流程9.DS18B20数据帧 13.2DS18B20温度读取和温度报警器代码1.DS18B20温度读取(1)…...
ue 材质贴图Tiling repeat
材质问题,如下 贴图显然不符合逻辑,太大,并且是一次性贴图 换一个红砖纹理,就看清了,砖太大了 修改: 拖出一个TexCoord,代表坐标,拖出一个参数,代表次数,如…...
【图像超分辨率】一个简单的总结
文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率?2 图像超分辨率通常有哪些方法?(1)基于插值的方法(2)基于重建的方法(3)基于学习的方法(LR im…...
WEB与低代码:B/S架构在开发中的应用与优势
在互联网迅猛发展的今天,WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化,开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构(Browser/Server Architecture)作为一种常见的WEB应用架构…...
内容营销专家刘鑫炜揭秘:姜萍一夜暴红背后的品牌传播密码
在互联网的浪潮下,品牌传播的方式愈发多样和复杂。近日,江苏省涟水中等专业学校的十七岁中专生姜萍因在世界级数学竞赛中取得优异成绩而一夜暴红,成为网络上的热议焦点。 在这个充满变数的时代,谁也无法预测下一个网红会是谁。然…...
安装VEX外部编辑器
Houdini20配置VEX外部编辑器方法_哔哩哔哩_bilibili 下载并安装Visual Studio Code软件:Download Visual Studio Code - Mac, Linux, Windows 在Visual Studio Code软件内,安装相关插件,如: 中文汉化插件vex插件 安装Houdini Expr…...
ISO 19110全局要求类/req/global/bound-association-role要求的详细解释
/req/global/bound-association-role 要求: 如果模型允许在一个关联角色(association role)中存在“rolePlayer”关联,并且该角色属于一个“globalProperty”角色,那么这种绑定必须通过一个绑定的关联角色实体(bound …...
武汉凯迪正大等简述电缆电容检测:原理、应用与重要性
为了确保电缆的安全稳定运行评估电缆绝缘质量以及检测潜在故障,需要对电缆做一些必要的检测。本文将依照凯迪正大的一些经验对电缆电容检测的原理、应用及其重要性进行简单的序述。 一、电缆电容检测的原理 电缆电容检测基于电容的基本特性,电容是指两个…...
python调用阿里云OSS对象存储
1)安装SDK import oss2 print(oss2.__version__) 如果能返回SDK版号,则安装成功 2)配置访问凭证 import oss2 from project1 import settings #以下参数在阿里云账号中可以查到 auth=oss2.Auth(settings.ACCESS_KEY_ID, settings.ACCESS_KEY_SECRET) endpoint=settings.E…...
530、二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 代码如下: class Solution { private: int result INT_MAX; TreeNode* pre NULL; void traversal(TreeNode…...
docker配置redis主从复制
下载redis,复制redis.conf 主节点(6379) 修改redis.conf # bind 127.0.0.1 # 注释掉这里 protected-mode no # 改为no port 6379从节点(6380) 修改redis.conf bind 127.0.0.1 protected-mode no # 改为no port 6380 replicaof 172.17.0.2 6379 # 这里的ip为主节点容器的i…...
IPython调试秘籍:pdb调试器深度解析与实战
🐞 IPython调试秘籍:pdb调试器深度解析与实战 在Python编程中,调试是开发过程中不可或缺的一环。IPython,作为一个强大的交互式Python解释器,内置了pdb调试器,使得代码调试变得异常便捷。本文将深入探讨如…...
MySQL 死锁处理
查询是否锁表 SHOW OPEN TABLES WHERE In_use > 0; 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 查看进程信息 SHOW PROCESSLIST; 或者 SELECT * FROM INFORMATION_SCHE…...
scatterlist的相关概念与实例分析
概念 scatterlist scatterlist用来描述一块内存,sg_table一般用于将物理不同大小的物理内存链接起来,一次性送给DMA控制器搬运 struct scatterlist {unsigned long page_link; //指示该内存块所在的页面unsigned int offset; //指示该内存块在页面中的…...
leetCode.97. 交错字符串
leetCode.97. 交错字符串 题目思路 代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int n s1.size(), m s2.size();if ( s3.size() ! n m ) return false;vector<vector<bool>> f( n 1, vector<bool> (m 1));s1 …...
算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型
数字经济时代,算力成为支撑经济社会发展新的关键生产力,全球主要经济体都在加快推进算力战略布局。随着大模型持续选代,模型能力不断增强,带来算力需求持续增长。算力对数字经济和GDP的提高有显著的带动作用,根据IDC、…...
任务1:验证中间件的4个【钩子】函数任务2:验证CBV,和FBV做比较
建设如下文件目录格式配置根项目 urls.py(django_gate_demo/urls.py)from django.contrib import admin from django.urls import path, includeurlpatterns [path(admin/, admin.site.urls),# 集成演示应用路由path(, include(app_demo.urls)), ]配置d…...
ElevenLabs成年男性语音定制全流程(含Stability Score阈值表+Voice Embedding相似度热力图)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs成年男性语音定制的核心价值与适用边界 ElevenLabs 的成年男性语音定制能力,本质上是通过深度神经声码器与说话人嵌入(speaker embedding)联合建模实现的高…...
ElevenLabs奥里亚文语音SDK集成终极 checklist:从Unicode 13.0字符兼容性到Odia Conjunct Glyph渲染异常修复
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs奥里亚文语音SDK集成终极 checklist:从Unicode 13.0字符兼容性到Odia Conjunct Glyph渲染异常修复 Unicode 13.0 兼容性验证 ElevenLabs v4.2.1 SDK 默认支持 Unicode 13.0&…...
上蔡假发定制亲测:这家2026年稳
在假发定制领域,用户普遍面临三大核心挑战:其一,传统假发产品在逼真度与舒适度之间难以平衡。数据显示,超过65%的消费者反映佩戴假发后出现头皮闷热、出汗不适等问题,尤其在夏季或运动场景下,透气性与防水性…...
AssetStudio实战指南:解锁Unity游戏资源的完整解决方案
AssetStudio实战指南:解锁Unity游戏资源的完整解决方案 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and additional…...
独立开发者如何利用Taotoken Token Plan套餐优化项目成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken Token Plan套餐优化项目成本 对于独立开发者或小型项目团队而言,在拥抱大模型能力的同时&…...
实验室小白避坑指南:在浪潮AiStation上从零部署PyTorch项目(含离线环境打包)
实验室科研实战:浪潮AiStation离线部署PyTorch全流程解析 当实验室服务器遭遇网络隔离与资源限制时,如何高效部署深度学习项目成为每个科研新手的必修课。本文将针对浪潮AiStation平台的特殊性,系统梳理从环境准备到代码运行的完整闭环&#…...
Verilog时钟分频:从原理到工程实践,避坑指南与最佳方案
1. 项目概述:为什么时钟分频是数字设计的基石在数字电路和FPGA设计里,时钟信号就像是整个系统的心跳。它驱动着寄存器、状态机和数据流,确保所有操作在正确的节拍下同步进行。但现实情况是,我们手头的时钟源往往只有一个固定的频率…...
ARM TLBIP指令解析与应用实践
1. ARM TLBIP指令深度解析在ARMv8/v9架构中,TLB(Translation Lookaside Buffer)作为内存管理单元(MMU)的核心组件,负责缓存虚拟地址到物理地址的转换结果。当页表发生变更时,必须及时使TLB中对应的缓存条目失效,以确保内存访问的正…...
智芯MCU开发环境实战:从零搭建Keil与JLink生态
1. 环境准备:从零开始的智芯MCU开发之旅 第一次拿到智芯Z20K1x系列开发板时,我和大多数嵌入式开发者一样,迫不及待想点亮第一个LED。但现实往往比想象复杂——当我打开Keil准备大展拳脚时,发现芯片列表里根本找不到智芯的身影。这…...
