Пакет 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) |
Поддерживаемые типы контейнеров
Тип контейнера определяет формат файла, используемый для хранения закодированных аудио-, видео- и других медиаданных. Каждый тип контейнера ассоциирован с одним или несколькими MIME-типами, расширениями файлов и сигнатурами файлов (начальные байты в файле). В следующей таблице показана комбинация типов контейнеров и кодирований, поддерживаемых Java FX Media.
| Контейнер | Описание | Видео кодирование | Аудио кодирование | MIME-тип | Расширение файла |
|---|---|---|---|---|---|
| AIFF | Формат файла аудиообмена | N/A | PCM | audio/x-aiff | .aif, .aiff |
| HLS (*) | Потоковое аудиовизуальное вещание MP2T по HTTP (HLS) | H.264/AVC | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (*) | Потоковое аудио-только вещание MP3 по HTTP (HLS) | 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 |
| HTTPS | Защищённый протокол передачи гипертекста для представления удалённых файлов | java.net.URI |
| JAR | Представление записей медиа в файлах, доступных через протоколы FILE, HTTP или HTTPS | java.net.JarURLConnection |
| Потоковое вещание HTTP (HLS) | Потоковая передача медиа на основе плейлистов через HTTP или HTTPS | Internet-Draft: HTTP Live Streaming |
Воспроизведение MPEG-4 через HTTP
Рекомендуется, чтобы медиа MPEG-4, воспроизводимые через HTTP или HTTPS, были отформатированы так, чтобы заголовки, необходимые для декодирования потока, появлялись в начале файла. В противном случае воспроизведение может приостановиться, пока весь файл не будет загружен.
Потоковое вещание HTTP (HLS)
Воспроизведение HLS обрабатывает источники с этими характеристиками:
- Запрошенные и прямые плейлисты.
- Элементарные аудиопотоки MP3 (audio/mpegurl) и мультиплексированные потоки MP2T (application/vnd.apple.mpegurl) с одним аудио AAC и одним видео H.264/AVC.
- Плейлисты с целым или дробным временем.
Источники, которые не соответствуют этому базовому профилю, не гарантируются для обработки. Плейлист содержит информацию о потоках, составляющих источник, и загружается в начале воспроизведения. Переключение между альтернативными потоками, битрейтами и разрешениями видео обрабатывается автоматически в зависимости от сетевых условий.
Поддерживаемые теги метаданных
Контейнер медиа может также включать определённые метаданные, описывающие медиа в файле. API Java FX Media предоставляет доступ к метаданным через методMedia.getMetadata(). Ключи в этом отображении называются *тегами*, и поддерживаемые Java FX Media теги перечислены в следующей таблице. Обратите внимание, что доступность тегов для определённого источника медиа зависит от фактически хранящихся в этом источнике метаданных, т. е. не все теги гарантированно доступны. | Контейнер | Тег (тип String) | Тип | Описание |
|---|---|---|---|
| MP3 | raw metadata | Map<String,ByteBuffer> | Необработанные метаданные в соответствии с соответствующим спецификации медиа. Ключ "ID3" сопоставлен с метаданными MP3 ID3v2. |
| 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<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 Интерфейс обратного вызова спектра аудио. -
Краткое описание классов Класс Описание AudioClip AudioClipпредставляет собой сегмент аудио, который можно воспроизводить с минимальной задержкой.AudioEqualizer КлассAudioEqualizerпредоставляет управление эквализацией аудио для медиа-плеера.AudioTrack ATrackописывающий аудиодорожку.EqualizerBand КлассEqualizerBandпредоставляет управление каждой полосой вAudioEqualizer.Media КлассMediaпредставляет собой медиа-ресурс.MediaErrorEvent AEventпредставляющий собой событие возникновения ошибки при обработке медиа.MediaMarkerEvent AnActionEventпредставляющий собой медиа-маркер.MediaPlayer КлассMediaPlayerпредоставляет средства для воспроизведения медиа.MediaView SubtitleTrack ATrackсодержащий данные субтитров или титров для отображения поверх видеодорожки.Track Класс, представляющий собой дорожку, содержащуюся в медиа-ресурсе.VideoTrack ATrackописывающий видеодорожку. -
Краткое описание перечислений Перечисление Описание MediaException.Type Перечисление, описывающее категории ошибок.MediaPlayer.Status Перечисление, описывающее различные статусыMediaPlayer. -
Краткое описание исключений Исключение Описание MediaException
© 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.