Spec-Zone.ru › OpenJavaFX 8

Пакет javafx.scene.media

Предоставляет набор классов для интеграции аудио и видео в приложения Java FX.

См.: Описание

Краткое описание интерфейсов
Интерфейс Описание
AudioSpectrumListener
Интерфейс обратного вызова спектра аудио.
Краткое описание классов
Класс Описание
AudioClip
Класс AudioClip представляет собой фрагмент аудио, который может быть воспроизведён с минимальной задержкой.
AudioEqualizer
Класс AudioEqualizer предоставляет управление эквалайзером аудио для медиаплеера.
AudioTrack
Класс Track, описывающий аудиодорожку.
EqualizerBand
Класс EqualizerBand предоставляет управление каждой полосой эквалайзера AudioEqualizer.
Media
Класс Media представляет медиаресурс.
MediaErrorEvent
Класс Event, представляющий ошибку обработки медиа.
MediaMarkerEvent
Класс ActionEvent, представляющий медиа-маркер.
MediaPlayer
Класс MediaPlayer предоставляет управление воспроизведением медиа.
MediaView
Элемент Node, обеспечивающий просмотр воспроизводимого Media медиаплеером MediaPlayer.
SubtitleTrack
Класс Track, содержащий субтитры или данные о титрах, которые будут отображаться поверх видеодорожки.
Track
Класс, представляющий дорожку, содержащуюся в медиаресурсе.
VideoTrack
Класс Track, описывающий видеодорожку.
Краткое описание перечислений
Перечисление Описание
MediaException.Type
Перечисление, описывающее категории ошибок.
MediaPlayer.Status
Перечисление, описывающее различные состояния медиаплеера MediaPlayer.
Краткое описание исключений
Исключение Описание
MediaException
Исключение MediaException описывает условие ошибки во время выполнения в Media, MediaPlayer или MediaView.

Описание пакета javafx.scene.media

Предоставляет набор классов для интеграции аудио и видео в приложения Java FX. Основное назначение этого пакета — воспроизведение медиа. В этом пакете есть три основных класса: Media, MediaPlayer и MediaView.

Содержание

  1. Поддерживаемые типы медиа
  2. Поддерживаемые протоколы
  3. Поддерживаемые теги метаданных
  4. Воспроизведение медиа в 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:

  1. Создайте объект Media для желаемого источника медиа.
  2. Создайте объект MediaPlayer из объекта Media.
  3. Создайте объект MediaView.
  4. Добавьте MediaPlayer в MediaView.
  5. Добавьте MediaView в граф сцены.
  6. Вызовите 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API