Элементы <audio> и <video> встраивают мультимедиа-контент напрямую в HTML без сторонних плагинов.
Зачем нужно
До HTML5 для мультимедиа требовался Flash. Сейчас <audio> и <video> -- нативные элементы с встроенными контролами, API для JavaScript и поддержкой субтитров. Это быстрее, безопаснее и доступнее.
Где используется
- Видеоплееры на сайтах
- Подкасты и музыкальные плееры
- Фоновое видео на лендингах
- Обучающие платформы (видеоуроки с субтитрами)
Предпосылки
<video> -- видео
Базовый пример
<video src="video.mp4" controls width="640" height="360">
Ваш браузер не поддерживает видео.
</video>
С несколькими источниками (fallback)
<video controls width="640" height="360" poster="thumbnail.jpg">
<source src="video.webm" type="video/webm">
<source src="video.mp4" type="video/mp4">
<p>Ваш браузер не поддерживает видео.
<a href="video.mp4">Скачать видео</a>.
</p>
</video>
Браузер выберет первый поддерживаемый формат.
Атрибуты <video>
| Атрибут |
Описание |
src |
URL видеофайла |
controls |
Показать элементы управления |
autoplay |
Автовоспроизведение (требует muted) |
muted |
Без звука |
loop |
Зациклить |
poster |
Картинка-превью до начала воспроизведения |
width / height |
Размеры плеера |
preload |
none / metadata / auto -- что предзагружать |
playsinline |
Воспроизводить inline на iOS (не fullscreen) |
crossorigin |
CORS для внешних источников |
Автовоспроизведение
Браузеры блокируют autoplay с включённым звуком. Для автовоспроизведения нужен muted:
<video autoplay muted loop playsinline>
<source src="bg-video.webm" type="video/webm">
<source src="bg-video.mp4" type="video/mp4">
</video>
<video autoplay>
<source src="video.mp4" type="video/mp4">
</video>
Preload -- что предзагружать
<video preload="none" controls poster="thumb.jpg">
<source src="video.mp4" type="video/mp4">
</video>
<video preload="metadata" controls>
<source src="video.mp4" type="video/mp4">
</video>
<video preload="auto" controls>
<source src="video.mp4" type="video/mp4">
</video>
Фоновое видео на лендинге
<div class="hero">
<video class="hero__video" autoplay muted loop playsinline preload="auto">
<source src="hero.webm" type="video/webm">
<source src="hero.mp4" type="video/mp4">
</video>
<div class="hero__content">
<h1>Добро пожаловать</h1>
</div>
</div>
<style>
.hero {
position: relative;
overflow: hidden;
height: 100vh;
}
.hero__video {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
min-width: 100%;
min-height: 100%;
object-fit: cover;
}
.hero__content {
position: relative;
z-index: 1;
color: white;
text-align: center;
padding-top: 40vh;
}
</style>
<audio> -- аудио
Базовый пример
<audio controls>
<source src="podcast.ogg" type="audio/ogg">
<source src="podcast.mp3" type="audio/mpeg">
<p>Ваш браузер не поддерживает аудио.
<a href="podcast.mp3">Скачать</a>.
</p>
</audio>
Атрибуты <audio>
| Атрибут |
Описание |
src |
URL аудиофайла |
controls |
Показать элементы управления |
autoplay |
Автовоспроизведение |
muted |
Без звука |
loop |
Зациклить |
preload |
none / metadata / auto |
Подкаст-плеер
<figure>
<figcaption>Подкаст: Введение в HTML, Эпизод 1</figcaption>
<audio controls preload="metadata">
<source src="episode-01.mp3" type="audio/mpeg">
<a href="episode-01.mp3">Скачать эпизод (MP3, 45 МБ)</a>
</audio>
</figure>
<track> -- субтитры и метаданные
<video controls width="640" height="360">
<source src="lecture.mp4" type="video/mp4">
<track
kind="subtitles"
src="subs-ru.vtt"
srclang="ru"
label="Русские"
default
>
<track
kind="subtitles"
src="subs-en.vtt"
srclang="en"
label="English"
>
<track kind="captions" src="captions-ru.vtt" srclang="ru" label="Субтитры (рус)">
<track kind="descriptions" src="desc-ru.vtt" srclang="ru" label="Аудиоописание">
<track kind="chapters" src="chapters.vtt" srclang="ru" label="Главы">
</video>
Формат WebVTT для субтитров
Файл subs-ru.vtt:
WEBVTT
00:00:01.000 --> 00:00:04.000
Добро пожаловать на курс по HTML.
00:00:05.000 --> 00:00:09.000
Сегодня мы разберём основы разметки.
00:00:10.000 --> 00:00:15.000
Начнём с простейшего HTML-документа.
Значение kind |
Назначение |
subtitles |
Субтитры (перевод диалогов) |
captions |
Скрытые субтитры (диалоги + звуковые эффекты, для глухих) |
descriptions |
Аудиоописание визуального контента (для слепых) |
chapters |
Разделы видео (навигация) |
metadata |
Машиночитаемые данные |
Форматы
Видеоформаты
| Формат |
MIME-тип |
Поддержка |
| MP4 (H.264) |
video/mp4 |
Везде |
| WebM (VP9) |
video/webm |
Chrome, Firefox, Edge |
| WebM (AV1) |
video/webm; codecs="av01" |
Новые браузеры |
Аудиоформаты
| Формат |
MIME-тип |
Поддержка |
| MP3 |
audio/mpeg |
Везде |
| AAC |
audio/aac |
Везде |
| OGG Vorbis |
audio/ogg |
Chrome, Firefox |
| WAV |
audio/wav |
Везде |
| FLAC |
audio/flac |
Почти везде |
JavaScript API
<video id="player" controls>
<source src="video.mp4" type="video/mp4">
</video>
<button onclick="player.play()">Play</button>
<button onclick="player.pause()">Pause</button>
<button onclick="player.currentTime = 0">В начало</button>
<script>
const player = document.getElementById('player');
console.log(player.duration);
console.log(player.currentTime);
console.log(player.paused);
console.log(player.volume);
console.log(player.playbackRate);
player.addEventListener('play', () => console.log('Играет'));
player.addEventListener('pause', () => console.log('Пауза'));
player.addEventListener('ended', () => console.log('Закончилось'));
player.addEventListener('timeupdate', () => {
console.log('Позиция:', player.currentTime);
});
</script>
Частые ошибки
| Ошибка |
Почему плохо |
Как правильно |
autoplay без muted |
Браузер заблокирует |
autoplay muted |
| Нет fallback-текста |
Пользователь без поддержки ничего не увидит |
Добавь текст и ссылку на скачивание |
| Только один формат |
Нет поддержки в каком-то браузере |
<source> для нескольких форматов |
| Огромные видеофайлы |
Медленная загрузка |
Сжатие, preload="none", poster |
| Нет субтитров |
Недоступно для глухих |
Добавь <track> с captions |
controls не указан |
Пользователь не может управлять |
Добавь controls или кастомный плеер |
Практика
- Вставь видео с
<video> и двумя <source> (MP4 + WebM)
- Добавь
poster, controls, preload="metadata"
- Создай файл .vtt с субтитрами и подключи через
<track>
- Сделай фоновое видео с
autoplay muted loop playsinline
- Вставь аудио-плеер
<audio> в <figure> с <figcaption>
- Через JS: кнопки Play/Pause, отображение currentTime
Связанные темы
Ресурсы