Package javafx.scene.media
提供用于将音频和视频集成到Java FX应用程序中的一组类。 此软件包的主要用途是媒体播放。 有媒体包三个主要类别: Media
, MediaPlayer
,并MediaView
。
内容
支持的媒体类型
Java FX支持多种不同的媒体类型。 媒体类型被认为是容器格式和一个或多个编码的组合。 在某些情况下,容器格式可能只是包含编码数据的基本流。支持的编码类型
编码类型指定如何存储采样的音频或视频数据。 通常编码类型意味着特定的压缩算法。 下表列出了Java FX Media支持的编码类型。
Media Encoding Table Encoding Type Description AAC Audio Advanced Audio Coding audio compression MP3 Audio Raw MPEG-1, 2, and 2.5 audio; layers I, II, and III; all supported combinations of sampling frequencies and bit rates. Note: File must contain at least 3 MP3 frames. PCM Audio Uncompressed, raw audio samples H.264/AVC Video H.264/MPEG-4 Part 10 / AVC (Advanced Video Coding) video compression VP6 (*) Video On2 VP6 video compression
(*)自JDK 9起,VP6视频编码已被弃用。
支持的容器类型
容器类型指定用于存储编码音频,视频和其他媒体数据的文件格式。 每个容器类型与一个或多个MIME类型,文件扩展名和文件签名(文件中的初始字节)相关联。 下表显示了Java FX Media支持的容器和编码类型的组合。
Media Container / Encoding Types Table Container Description Video Encoding Audio Encoding MIME Type File Extension AIFF Audio Interchange File Format N/A PCM audio/x-aiff .aif, .aiff FXM, FLV (*) FX Media, Flash Video VP6 MP3 video/x-javafx, video/x-flv .fxm, .flv HLS (**) MP2T HTTP Live Streaming (audiovisual) H.264/AVC AAC application/vnd.apple.mpegurl, audio/mpegurl .m3u8 HLS (**) MP3 HTTP Live Streaming (audio-only) N/A MP3 application/vnd.apple.mpegurl, audio/mpegurl .m3u8 MP3 MPEG-1, 2, 2.5 raw audio stream possibly with ID3 metadata v2.3 or v2.4 N/A MP3 audio/mpeg .mp3 MP4 MPEG-4 Part 14 H.264/AVC AAC video/mp4, audio/x-m4a, video/x-m4v .mp4, .m4a, .m4v WAV Waveform Audio Format N/A PCM audio/x-wav .wav(*)自JDK 9起,FXM和FLV容器已弃用。
(**)HLS是一个协议而不是一个容器类型,但是这里包含了类似的属性。
支持的协议
Supported Protocols Table Protocol Description Reference FILE Protocol for URI representation of local files java.net.URI HTTP Hypertext transfer protocol for representation of remote files java.net.URI HTTPS Hypertext transfer protocol secure for representation of remote files java.net.URI JAR Representation of media entries in files accessible via the FILE, HTTP or HTTPS protocols java.net.JarURLConnection HTTP Live Streaming (HLS) Playlist-based media streaming via HTTP or HTTPS Internet-Draft: HTTP Live Streaming通过HTTP播放MPEG-4
建议通过HTTP或HTTPS进行播放的MPEG-4媒体进行格式化,以使解码流所需的标头显示在文件的开头。 否则播放可能会停止,直到整个文件被下载。
HTTP直播(HLS)
HLS播放处理具有以下特征的源:
- 按需播放列表和现场播放列表。
- 基本MP3音频流(音频/ mpegurl)和复用MP2T流(应用程序/ vnd.apple.mpegurl)与一个AAC音频和一个H.264 / AVC视频轨道。
- 整数或浮动时间的播放列表。
不符合此基本资料的来源不能保证被处理。 播放列表包含关于包括源的流的信息,并且在回放开始时被下载。 根据网络条件自动处理备用流,比特率和视频分辨率之间的切换。
支持的元数据标签
媒体容器还可以包括描述文件中的媒体的某些元数据。 Java FX Media API通过Media.getMetadata()
方法使元数据可用。
该映射中的键被称为标签 ,下表列出了Java FX Media支持的标签。
请注意,给定媒体源可用的标签取决于实际存储在该源中的元数据,即,并非所有标签都可用。
"Metadata Keys and Tags Table Container Tag (type String) Type Description FXM, FLV audio codec java.lang.String The encoder used for the audio track. FXM, FLV duration javafx.util.Duration The duration of the media. FXM, FLV video codec java.lang.String The encoder used for the video track. FXM, FLV width java.lang.Integer The width in pixels of the video track. FXM, FLV height java.lang.Integer The height in pixels of the video track. FXM, FLV framerate java.lang.Double The video frame rate in frames per second. FXM, FLV creationdate java.lang.String The date when the video was created. FXM, FLV, MP3 raw metadata Map<String,ByteBuffer> The raw metadata according to the appropriate media specification. The key "ID3" maps to MP3 ID3v2 metadata and "FLV" to the FLV onMetadata marker content. MP3 album artist java.lang.String The artist for the overall album, possibly "Various Artists" for compilations. MP3 album java.lang.String The name of the album. MP3 artist java.lang.String The artist of the track. MP3 comment-N java.lang.String A comment where N is a 0-relative index. Comment format: ContentDescription[lng]=Comment MP3 composer java.lang.String The composer of the track. MP3 year java.lang.Integer The year the track was recorded. MP3 disc count java.lang.Integer The number of discs in the album. MP3 disc number java.lang.Integer The 1-relative index of the disc on which this track appears. MP3 duration javafx.util.Duration The duration of the track. MP3 genre java.lang.String The genre of the track, for example, "Classical," "Darkwave," or "Jazz." MP3 image javafx.scene.image.Image The album cover. MP3 title java.lang.String The name of the track. MP3 track count java.lang.Integer The number of tracks on the album. MP3 track number java.lang.Integer The 1-relative index of this track on the disc.
在Java FX中播放媒体
基本播放
在Java FX中播放媒体所需的基本步骤是:
- 为所需的媒体源创建一个
Media
对象。 - 创建
MediaPlayer
从对象Media
对象。 - 创建一个
MediaView
对象。 - 将
MediaPlayer
添加到MediaView
。 - 将
MediaView
添加到场景图。 - 调用
MediaPlayer.play()
。
MediaView
类文档中的示例代码说明。
应该注意的一些事情是:
- 一个
Media
对象可以在多个MediaPlayer
之间共享。 - 一个
MediaPlayer
可以共享MediaView
multipleMediaView
s。 - 媒体可以由
MediaPlayer
直接播放,而不需要创建MediaView
尽管需要显示视图。 - 取而代之的
MediaPlayer.play()
,MediaPlayer.setAutoPlay(true)
可用于要求打尽快启动。 -
MediaPlayer
具有MediaPlayer.Status
定义的几个操作状态。 - 可以使用
AudioClip
播放音频媒体(推荐用于短片段的低延迟播放)。
错误处理
使用Java FX Media的错误可能是同步或异步的。 一般来说,同步错误将自动显示为Java 异常
,异步错误将导致设置Java FX属性。 在后一种情况下,可能会直接观察到error
属性,注册了onError
回调,或者可能两者。
同步错误的主要来源是Media()
和MediaPlayer()
。 异步错误属性是Media.error
和MediaPlayer.error
,和异步错误回调Media.onError
, MediaPlayer.onError
,和MediaView.onError
。
某些错误可能会重复。 例如,一个MediaPlayer
将传播一个与其相关联的Media
遇到的错误,以及一个MediaPlayer
到其所有相关联的MediaView
的错误。 因此,根据监视哪些属性,有可能接收到给定错误发生的多个通知。
以下代码片段说明了使用介质进行的错误处理:
String source; Media media; MediaPlayer mediaPlayer; MediaView mediaView; try { media = new Media(source); if (media.getError() == null) { media.setOnError(new Runnable() { public void run() { // Handle asynchronous error in Media object. } }); try { mediaPlayer = new MediaPlayer(media); if (mediaPlayer.getError() == null) { mediaPlayer.setOnError(new Runnable() { public void run() { // Handle asynchronous error in MediaPlayer object. } }); mediaView = new MediaView(mediaPlayer); mediaView.setOnError(new EventHandler<MediaErrorEvent>() { public void handle(MediaErrorEvent t) { // Handle asynchronous error in MediaView. } }); } else { // Handle synchronous error creating MediaPlayer. } } catch (Exception mediaPlayerException) { // Handle exception in MediaPlayer constructor. } } else { // Handle synchronous error creating Media. } } catch (Exception mediaException) { // Handle exception in Media constructor. }
-
接口摘要 接口 描述 AudioSpectrumListener 音频频谱回调接口。 -
类摘要 Class 描述 AudioClip AudioClip
表示可以以最小延迟播放的音频段。AudioEqualizer AudioEqualizer
类为媒体播放器提供音频均衡控制。AudioTrack ATrack
描述了音轨。EqualizerBand 所述EqualizerBand
类提供了在每个频带控制AudioEqualizer
。Media Media
类代表媒体资源。MediaErrorEvent 一个Event
表示在处理媒体时发生错误。MediaMarkerEvent 代表媒体标记的ActionEvent
。MediaPlayer MediaPlayer
课程提供播放媒体的控制。MediaView ANode
,提供Media
由MediaPlayer
播放的视图 。SubtitleTrack ATrack
,其包含要覆盖视频轨道的字幕或字幕数据。Track 表示媒体资源中包含的曲目的类。VideoTrack ATrack
描述了视频轨道。 -
枚举摘要 Enum 描述 MediaException.Type 描述错误类别的枚举。MediaPlayer.Status 枚举描述不同状态值的一个MediaPlayer
。 -
异常摘要 异常 描述 MediaException 甲MediaException
描述了在运行时错误条件Media
,MediaPlayer
或MediaView
。