Трейлеры Steam — это HLS: MP4 собирается в вашем браузере
Трейлер Steam — не файл, который можно просто забрать, а плейлист фрагментов. Загрузчик читает качества плейлиста, а ваш браузер собирает их в один MP4.
Раньше Steam публиковал трейлеры как обычные файлы MP4 и WebM, и эти поля до сих пор есть в его store API. Теперь они всегда пусты. Вместо этого Steam публикует мастер-плейлист HLS: небольшой текстовый файл, описывающий версии трейлера и указывающий на фрагменты длиной в несколько секунд каждый.
Сначала плейлист, потом фрагменты
Работа резолвера здесь заканчивается рано. Он читает метаданные страницы магазина, берёт URL мастер-плейлиста трейлера, разбирает его и возвращает одну строку на версию с её разрешением, битрейтом и частотой кадров. Он никогда не забирает видеофрагменты и ничего не собирает — это означало бы гонять всё видео через сервер без причины.
| Что читает резолвер | Что затем делает браузер |
|---|---|
| Мастер-плейлист: версии, разрешения, битрейты, аудиогруппа | Выбирает версию, которую вы указали |
| Шаблон сегментов внутри плейлиста | Забирает фрагменты этой версии с CDN Steam и соединяет их |
| Аудиогруппа, названная в мастере | Сливает видео и аудиодорожку AAC в один MP4 |
Соединение происходит во вкладке, которая уже открыта, с собственного CDN Steam (video.akamai.steamstatic.com). Двухминутный трейлер — это примерно девяносто фрагментов, поэтому прогресс-бар заполняется за несколько секунд при обычном соединении.
Чтение списка качеств
- Каждая строка — одна версия, которую трейлер действительно несёт, от большего разрешения к меньшему.
- Строки показывают разрешение и битрейт, потому что две версии могут совпадать по разрешению и различаться объёмом данных.
- Трейлеры Steam часто доходят до 1920×1080, но маленький трейлер инди-игры может остановиться куда ниже.
- Трейлеры и клипы геймплея перечисляются вместе; у каждого есть постер, чтобы различить их до скачивания.
Фрагменты копируются в готовый MP4 байт в байт. Картинка и звук — ровно то, что играет собственный клиент Steam в этом разрешении: соединение меняет контейнер, а не перекодирует, поэтому по пути ничего не смягчается.
Что может пойти не так
Две вещи, обе про сеть, а не про видео. Если метаданные магазина Steam не отвечают, резолвер повторяет попытку один раз, прежде чем сообщить о сбое. Если сам плейлист не удаётся разобрать, применяется тот же повтор — а если он всё равно не проходит, страница говорит об этом, а не предлагает скачивание, которое не завершится.
Страница игры без видео возвращает no_video. Это касается и страниц, где единственный медиаконтент — галерея скриншотов, что обычно для невыпущенных игр.
Коротко
- Steam больше не отдаёт обычные файлы трейлеров; HLS — единственный путь.
- Резолвер читает плейлист; ваш браузер забирает фрагменты и сливает их.
- Готовый MP4 — копия потока, а не перекодирование.
- Ничто не проходит через этот сайт и ничего не сохраняется.
Вопросы
Скачанный трейлер хуже по качеству, чем тот, что играет Steam?
Нет. Фрагменты копируются в MP4 байт в байт, поэтому картинка и звук совпадают с выбранной версией — тем же потоком, который играет собственный клиент Steam в этом разрешении.
Почему скачивание из Steam показывает прогресс-бар, а из Pinterest — нет?
Потому что CDN Steam позволяет браузеру читать фрагменты, так что страница действительно скачивает файл и может сообщать о прогрессе. CDN Pinterest этого не позволяет, поэтому то скачивание вынуждено быть простым переходом.
Страница игры не показывает видео — почему?
К этой странице не привязано ни трейлеров, ни клипов геймплея. Галереи скриншотов — не видео, а у невыпущенных игр часто нет ни того ни другого до приближения к релизу.