Перейти к содержимому

Трейлеры Steam — это HLS: MP4 собирается в вашем браузере

Трейлер Steam — не файл, который можно просто забрать, а плейлист фрагментов. Загрузчик читает качества плейлиста, а ваш браузер собирает их в один MP4.

Раньше Steam публиковал трейлеры как обычные файлы MP4 и WebM, и эти поля до сих пор есть в его store API. Теперь они всегда пусты. Вместо этого Steam публикует мастер-плейлист HLS: небольшой текстовый файл, описывающий версии трейлера и указывающий на фрагменты длиной в несколько секунд каждый.

Сначала плейлист, потом фрагменты

Работа резолвера здесь заканчивается рано. Он читает метаданные страницы магазина, берёт URL мастер-плейлиста трейлера, разбирает его и возвращает одну строку на версию с её разрешением, битрейтом и частотой кадров. Он никогда не забирает видеофрагменты и ничего не собирает — это означало бы гонять всё видео через сервер без причины.

Что читает резолверЧто затем делает браузер
Мастер-плейлист: версии, разрешения, битрейты, аудиогруппаВыбирает версию, которую вы указали
Шаблон сегментов внутри плейлистаЗабирает фрагменты этой версии с CDN Steam и соединяет их
Аудиогруппа, названная в мастереСливает видео и аудиодорожку AAC в один MP4

Соединение происходит во вкладке, которая уже открыта, с собственного CDN Steam (video.akamai.steamstatic.com). Двухминутный трейлер — это примерно девяносто фрагментов, поэтому прогресс-бар заполняется за несколько секунд при обычном соединении.

Чтение списка качеств

Фрагменты копируются в готовый MP4 байт в байт. Картинка и звук — ровно то, что играет собственный клиент Steam в этом разрешении: соединение меняет контейнер, а не перекодирует, поэтому по пути ничего не смягчается.

Что может пойти не так

Две вещи, обе про сеть, а не про видео. Если метаданные магазина Steam не отвечают, резолвер повторяет попытку один раз, прежде чем сообщить о сбое. Если сам плейлист не удаётся разобрать, применяется тот же повтор — а если он всё равно не проходит, страница говорит об этом, а не предлагает скачивание, которое не завершится.

Страница игры без видео возвращает no_video. Это касается и страниц, где единственный медиаконтент — галерея скриншотов, что обычно для невыпущенных игр.

Коротко

Вопросы

Скачанный трейлер хуже по качеству, чем тот, что играет Steam?

Нет. Фрагменты копируются в MP4 байт в байт, поэтому картинка и звук совпадают с выбранной версией — тем же потоком, который играет собственный клиент Steam в этом разрешении.

Почему скачивание из Steam показывает прогресс-бар, а из Pinterest — нет?

Потому что CDN Steam позволяет браузеру читать фрагменты, так что страница действительно скачивает файл и может сообщать о прогрессе. CDN Pinterest этого не позволяет, поэтому то скачивание вынуждено быть простым переходом.

Страница игры не показывает видео — почему?

К этой странице не привязано ни трейлеров, ни клипов геймплея. Галереи скриншотов — не видео, а у невыпущенных игр часто нет ни того ни другого до приближения к релизу.

Инструменты в этой статье

Все статьи