Пакет javafx.scene.media
См.: Описание
| Интерфейс | Описание |
|---|---|
| AudioSpectrumListener | Интерфейс обратного вызова спектра аудио. |
| Класс | Описание |
|---|---|
| AudioClip | Класс AudioClip представляет собой фрагмент аудио, который может быть воспроизведён с минимальной задержкой. |
| AudioEqualizer | Класс AudioEqualizer предоставляет управление эквалайзером аудио для медиаплеера. |
| AudioTrack | Класс Track, описывающий аудиодорожку. |
| EqualizerBand | Класс EqualizerBand предоставляет управление каждой полосой эквалайзера AudioEqualizer. |
| Media | Класс Media представляет медиаресурс. |
| MediaErrorEvent | Класс Event, представляющий ошибку обработки медиа. |
| MediaMarkerEvent | Класс ActionEvent, представляющий медиа-маркер. |
| MediaPlayer | Класс MediaPlayer предоставляет управление воспроизведением медиа. |
| MediaView | |
| SubtitleTrack | Класс Track, содержащий субтитры или данные о титрах, которые будут отображаться поверх видеодорожки. |
| Track | Класс, представляющий дорожку, содержащуюся в медиаресурсе. |
| VideoTrack | Класс Track, описывающий видеодорожку. |
| Перечисление | Описание |
|---|---|
| MediaException.Type | Перечисление, описывающее категории ошибок. |
| MediaPlayer.Status | Перечисление, описывающее различные состояния медиаплеера MediaPlayer. |
| Исключение | Описание |
|---|---|
| MediaException | Исключение MediaException описывает условие ошибки во время выполнения в Media, MediaPlayer или MediaView. |
Описание пакета javafx.scene.media
Предоставляет набор классов для интеграции аудио и видео в приложения Java FX. Основное назначение этого пакета — воспроизведение медиа. В этом пакете есть три основных класса: Media, MediaPlayer и MediaView.
Содержание
- Поддерживаемые типы медиа
- Поддерживаемые протоколы
- Поддерживаемые теги метаданных
- Воспроизведение медиа в Java FX
Поддерживаемые типы медиа
Java FX поддерживает ряд различных типов медиа. Тип медиа рассматривается как комбинация формата контейнера и одного или нескольких кодирований. В некоторых случаях формат контейнера может быть просто элементарным потоком, содержащим закодированные данные.Поддерживаемые типы кодирования
Тип кодирования определяет, как хранятся сэмплированные аудио- или видеоданные. Обычно тип кодирования подразумевает определённый алгоритм сжатия. В следующей таблице указаны типы кодирования, поддерживаемые Java FX Media.| Кодирование | Тип | Описание |
|---|---|---|
| AAC | Аудио | Аудиосжатие с использованием Advanced Audio Coding |
| MP3 | Аудио | Необработанный аудиопоток MPEG-1, 2 и 2.5; слои I, II и III; все поддерживаемые комбинации частот дискретизации и битовых скоростей. Примечание: Файл должен содержать как минимум 3 кадра MP3. |
| PCM | Аудио | Несжатые, необработанные аудиосэмплы |
| H.264/AVC | Видео | Видеосжатие H.264/MPEG-4 Part 10 / AVC (Advanced Video Coding) |
| VP6 | Видео | Видеосжатие On2 VP6 |
Поддерживаемые типы контейнеров
Тип контейнера определяет формат файла, используемый для хранения закодированных аудио-, видео- и других медиаданных. Каждый тип контейнера связан с одним или несколькими MIME-типами, расширениями файлов и сигнатурами файлов (начальные байты в файле). В следующей таблице показаны комбинации типов контейнеров и кодирования, поддерживаемые Java FX Media.| Контейнер | Описание | Видеокодирование | Аудиокодирование | MIME-тип | Расширение файла |
|---|---|---|---|---|---|
| AIFF | Формат аудиофайла 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 (видео) | H.264/AVC | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (*) | MP3 HTTP Live Streaming (только аудио) | N/A | MP3 | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| MP3 | MPEG-1, 2, 2.5 необработанный аудиопоток, возможно с метаданными ID3 v2.3 или 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 | Формат волновой аудиоформат | N/A | PCM | audio/x-wav | .wav |
(*) HLS — это протокол, а не тип контейнера, но он включён здесь для группировки аналогичных атрибутов.
Поддерживаемые протоколы
| Протокол | Описание | Ссылка |
|---|---|---|
| FILE | Протокол для представления URI локальных файлов | java.net.URI |
| HTTP | Протокол передачи гипертекста для представления удалённых файлов | java.net.URI |
| JAR | Представление записей медиа в файлах, доступных через протоколы FILE или HTTP | java.net.JarURLConnection |
| HTTP Live Streaming (HLS) | Потоковая передача медиа на основе плейлистов через HTTP | Internet-Draft: HTTP Live Streaming |
Воспроизведение MPEG-4 через HTTP
Рекомендуется форматировать медиа MPEG-4, воспроизводимые через HTTP, таким образом, чтобы необходимые для декодирования потока заголовки появлялись в начале файла. В противном случае воспроизведение может зависнуть, пока весь файл не будет загружен.HTTP Live Streaming (HLS)
Воспроизведение HLS обрабатывает источники с этими характеристиками:- Плейлисты по запросу и прямые трансляции.
- Элементарные аудиопотоки MP3 (audio/mpegurl) и мультиплексированные потоки MP2T (application/vnd.apple.mpegurl) с одним аудиопотоком AAC и одним видеопотоком H.264/AVC.
- Плейлисты с целочисленной или плавающей точкой длительностью.
Поддерживаемые теги метаданных
Контейнер медиа может также содержать определенные метаданные, описывающие медиа в файле. API Java FX Media делает метаданные доступными через методMedia.getMetadata(). Ключи в этом отображении называются *тегами*, а поддерживаемые Java FX Media теги перечислены в следующей таблице. Обратите внимание, что доступные теги для конкретного источника медиа зависят от фактически хранящихся метаданных в этом источнике, т.е. не гарантируется доступность всех тегов.
| Контейнер | Тег (тип String) | Тип | Описание |
|---|---|---|---|
| FXM, FLV | audio codec | java.lang.String | Кодек, используемый для аудиодорожки. |
| FXM, FLV | duration | javafx.util.Duration | Длительность медиа. |
| FXM, FLV | video codec | java.lang.String | Кодек, используемый для видеодорожки. |
| FXM, FLV | width | java.lang.Integer | Ширина видеодорожки в пикселях. |
| FXM, FLV | height | java.lang.Integer | Высота видеодорожки в пикселях. |
| FXM, FLV | framerate | java.lang.Double | Частота кадров видео в кадрах в секунду. |
| FXM, FLV | creationdate | java.lang.String | Дата создания видео. |
| FXM, FLV, MP3 | raw metadata | Map<String,ByteBuffer> | Необработанные метаданные в соответствии с соответствующим медиаспецификацией. Ключ "ID3" сопоставляется с метаданными MP3 ID3v2, а "FLV" — с содержанием маркера onMetadata FLV. |
| MP3 | album artist | java.lang.String | Исполнитель альбома, возможно "Various Artists" для сборников. |
| MP3 | album | java.lang.String | Название альбома. |
| MP3 | artist | java.lang.String | Исполнитель трека. |
| MP3 | comment-N | java.lang.String | Комментарий, где N — индекс, отсчитываемый от 0. Формат комментария: ContentDescription[lng]=Comment |
| MP3 | composer | java.lang.String | Композитор трека. |
| MP3 | year | java.lang.Integer | Год записи трека. |
| MP3 | disc count | java.lang.Integer | Количество дисков в альбоме. |
| MP3 | disc number | java.lang.Integer | Индекс диска, на котором появляется этот трек (от 1). |
| MP3 | duration | javafx.util.Duration | Продолжительность трека. |
| MP3 | genre | java.lang.String | Жанр трека, например "Классика", "Darkwave" или "Джаз". |
| MP3 | image | javafx.scene.image.Image | Обложка альбома. |
| MP3 | title | java.lang.String | Название трека. |
| MP3 | track count | java.lang.Integer | Количество треков в альбоме. |
| MP3 | track number | java.lang.Integer | Индекс трека на диске (от 1). |
Воспроизведение медиа в Java FX
Базовое воспроизведение
Основные шаги, необходимые для воспроизведения медиа в Java FX:
- Создайте объект
Mediaдля желаемого источника медиа. - Создайте объект
MediaPlayerиз объектаMedia. - Создайте объект
MediaView. - Добавьте
MediaPlayerвMediaView. - Добавьте
MediaViewв граф сцены. - Вызовите
MediaPlayer.play().
MediaView. Следует отметить следующее: - Один объект
Mediaможет быть совместно использован несколькими объектамиMediaPlayer. - Один объект
MediaPlayerможет быть совместно использован несколькими объектамиMediaView. - Медиа могут воспроизводиться напрямую объектом
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() {
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.
}
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.