Как вставить видео
Укажите элементу <video> видеофайл и добавьте controls, чтобы читатель мог его запустить:
<video src="movie.mp4" controls width="640"></video>
controls показывает встроенный плеер браузера: воспроизведение и пауза, шкала времени, громкость и полноэкранный режим. Без него видео просто стоит на месте. Это превью не может загружать видеофайлы, поэтому примеры на этой странице подают в элемент небольшую анимацию на canvas, которую рисует скрипт; атрибуты работают точно так же, как с файлом:
Источник здесь это живой поток, а не файл, поэтому шкалу времени нельзя перетаскивать, и фиксированной длины нет. С настоящим .mp4 тот же плеер получает полноценную шкалу перемотки.
Атрибуты video
| Атрибут | Что делает |
|---|---|
controls | Показывает элементы управления плеера браузера |
autoplay | Начинает воспроизведение, как только сможет (на практике только с muted) |
muted | Запускает видео без звука |
loop | Начинает сначала, когда видео заканчивается |
playsinline | Воспроизводит на странице на iPhone, а не переключается в полноэкранный режим |
poster="thumb.jpg" | Картинка, которая показывается до начала воспроизведения |
preload | none, metadata (только размер и длительность) или auto (браузер сам решает, сколько скачать) |
width, height | Размер в пикселях; если задать оба, место резервируется до загрузки видео |
Autoplay, muted и loop
Браузеры блокируют видео, которые запускаются сами со звуком. Беззвучное видео может воспроизводиться автоматически, и так работают фоновые видео и короткие зацикленные ролики:
Четыре атрибута работают вместе: autoplay для запуска, muted, чтобы браузер это разрешил, loop для ролика и playsinline, чтобы iPhone не открывал его на весь экран. Автовоспроизведение видео со звуком не только блокируется, но и мешает пользователям программ чтения с экрана, чью речь оно заглушает. Если ролик длится дольше пяти секунд, дайте возможность поставить его на паузу.
Постер и preload
poster показывает картинку до начала воспроизведения, как обложку. Здесь у видео вообще нет источника, поэтому видно только постер:
С preload="none" браузер ничего не скачивает, пока читатель не нажмет воспроизведение, а постер не дает месту выглядеть пустым. Используйте preload="metadata", если хотите показать длительность до воспроизведения. Без постера большинство браузеров показывают первый кадр, когда загрузят его.
Форматы и запасные варианты через source
Вместо src можно перечислить несколько файлов в элементах <source>. Браузер воспроизводит первый поддерживаемый:
<video controls width="640" poster="thumb.jpg">
<source src="movie.webm" type="video/webm">
<source src="movie.mp4" type="video/mp4">
<track kind="captions" src="captions.vtt" srclang="en" label="English">
<p>Your browser cannot play this video. <a href="movie.mp4">Download it</a>.</p>
</video>
MP4 с видео H.264 воспроизводится во всех современных браузерах, поэтому это надежный выбор, когда файл один. Атрибут type позволяет браузеру пропускать форматы, которые он не умеет воспроизводить, не скачивая их. Текст в конце показывается только в браузерах, которые вообще не поддерживают <video>.
Субтитры через track
<track kind="captions"> загружает файл WebVTT, обычный текстовый файл со строками и временными метками. Браузер добавляет в элементы управления кнопку субтитров и выводит текст поверх видео:
WEBVTT
00:00:00.000 --> 00:00:03.000
Welcome to the course.
00:00:03.000 --> 00:00:06.500
Today we build our first web page.
Субтитры помогают глухим и слабослышащим зрителям, людям, которые смотрят без звука, и всем, кто смотрит видео на неродном языке. Добавьте дорожке default, чтобы она показывалась без клика. Файлу субтитров с другого домена нужны заголовки CORS и crossorigin у видео.
Оформление и управление из JavaScript
Видео это замещаемый элемент, как картинка: width: 100% с height: auto делает его адаптивным, а object-fit решает, как оно заполняет блок другой формы. JavaScript получает play(), pause(), currentTime, volume и события вроде play, pause и ended:
play() возвращает промис, который отклоняется, когда браузер блокирует воспроизведение (например, автовоспроизведение со звуком), поэтому в рабочем коде его нужно обрабатывать через catch. Делать собственные элементы управления необязательно; встроенные controls доступны с клавиатуры и переведены, а собственным кнопкам придется это воспроизвести. Видео с YouTube или Vimeo встраивают через их плеер в iframe.
Частые ошибки
- Autoplay без
muted. Браузер его блокирует. Добавьтеmutedиplaysinline. - Забытый
controls. Если вы не сделали свои элементы управления, читателю нечем запустить видео. - Нет
widthиheight. Страница прыгает, когда загружается видео. Задайте оба, а затем масштабируйте через CSS. - Огромные файлы. Сжимайте видео для веба и используйте
preload="none"или"metadata"для видео ниже на странице. - Нет субтитров у видео с речью. Добавьте
<track kind="captions">.
Часто задаваемые вопросы
Как вставить видео в HTML?
Используйте <video src="movie.mp4" controls width="640"></video>. Атрибут controls показывает кнопку воспроизведения, шкалу времени и громкость браузера. Без него видео показывает первый кадр (или постер), и пользователь не может его запустить.
Почему не работает autoplay у видео?
Браузеры блокируют автовоспроизведение со звуком. Добавьте muted рядом с autoplay, а также playsinline, чтобы iPhone воспроизводил видео на странице, а не на весь экран: <video autoplay muted loop playsinline>.
Какой формат видео использовать для веба?
MP4 с видео H.264 воспроизводится во всех современных браузерах, поэтому это надежный выбор по умолчанию. Можно первым указать через <source> более легкий файл WebM, и браузер выберет первый поддерживаемый формат.
Как добавить обложку к видео?
Используйте атрибут poster с URL картинки: <video poster="thumb.jpg" controls>. Картинка показывается, пока видео не начнет воспроизводиться.
Как добавить субтитры к видео в HTML?
Добавьте внутрь video <track kind="captions" src="captions.vtt" srclang="en" label="English">. Файл использует формат WebVTT, а браузер показывает кнопку субтитров в своих элементах управления.
Как сделать видео адаптивным?
Задайте в CSS width: 100% и height: auto (или max-width: 100%). Видео масштабируется вместе с контейнером и сохраняет пропорции.