Примитив a-video используется для интеграции
видеоконтента в сцены виртуальной реальности, создавая объекты, которые
воспроизводят видеофайлы или потоковое видео на 2D-поверхности внутри
3D-пространства. Он расширяет возможности стандартного примитива
a-plane за счёт прямой поддержки видео как текстуры.
Базовое определение примитива выглядит следующим образом:
<a-scene>
<a-video src="#video1" position="0 1.5 -3" width="4" height="2.25" autoplay loop></a-video>
<video id="video1" src="video.mp4" crossorigin="anonymous"></video>
</a-scene>
Ключевые моменты:
src — идентификатор <video> или
ссылка на видеофайл. Можно использовать локальный файл или URL.position — координаты объекта в 3D-пространстве.width и height — размеры видео-плоскости.
По умолчанию сохраняется пропорция видео.autoplay — автоматический старт воспроизведения.loop — повтор воспроизведения после окончания.a-video поддерживает стандартные атрибуты примитива
a-entity и собственные свойства:
src Может быть:
<video> в DOM (например,
#myVideo).src="https://example.com/video.mp4").autoplay Автоматически запускает
воспроизведение при загрузке сцены. Для браузеров с ограничениями
воспроизведения видео без взаимодействия требуется атрибут
muted, иначе autoplay не сработает.
loop Включает зацикливание
видео.
crossorigin Для использования видео
с других доменов. Рекомендуется anonymous для корректной
загрузки текстуры.
poster Позволяет установить
изображение-заглушку до начала воспроизведения.
playbackRate Управление скоростью
воспроизведения видео (1 — стандартная скорость).
volume Контролирует громкость
воспроизведения (0–1).
rotation, scale Как и
для любого a-entity, можно изменять ориентацию и масштаб
плоскости с видео.
Видео, встроенное в сцену через a-video, может
управляться динамически. Пример:
const videoEl = document.querySelector('#video1');
const aVideo = document.querySelector('a-video');
aVideo.addEventListener('click', () => {
if (videoEl.paused) {
videoEl.play();
} else {
videoEl.pause();
}
});
Такой подход позволяет создавать интерактивные видеопанели в VR,
реагирующие на события mouseenter, mouseleave,
click или кастомные события.
<video> как источник
текстуры, поэтому поддерживаются форматы, совместимые с браузером:
.mp4, .webm, .ogv.a-video можно вставлять как текстуру на любые
геометрические объекты через <a-material> с типом
src: #video1.a-video
можно поместить на стену, пол или любую плоскость, чтобы создать
иммерсивный кинозал или интерактивные дисплеи.<a-video src="#video1" position="0 1.5 -3" rotation="0 45 0" width="5" height="2.8"></a-video>
Видео не только воспроизводится, но и повернуто в пространстве, создавая эффект экранной панели в VR.
<a-box width="4" height="2" depth="0.1">
<a-material src="#video1"></a-material>
</a-box>
Видео проецируется на поверхность куба, что позволяет создавать динамичные интерфейсы или декоративные элементы сцены.
document.querySelector('a-video').addEventListener('mouseenter', () => {
document.querySelector('#video1').play();
});
document.querySelector('a-video').addEventListener('mouseleave', () => {
document.querySelector('#video1').pause();
});
Такой подход реализует “hover-to-play”, что удобно для интерактивных презентаций в VR.
preload="auto" и проверять поддержку формата
браузером.muted для автозапуска, чтобы обойти
ограничения современных браузеров.Примитив a-video является мощным инструментом для
интеграции видео в A-Frame, сочетая гибкость текстур и интерактивность
VR-сцен, что позволяет создавать как простые видеопанели, так и сложные
мультимедийные интерфейсы.