Видео <видео> и <источник> теги

Вы правильно подготовили видеофайл для публикации в Интернете. Вы задали ему правильные размеры и разрешение. Вы даже создали отдельные файлы WebM и MP4 для разных браузеров.

Чтобы ваше видео увидели все, его всё равно нужно добавить на веб-страницу. Для этого необходимо добавить два HTML-элемента: <video> и <source> . Помимо основных сведений об этих тегах, в этой статье объясняются атрибуты, которые следует добавить к ним для создания положительного пользовательского опыта.

Укажите один файл

Хотя это не рекомендуется, вы можете использовать элемент video отдельно. Всегда используйте атрибут type , как показано ниже. Браузер использует его, чтобы определить, может ли он воспроизвести предоставленный видеофайл. Если нет, отображается заключенный в него текст.

<video src="chrome.webm" type="video/webm">
    <p>Your browser cannot play the provided video file.</p>
</video>

Укажите несколько форматов файлов

Вспомните основы работы с медиафайлами : не все браузеры поддерживают одни и те же форматы видео. Элемент <source> позволяет указать несколько форматов в качестве резервного варианта на случай, если браузер пользователя не поддерживает один из них.

Приведенный ниже пример создает встроенное видео, которое используется в качестве примера далее в этой статье.

<video controls>
  <source src="chrome.webm" type="video/webm">
  <source src="chrome.mp4" type="video/mp4">
  <p>Your browser cannot play the provided video file.</p>
</video>

Попробуйте на Glitch

Всегда следует добавлять атрибут type к событию тега <source> , хотя это необязательно. Это гарантирует, что браузер загрузит только тот файл, который он может воспроизвести.

Такой подход имеет ряд преимуществ по сравнению с обслуживанием различных HTML-кодов или серверных скриптов, особенно на мобильных устройствах:

  • Вы можете перечислить форматы в порядке предпочтения.
  • Переключение на стороне клиента сокращает задержку: для получения контента делается только один запрос.
  • Позволить браузеру выбирать формат проще, быстрее и потенциально надежнее, чем использовать серверную базу данных поддержки с обнаружением пользовательского агента.
  • Указание типа источника каждого файла повышает производительность сети; браузер может выбрать источник видео без необходимости загружать часть видео для «анализа» формата.

Эти проблемы особенно важны в мобильных приложениях, где пропускная способность и задержка имеют решающее значение, а терпение пользователя, вероятно, ограничено. Отсутствие атрибута type может повлиять на производительность при наличии нескольких источников с неподдерживаемыми типами данных.

Есть несколько способов изучить детали. Ознакомьтесь с книгой «A Digital Media Primer for Geeks», чтобы узнать больше о том, как видео и аудио работают в интернете. Вы также можете использовать удалённую отладку в DevTools для сравнения сетевой активности с атрибутами типа и без них .

Укажите время начала и окончания

Экономьте полосу пропускания и сделайте свой сайт более отзывчивым: используйте медиафрагменты для добавления времени начала и окончания к видеоэлементу.

Чтобы использовать фрагмент медиа, добавьте #t=[start_time][,end_time] к URL-адресу медиафайла. Например, чтобы воспроизвести видео с 5-й по 10-ю секунду, укажите:

<source src="chrome.webm#t=5,10" type="video/webm">

Вы также можете указать время в <hours>:<minutes>:<seconds> . Например, #t=00:01:05 запускает видео с одной минуты и пяти секунд. Чтобы воспроизвести только первую минуту видео, укажите #t=,00:01:00 .

Эту функцию можно использовать для создания нескольких видов одного и того же видео — подобно контрольным точкам на DVD — без необходимости кодировать и обслуживать несколько файлов.

Для работы этой функции ваш сервер должен поддерживать запросы диапазона, и эта возможность должна быть включена. Большинство серверов по умолчанию поддерживают запросы диапазона. Поскольку некоторые хостинг-провайдеры отключают их, вам следует убедиться, что запросы диапазона доступны для использования фрагментов на вашем сайте.

К счастью, это можно сделать в инструментах разработчика браузера. Например, в Chrome это находится на панели «Сеть» . Найдите заголовок Accept-Ranges и убедитесь, что там указано значение bytes . На изображении я нарисовал красный прямоугольник вокруг этого заголовка. Если вы не видите значение bytes , обратитесь к своему хостинг-провайдеру.

Скриншот Chrome DevTools: Accept-Ranges: байты.
Скриншот Chrome DevTools: Accept-Ranges: байты.

Включить изображение постера

Добавьте атрибут постера к элементу video , чтобы зрители имели представление о содержании сразу после загрузки элемента, без необходимости загружать видео или начинать воспроизведение.

<video poster="poster.jpg" ...>
  …
</video>

Постер также может быть запасным вариантом, если src видеофайл поврежден или ни один из предоставленных видеоформатов не поддерживается. Единственный недостаток постера — дополнительный запрос файла, который занимает часть полосы пропускания и требует рендеринга. Подробнее см. в разделе «Эффективное кодирование изображений» .

Не
Без резервного постера видео выглядит просто испорченным.
Без резервного постера видео выглядит просто испорченным.
Делать
Запасной постер создает впечатление, будто был сделан первый кадр.
Запасной постер создает впечатление, будто был сделан первый кадр.

Убедитесь, что видео не переполняют контейнеры

Если видеоэлементы слишком велики для области просмотра, они могут переполнить свой контейнер, из-за чего пользователь не сможет просматривать контент или использовать элементы управления.

Скриншот Android Chrome, портретная ориентация: нестилизованный видеоэлемент переполняет область просмотра.
Скриншот Android Chrome, портретная ориентация: нестилизованный видеоэлемент переполняет область просмотра.
Скриншот Android Chrome, альбомная ориентация: нестилизованный видеоэлемент переполняет область просмотра.
Скриншот Android Chrome, альбомная ориентация: нестилизованный видеоэлемент переполняет область просмотра.

Вы можете управлять размерами видео с помощью CSS. Если CSS не отвечает всем вашим потребностям, на помощь придут JavaScript-библиотеки и плагины, такие как FitVids , даже для видео с YouTube и других источников. К сожалению, эти ресурсы могут увеличить нагрузку на сеть , что негативно скажется на ваших доходах и кошельках пользователей.

Для простых случаев, подобных тем, что я здесь описываю, используйте медиазапросы CSS , чтобы указать размер элементов в зависимости от размеров области просмотра; max-width: 100% — ваш лучший друг.

Для медиаконтента в iframes (например, видеороликов YouTube) попробуйте адаптивный подход (например, предложенный Джоном Сурдаковски ).

CSS

.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0;
    height: 0;
    overflow: hidden;
}

.video-container iframe,
.video-container object,
.video-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

HTML

<div class="video-container">
  <iframe
    src="//www.youtube.com/embed/l-BA9Ee2XuM"
    frameborder="0"
    width="560"
    height="315"
  ></iframe>
</div>

Попробуй это

Сравните адаптивный вариант с неадаптивной версией . Как видите, неадаптивная версия не очень удобна для пользователя.

Ориентация устройства

Ориентация устройства не имеет значения для настольных мониторов или ноутбуков, но она чрезвычайно важна при проектировании веб-страниц для мобильных устройств и планшетов.

Safari на iPhone хорошо переключается между портретной и альбомной ориентацией:

Скриншот видео, воспроизводимого в Safari на iPhone, портретная ориентация.
Скриншот видео, воспроизводимого в Safari на iPhone, портретная ориентация.
Скриншот видео, воспроизводимого в Safari на iPhone, горизонтальная ориентация.
Скриншот видео, воспроизводимого в Safari на iPhone, горизонтальная ориентация.

Ориентация устройства на iPad и Chrome на Android может быть проблематичной. Например, без каких-либо настроек видео, воспроизводимое на iPad в альбомной ориентации, выглядит так:

Скриншот видео, воспроизводимого в Safari на iPad, горизонтальная ориентация.
Скриншот видео, воспроизводимого в Safari на iPad, горизонтальная ориентация.

Установка width: 100% или max-width: 100% с помощью CSS может решить многие проблемы с ориентацией макета устройства.

Автовоспроизведение

Атрибут autoplay управляет тем, будет ли браузер загружать и воспроизводить видео немедленно. Точный принцип его работы зависит от платформы и браузера.

Даже на платформах, где возможно автовоспроизведение, вам следует подумать, стоит ли включать его:

  • Использование данных может быть дорогостоящим.
  • Воспроизведение мультимедиа до того, как этого захочет пользователь, может привести к перегрузке полосы пропускания и процессора, а следовательно, и к задержке отображения страницы.
  • Пользователи могут оказаться в ситуации, когда воспроизведение видео или аудио является навязчивым.

Предварительная загрузка

Атрибут preload дает браузеру подсказку о том, какой объем информации или контента следует предварительно загрузить.

Ценить Описание
none Пользователь может решить не смотреть видео, поэтому не загружайте ничего предварительно.
metadata Метаданные (продолжительность, размеры, текстовые дорожки) должны быть предварительно загружены, но с минимальным количеством видео.
auto Рекомендуется сразу загрузить всё видео. Пустая строка даёт тот же результат.

Атрибут preload по-разному влияет на разные платформы. Например, Chrome буферизует 25 секунд видео на десктопе, но не на iOS и Android. Это означает, что на мобильных устройствах могут возникать задержки при запуске воспроизведения, которых нет на десктопе. Подробнее см. в разделе «Быстрое воспроизведение с предварительной загрузкой аудио и видео» или в блоге Стива Содерса .

Теперь, когда вы знаете, как добавлять медиафайлы на свою веб-страницу, пришло время узнать о доступности медиафайлов , с помощью которой вы сможете добавлять субтитры к своему видео для людей с нарушениями слуха или в случаях, когда воспроизведение звука не представляется возможным.