Медиа
AudioPlayer проигрывает звук; VideoPlayer проигрывает видео и дополнительно предоставляет 3D
Texture. Оба делят одну поверхность воспроизведения (внутренняя база MediaPlayer), поэтому
play/pause, громкость, зацикливание, перемотка и события у них идентичны.
Обзор
const music = new AudioPlayer(asset('./theme.mp3'))
music.loop = true
music.volume = 0.4
music.play()
const sting = new AudioPlayer(asset('./win.wav'))
sting.addEventListener('completed', () => sting.dispose())
sting.play()Создание
new AudioPlayer(src?: string) // asset('./sound.mp3') или удалённый URL
new VideoPlayer(src?: string)Воспроизведение
player.play() // старт / продолжить
player.pause() // пауза с сохранением позиции
player.playing = true // булево-сеттер — play()/pause() это его алиасы
player.volume = 0.5 // 0..1; по умолчанию 1
player.loop = true // зациклить в конце вместо остановки; по умолчанию false
player.time = 12.5 // текущая позиция в СЕКУНДАХ — задай для перемотки
player.duration // полная длина в секундах (только чтение); 0, пока не загрузятся метаданныеСобытия
player.addEventListener('completed', () => { }) // достигнут конец при loop === false; playing становится false
player.addEventListener('loopReached', () => { }) // срабатывает на КАЖДОЙ границе цикла при loop === trueРовно одно из двух срабатывает за проигрывание, решается по loop в момент достижения конца:
зацикленные плееры эмитят loopReached раз на круг и продолжают играть; незацикленные
останавливаются (playing переключается в false) и эмитят completed один раз.
Жизненный цикл
player.dispose() // освободить медиаресурс хоста (декодер, сеть, буферы); идемпотентно
player.disposed // true после того, как dispose() отработал (только чтение)dispose() также сбрасывает все слушатели событий. Плееры не освобождаются сами — освобождай всё
созданное при закрытии его экрана.
после dispose() плеер мёртв — обращение к play(), volume, time и т. п. бросает
("MediaPlayer has been disposed"). Повторный вызов dispose() — нормально.
Видео-текстура
const movie = new VideoPlayer(asset('./clip.mp4'))
movie.loop = true
movie.play()
const tex = movie.texture // 3D Texture, сэмплящая видео
const screen = Mesh.plane({ material: Material.video(tex) })texture возвращает 3D Texture, сэмплящую живое видео — передай её в Material.video(...), чтобы
положить видео на 3D-поверхность. Для видео в UI используй UIVideo(player) — см.
Текст, изображения, видео.
каждое чтение texture конструирует новую обёртку Texture — прочитай один раз и держи ссылку, а
не обращайся к player.texture каждый кадр.
Смотрите также
- Текст, изображения, видео —
UIVideoпоказываетVideoPlayerв UI. - Файлы и шеринг — шеринг снятых/скачанных медиафайлов.