ДокументацияHTMLВидео и аудио в HTML: video, audio, iframe, встраивание YouTube
Начальный 8 мин чтения

Видео и аудио в HTML: video, audio, iframe, встраивание YouTube

Медиа-элементы HTML — video и audio с субтитрами, iframe для YouTube, адаптивные видеоплееры, атрибуты controls autoplay muted и форматы видео.

видеоаудиоvideoaudioiframeYouTubeмедиаHTMLсубтитры

Тег video

Встраивание видео без сторонних плееров:

<video src="intro.mp4" controls width="640" height="360">
  Ваш браузер не поддерживает видео.
</video>

Несколько форматов

Не все браузеры поддерживают один формат. Укажите несколько:

<video controls width="640" height="360">
  <source src="intro.webm" type="video/webm">
  <source src="intro.mp4" type="video/mp4">
  <source src="intro.ogv" type="video/ogg">
  Ваш браузер не поддерживает видео.
</video>

Браузер берёт первый поддерживаемый. MP4 (H.264) — самый универсальный.

Атрибуты

<video
  src="intro.mp4"
  controls
  autoplay
  muted
  loop
  playsinline
  preload="metadata"
  poster="preview.jpg"
  width="640"
  height="360"
>
</video>
АтрибутЧто делает
controlsПоказать панель управления (play, pause, громкость)
autoplayАвтозапуск. Работает только с muted в большинстве браузеров
mutedБез звука. Нужен для autoplay
loopЗациклить воспроизведение
playsinlineНа iOS — играть внутри страницы, не на полный экран
preload="metadata"Загрузить только метаданные (длительность, размеры)
preload="none"Не загружать ничего до нажатия play
posterКартинка-превью до начала воспроизведения

Фоновое видео (hero)

<video autoplay muted loop playsinline class="hero-video">
  <source src="hero-background.webm" type="video/webm">
  <source src="hero-background.mp4" type="video/mp4">
</video>

Четыре атрибута вместе — autoplay muted loop playsinline — стандартный паттерн для фонового видео. Без muted браузер заблокирует autoplay.

Субтитры и дорожки

<video controls>
  <source src="movie.mp4" type="video/mp4">
  <track kind="subtitles" src="subs-ru.vtt" srclang="ru" label="Русский">
  <track kind="subtitles" src="subs-en.vtt" srclang="en" label="English">
  <track kind="captions" src="captions-ru.vtt" srclang="ru" label="Русские субтитры">
</video>

Виды дорожек (kind):

ЗначениеОписание
subtitlesПеревод диалогов
captionsСубтитры для глухих (звуки, музыка)
descriptionsАудио-описание для слепых
chaptersГлавы для навигации
metadataДанные для скриптов

Формат файла — WebVTT (.vtt):

WEBVTT

00:00:01.000 --> 00:00:04.000
Привет, добро пожаловать на канал.

00:00:05.000 --> 00:00:08.000
Сегодня мы разберём HTML5 video.

Управление через JavaScript

const video = document.querySelector('video')

video.play()
video.pause()
video.currentTime = 30
video.volume = 0.5

video.addEventListener('timeupdate', () => {
  console.log(`Текущая позиция: ${video.currentTime}`)
})

video.addEventListener('ended', () => {
  console.log('Видео закончилось')
})

video.playbackRate = 1.5
video.requestFullscreen()

Тег audio

Аналогично video, но без визуального отображения:

<audio controls>
  <source src="podcast.mp3" type="audio/mpeg">
  <source src="podcast.ogg" type="audio/ogg">
  Ваш браузер не поддерживает аудио.
</audio>

Атрибуты

<audio src="music.mp3" controls loop preload="metadata"></audio>

Те же атрибуты что и у video: controls, autoplay, muted, loop, preload.

Аудиоплеер с плейлистом

<audio id="player" controls>
  <source src="track1.mp3" type="audio/mpeg">
</audio>

<ul id="playlist">
  <li data-src="track1.mp3" class="active">Трек 1 — Артист</li>
  <li data-src="track2.mp3">Трек 2 — Артист</li>
  <li data-src="track3.mp3">Трек 3 — Артист</li>
</ul>
const player = document.getElementById('player')
const playlist = document.getElementById('playlist')

playlist.addEventListener('click', (e) => {
  const item = e.target.closest('li')
  if (!item) return

  player.src = item.dataset.src
  player.play()

  playlist.querySelector('.active')?.classList.remove('active')
  item.classList.add('active')
})

player.addEventListener('ended', () => {
  const current = playlist.querySelector('.active')
  const next = current.nextElementSibling
  if (next) {
    next.click()
  }
})

iframe — встраивание внешнего контента

YouTube

<iframe
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="Название видео"
  width="560"
  height="315"
  frameborder="0"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  allowfullscreen
  loading="lazy"
></iframe>

Параметры YouTube через URL:

https://www.youtube.com/embed/VIDEO_ID?autoplay=1&mute=1&loop=1&rel=0
ПараметрЧто делает
autoplay=1Автозапуск (только с mute=1)
mute=1Без звука
loop=1Зациклить
rel=0Не показывать похожие видео
controls=0Скрыть элементы управления
start=30Начать с 30-й секунды

Vimeo

<iframe
  src="https://player.vimeo.com/video/VIDEO_ID"
  title="Название видео"
  width="640"
  height="360"
  frameborder="0"
  allow="autoplay; fullscreen; picture-in-picture"
  allowfullscreen
></iframe>

Google Maps

<iframe
  src="https://www.google.com/maps/embed?pb=..."
  width="600"
  height="450"
  style="border:0;"
  allowfullscreen
  loading="lazy"
  referrerpolicy="no-referrer-when-downgrade"
></iframe>

Адаптивный видеоплеер

Видео и iframe с фиксированными размерами ломают мобильную вёрстку. Решение — обёртка с aspect-ratio:

.video-wrapper {
  position: relative;
  width: 100%;
  max-width: 800px;
  aspect-ratio: 16 / 9;
}

.video-wrapper iframe,
.video-wrapper video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
<div class="video-wrapper">
  <iframe src="https://www.youtube.com/embed/VIDEO_ID" title="Видео" allowfullscreen></iframe>
</div>

Безопасность iframe

sandbox

Ограничьте возможности встраиваемой страницы:

<iframe
  src="untrusted.html"
  sandbox="allow-scripts allow-same-origin"
></iframe>

Значения sandbox:

ЗначениеРазрешает
allow-scriptsJavaScript
allow-same-originДоступ к cookies, localStorage
allow-formsОтправка форм
allow-popupsВсплывающие окна
allow-presentationPresentation API

Без sandbox — все разрешения даны. Пустой sandbox="" — максимальные ограничения.

其他 атрибуты безопасности

<iframe
  src="widget.html"
  sandbox="allow-scripts"
  referrerpolicy="no-referrer"
  loading="lazy"
></iframe>

Форматы медиа

Видео

ФорматКонтейнерКодекКогда
MP4.mp4H.264Универсальный, везде работает
WebM.webmVP9 / AV1Лучшее сжатие, для веба
Ogg.ogvTheoraЗапасной, устаревает

Стратегия: WebM (VP9) как основной, MP4 как fallback.

Аудио

ФорматКогда
MP3Универсальный
AACЛучшее качество при том же размере
OGG VorbisБесплатный кодек
WebM AudioДля аудио в WebM-контейнере
WAVБез сжатия, для коротких звуков

Итог

  • <video> + controls — встроенный плеер, MP4 + WebM для совместимости
  • autoplay muted loop playsinline — паттерн для фонового видео
  • <track> — субтитры в формате WebVTT
  • <audio controls> — аудиоплеер
  • <iframe> — YouTube, Vimeo, карты. sandbox для безопасности
  • aspect-ratio: 16 / 9 — адаптивный видеоплеер
  • loading="lazy" — для iframe ниже сгиба