Пакет 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) |
| H.265/HEVC | Видео | Видеосжатие H.265/MPEG-H Part 2 / HEVC (High Efficiency Video Coding) |
Поддерживаемые типы контейнеров
Тип контейнера определяет формат файла, используемый для хранения закодированных аудио-, видео- и других медиаданных. Каждый тип контейнера связан с одним или несколькими типами MIME, расширениями файлов и сигнатурами файлов (первые байты в файле). В следующей таблице показаны сочетания типов контейнеров и кодирования, поддерживаемые Java FX Media.
| Контейнер | Описание | Видеокодирование | Аудиокодирование | Тип MIME | Расширение файла |
|---|---|---|---|---|---|
| AIFF | Аудиоформат файла обмена | N/A | PCM | audio/x-aiff | .aif, .aiff |
| 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 |
| HLS (*) | fMP4 HTTP Live Streaming (аудиовизуальный) | H.264/AVC | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (*) | fMP4 HTTP Live Streaming (аудиовизуальный) | H.265/HEVC | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (*) | fMP4 HTTP Live Streaming (только аудио) | N/A | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (*) | AAC HTTP Live Streaming (только аудио) | N/A | AAC | 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 |
| MP4 | MPEG-4 Part 14 | H.265/HEVC | 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 Live Streaming (HLS) | Потоковая передача медиа на основе плейлистов через HTTP или HTTPS | Internet-Draft: HTTP Live Streaming |
Воспроизведение MPEG-4 через HTTP
Рекомендуется, чтобы MPEG-4 медиа, воспроизводимые через HTTP или HTTPS, были отформатированы таким образом, чтобы требуемые для декодирования потока заголовки появлялись в начале файла. В противном случае воспроизведение может приостановиться до тех пор, пока весь файл не будет загружен.
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) | Тип | Описание |
|---|---|---|---|
| MP3 | raw metadata | Map<String,ByteBuffer> | Необработанные метаданные в соответствии с соответствующим спецификацией медиа. Ключ "ID3" сопоставляется с метаданными MP3 ID3v2. |
| MP3 | album artist | java.lang.String | Исполнитель для всего альбома, возможно «Разные исполнители» для сборников. |
| MP3 | album | java.lang.String | Название альбома. |
| MP3 | artist | java.lang.String | Исполнитель трека. |
| MP3 | comment-N | java.lang.String | Комментарий, где N — индекс с нулевым значением. Формат комментария: 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 Exception, а асинхронные ошибки приводят к установке свойства 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.
}
| Класс | Описание |
|---|---|
| AudioClip | Объект AudioClip представляет собой сегмент аудио, который можно воспроизвести с минимальной задержкой. |
| AudioEqualizer | Класс AudioEqualizer предоставляет управление эквалайзером звука для медиаплеера. |
| AudioSpectrumListener | Интерфейс обратного вызова спектра аудио. |
| AudioTrack | Объект Track, описывающий аудиодорожку. |
| EqualizerBand | Класс EqualizerBand предоставляет управление каждой полосой в AudioEqualizer. |
| Media | Класс Media представляет собой медиа-ресурс. |
| MediaErrorEvent | Объект Event, представляющий возникновение ошибки при обработке медиа. |
| MediaException | |
| MediaException.Type | Перечисление, описывающее категории ошибок. |
| MediaMarkerEvent | Объект ActionEvent, представляющий медиа-маркер. |
| MediaPlayer | Класс MediaPlayer предоставляет средства для воспроизведения медиа. |
| MediaPlayer.Status | Перечисление, описывающее различные состояния объекта MediaPlayer. |
| MediaView | |
| SubtitleTrack | Объект Track, содержащий данные субтитров или титров, которые нужно отобразить поверх видеодорожки. |
| Track | Класс, представляющий дорожку, содержащуюся в медиа-ресурсе. |
| VideoTrack | Объект Track, описывающий видеодорожку. |
© 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.