JavaFX provides a media-rich API capable of playing audio and video. The Media API allows developers to incorporate audio and video into their Rich Internet Applications (RIAs). One of the main benefits of the Media API is that it can distribute cross-platform media content via the Web. With a range of devices (tablet, music player, TV, and so on) that need to play multimedia content, the need for a cross-platform API is essential.
Imagine a not-so-distant future where your TV or wall is capable of interacting with you in ways that yoursquo;ve never dreamed possible. For instance, while viewing a movie, you could select items of clothing used in the movie to be immediately purchased, all from the comfort of your home. With this future in mind, developers seek to enhance the interactive qualities of their media-based applications.
In this chapter, you will learn how to play audio and video in an interactive way. Find your seats as audio and video take center stage.
You will learn about the following JavaFX media APIs:
- javafx.scene.media.Media
- javafx.scene.media.MediaPlayer
- javafx.scene.media.MediaStatus
- javafx.scene.media.MediaView
Media Events
An event-driven architecture (EDA) is a prominent architectural pattern used to model loosely coupled components and services that pass messages asynchronously. The JavaFX team designed the Media API to be event-driven. In this section, you learn how to interact with media events.
With event-based programming in mind, you will discover nonblocking or callback behaviors when invoking media functions. Instead of typing code directly to a button via an EventHandler, you will be implementing code that will respond to the triggering of the media playerrsquo;s OnXXXX events, where XXXX is the
event name.
When responding to media events, you will implement java.lang.Runnable functional interfaces (lambda expressions). These functional interfaces are callbacks that are lazily evaluated or invoked at a later time upon a triggered event. For instance, when playing media content, you would create a lambda expression to be set on the OnReady event. For an example of playing media based on an event-driven approach, see the following code block:
Media media = new Media(url);
MediaPlayer mediaPlayer = new MediaPlayer(media); Runnable playMusic = () -gt; mediaPlayer.play(); mediaPlayer.setOnReady(playMusic);
copy; Carl Dea, Gerrit Grunwald, Joseacute; Pereda, Sean Phillips and Mark Heckler 2017 C. Dea et al., JavaFX 9 by Example, DOI 10.1007/978-1-4842-1961-4_9
283
As you can see, the playMusic variable is assigned to a lambda expression (Runnable) to be passed into the media playerrsquo;s setOnReady() method. When the OnReady event has been encountered, the playMusic Runnable closure code would be invoked. Although I have not yet discussed how to set up the Media and MediaPlayer class instances, I wanted to first get you acquainted with these core concepts before moving further, because these concepts are used throughout this chapter.
Table 9-1 shows all the possible media events that are raised to allow the developer to attach Runnables
(or EventHandlers). All the following are Runnable functional interfaces except for the OnMarker event.
Table 9-1. Media and MediaPlayer Events
Class |
On Event Method |
On Event Property Method |
Description |
||||||||||||||||||||||||||||||||||||||||||||||||
Media |
setOnError() |
onErrorProperty() |
When an error occurs |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnEndOfMedia() |
onEndOfMediaProperty() |
When the end of the media play is reached |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnError() |
onErrorProperty() |
When an error occurs; status becomes MediaPlayer.Status HALTED |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnHalted() |
onHaltedProperty() |
When the media status changes to HALTED |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnMarker() |
onMarkerProperty() |
When a Marker event is triggered |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnPaused() |
onPausedProperty() |
When the status is MediaPlayer. Status.PAUSED |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnPlaying() |
onPlayingProperty() |
When the media is currently playing. When the status is MediaPlayer.Status PLAYING |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnReady() |
onReadyProperty() |
When the media player is in Ready state. When the status is MediaPlayer.Status READY |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnRepeat() |
onRepeatProperty() |
Event handler invoked when the player currentTime reaches stopTime and will be repeating. This callback is made prior to seeking back to startTime |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnStalled() |
onStalledProperty() |
When the media status changes to STALLED |
||||||||||||||||||||||||||||||||||||||||||||||||
MediaPlayer |
setOnStopped() |
onStoppedProperty() |
剩余内容已隐藏,支付完成后下载完整资料 JavaFX提供了一个能够播放音频和视频的媒体丰富的API。媒体API允许开发者将音频和视频整合到他们丰富的互联网应用程序中(ria)。媒体API的主要好处之一是它可以通过网络发布跨平台的媒体内容。有了需要播放多媒体内容的一系列设备(平板电脑、音乐播放器、电视等等),对跨平台API的需求是必不可少的。 想象一个不那么遥远的未来,你的电视或墙壁能够以你从未想过的方式与你互动。例如,在看电影的时候,你可以选择电影中使用的衣服,这些衣服都是在你家里的舒适的地方买的。有了这个未来,开发人员就会寻求增强他们的基于媒体的应用程序的交互特性。 在这一章中,您将学习如何以交互的方式播放音频和视频。在音频和视频的中心位置找到你的座位。 您将了解以下JavaFX媒体api:
媒体活动 事件驱动架构(EDA)是一种突出的体系结构模式,用于对松散耦合的组件和服务进行异步传递。JavaFX团队设计了媒体API以事件驱动。在本节中,您将学习如何与媒体事件交互。 在考虑基于事件的编程时,您将在调用media函数时发现非阻塞或回调行为。您将会实现对媒体播放器的OnXXXX事件的触发响应的代码,而不是直接通过EventHandler直接输入代码,而在这里,XXXX是 事件的名称。 在响应媒体事件时,您将实现java.lang。可运行的功能接口(lambda表达式)。这些功能接口是在触发事件后延迟评估或调用的回调。例如,在播放媒体内容时,您将创建一个lambda表达式,以便在OnReady事件上设置。对于基于事件驱动方法的媒体来说,请参见下面的代码块: Media media = new Media(url); MediaPlayer mediaPlayer = new MediaPlayer(media); Runnable playMusic = () -gt; mediaPlayer.play(); mediaPlayer.setOnReady(playMusic); 正如您所看到的,playMusic变量被分配给lambda表达式(Runnable),以传递给媒体播放器的setOnReady()方法。当遇到OnReady事件时,将调用playMusic Runnable关闭代码。尽管我还没有讨论如何设置媒体和MediaPlayer类实例,但我想先让您了解这些核心概念,然后再进一步讨论,因为这些概念在本章中都有使用。 表9-1显示了所有可能的媒体事件,这些事件是为了让开发人员能够附加Runnables (或事件)。除了OnMarker事件之外,所有下列都是可运行的功能接口。 媒体和媒体播放器的事件
播放音频 JavaFX的媒体API支持加载带有扩展名的音频文件,如。mp3,。wav,和。aiff。另外,JavaFX 8中的新功能是能够以HTTP流媒体格式播放音频,也称为HLS(文件扩展名m3u8)。HLS超出了本书的范围,在本章中不会涉及到,但是通过进一步的研究,JavaFX可以用来构建一个实时的广播广播应用程序。 在JavaFX中播放音频文件非常简单。给定一个有效的URL位置到一个文件,您将实例化一个x.x.scene.media。加载资源的媒体类。然后,媒体对象被传递给一个新的实例,即一个新的实例。MediaPlayer对象的构造器来创建媒体播放器控件。最后一步是在触发OnReady事件时调用media player对象的play()方法,此时媒体文件将开始播放。在加载媒体播放器的自动播放属性后,可以自动播放媒体文件,可以使用set半自动()方法设置为true。下面的代码加载并播放一个位于web服务器上的MP3音频文件: Media media = new Media('http://some_host/eye_on_it.mp3'); MediaPlayer mediaPlayer = new MediaPlayer(media); mediaPlayer.setAutoPlay(true); 注意,在加载媒体文件时,要确保文件位置是一个格式化的字符串,它遵循标准的UrL规范:https://www.w3.org/地址/UrL/url-spec.txt和https://url.spec.whatwg.org。 只要文件名字符串被格式化以遵循标准的URL规范,那么媒体文件就可以驻留在web服务器、 JAR文件或本地文件系统上。 请注意音频文件的低延迟播放,使用的是“x..scene.media”。AudioClip类。一个典型的场景是连续播放一个给定的声音,就像在游戏中使用的声音效果一样。 一个MP3播放器的例子 现在你已经知道如何加载和播放音频媒体了,让我们来看看一个有趣的例子,它包括播放音乐和展示一个彩色的视觉效果。在本节中,您将学习如何创建MP3音频播放器。在探索清单9-1的示例代码之前,先看一下图9-1,以获得音频播放器UI的预览。当一个音频文件被播放时,一个频谱显示被显示为一个区域图表。音频播放器的控制可以让你看到正在播放的媒体的进展,并停止、暂停和播放。在图9-1中,背景是白色的;然而,实际的代码将显示为黑色背景的东西。在印刷纸上,避免大的、暗的区域是理想的。
一个JavaFX音频播放器 在这个例子中,您将再次使用文件拖放的比喻,就像您在第7章中使用图片所做的那样。以同样的方式,用户导航到本地文件系统或浏览器URL地址栏来定位一个被拖放到应用程序表面的媒体文件。在MP3播放器的情况下,你将定位一个音频文件,它有一个文件格式和扩展。MP3,。wav,或者。aif在这个例子中使用。 正如您在图9-1中所看到的,MP3播放器显示了一个基于媒体的音频频谱信息的区域线图表。音频播放器有一个自定义按钮面板控件,位于右下角。按钮面板控件让用户暂停、恢复和停止播放音乐。你还会注意到在左下侧的寻找位置滑块(也就是进度和寻找位置滑动条),它允许用户观看播放音乐的过程,但也可以在媒体(音频或视频)中寻找后退或前进。当允许用户向后或向前移动时,音频或视频需要先暂停。 停止、播放和暂停按钮 图9-2中的左边图像显示了Stop(正方形)和Play(三角形楔形)按钮。当点击停止按钮时,媒体开始时间被重新定位到文件的开头。当点击暂停按钮时,媒体将在媒体回放中保持当前的位置。此外,当媒体暂停播放时,播放按钮将会出现,这样用户就可以继续播放音乐了。图9-2中的正确图像显示 按钮面板包含一个停止和一个暂停按钮(带有两个垂直线的圆圈)。当音乐在播放时,用户可以点击暂停按钮来暂停音乐。
自定义按钮面板控件,带有Stop(矩形)、Play(三角形)和Pause(circle)按钮 进度和寻找位 剩余内容已隐藏,支付完成后下载完整资料 资料编号:[463460],资料为PDF文档或Word文档,PDF文档可免费转换为Word |
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。