LeCodesdocs

Медиа

AudioPlayer проигрывает звук; VideoPlayer проигрывает видео и дополнительно предоставляет 3D Texture. Оба делят одну поверхность воспроизведения (внутренняя база MediaPlayer), поэтому play/pause, громкость, зацикливание, перемотка и события у них идентичны.

Обзор

TypeScript
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()

Создание

TypeScript
new AudioPlayer(src?: string)   // asset('./sound.mp3') или удалённый URL
new VideoPlayer(src?: string)

Воспроизведение

TypeScript
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, пока не загрузятся метаданные

События

TypeScript
player.addEventListener('completed',   () => { })   // достигнут конец при loop === false; playing становится false
player.addEventListener('loopReached', () => { })   // срабатывает на КАЖДОЙ границе цикла при loop === true

Ровно одно из двух срабатывает за проигрывание, решается по loop в момент достижения конца: зацикленные плееры эмитят loopReached раз на круг и продолжают играть; незацикленные останавливаются (playing переключается в false) и эмитят completed один раз.

Жизненный цикл

TypeScript
player.dispose()    // освободить медиаресурс хоста (декодер, сеть, буферы); идемпотентно
player.disposed     // true после того, как dispose() отработал (только чтение)

dispose() также сбрасывает все слушатели событий. Плееры не освобождаются сами — освобождай всё созданное при закрытии его экрана.

Note

после dispose() плеер мёртв — обращение к play(), volume, time и т. п. бросает ("MediaPlayer has been disposed"). Повторный вызов dispose() — нормально.

Видео-текстура

TypeScript
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) — см. Текст, изображения, видео.

Note

каждое чтение texture конструирует новую обёртку Texture — прочитай один раз и держи ссылку, а не обращайся к player.texture каждый кадр.

Смотрите также