Блог / Руководство

Как скачать прямую трансляцию в Chrome

Как скачать прямую трансляцию в Chrome

Скачать прямую трансляцию в Chrome можно, но с важным ограничением: обычно сохраняется эфир с момента, когда началась запись. Что вышло до вашего прихода – отдельный вопрос, и ответ зависит от того, что сервис оставляет доступным, а не от выбранного инструмента.

Поэтому сначала нужно решить не какое расширение ставить, а что вам на самом деле нужно:

  • Пропущенная часть. Ищите повтор, перемотку в плеере или кнопку загрузки у публикатора. Запись, которая начинается сейчас, не получит то, что сервер уже перестал отдавать.
  • Остаток трансляции – с этого момента. Записывайте прямой эфир, пока он идёт. Для поддерживаемого незащищённого потока в Chrome это делает MAX Video Downloader.
  • Защищённый или неподдерживаемый поток. Честного обходного пути нет. Используйте офлайн-режим или повтор самого сервиса, если они есть.

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

Почему прямой эфир – ещё не файл

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

Наиболее наглядно последствия видны на HLS. Пример живого плейлиста от Apple описывает плейлист, из которого по мере появления новых медиа удаляются старые адреса, – это «движущееся окно в непрерывный поток». Пока трансляция идёт, в плейлисте нет тега EXT-X-ENDLIST: он показывает, что сегменты ещё будут добавляться. Спецификация HLS (RFC 8216) говорит, что сервер вправе ограничивать доступность сегментов, удаляя их из плейлиста, а когда опубликован последний сегмент, плейлист обязан содержать EXT-X-ENDLIST.

Два упрощённых сокращённых плейлиста (не с реального сервиса) показывают один поток в два момента времени. Сначала:

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:58
#EXTINF:6.0,
seg58.ts
#EXTINF:6.0,
seg59.ts
#EXTINF:6.0,
seg60.ts
#EXTINF:6.0,
seg61.ts
#EXTINF:6.0,
seg62.ts

Чуть позже:

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:61
#EXTINF:6.0,
seg61.ts
#EXTINF:6.0,
seg62.ts
#EXTINF:6.0,
seg63.ts
#EXTINF:6.0,
seg64.ts
#EXTINF:6.0,
seg65.ts

Сегменты с 58 по 60 ушли из плейлиста. Запись, которая подключилась во второй момент, не видит ничего раньше сегмента 61, – и это ровно то, с чем сталкивается зритель, пришедший поздно. Сервис может хранить старые сегменты где-то ещё – для перемотки или повтора, а может и не хранить. Сам плейлист этого не сообщает.

Ещё два момента из спецификации пригодятся на практике:

  • Плеер обычно не начинает с самого начала живого плейлиста. RFC 8216 говорит, что если в плейлисте нет EXT-X-ENDLIST, клиент, который собирается воспроизводить его в обычном режиме, не должен выбирать сегмент, начинающийся ближе чем за три целевые длительности до конца. Поэтому плееры стартуют у «живого края», а не с начала того, что опубликовал сервер.
  • Отсутствие EXT-X-ENDLIST – подсказка о плейлисте, а не о платформе. Оно говорит, что поток не помечен завершённым, но ничего не сообщает о том, будет ли потом повтор и как долго он хранится.

DASH описывает прямые эфиры динамическим манифестом. Идея та же: манифест постоянно меняется, а готового файла нет, пока трансляция не закончится. О том, как его распознать, – в руководстве по DASH. Про плейлисты HLS, сегменты и дорожки подробнее – в статье Как скачать M3U8 / HLS-видео в Chrome.

Определите, что перед вами

Значок LIVE, ползунок перемотки, повтор и меняющийся плейлист – разные наблюдения, и действовать в каждом случае нужно по-разному.

Что вы видите О чём это говорит Что делать
Трансляция идёт, и вы пришли с самого начала Запись, начатая сейчас, захватит почти всё. Сразу начните запись и следите, чтобы вкладка и соединение были стабильны.
Трансляция идёт, но началась давно Более раннюю часть запись, начатая сейчас, может не получить. Проверьте, есть ли в плеере перемотка; ранее вышедшее можно сохранить, только если сервис ещё отдаёт его или позже опубликует повтор.
В плеере работает ползунок перемотки Сервис открывает часть более раннего материала. Перемотка в плеере показывает, что материал воспроизводим, но не то, что запись захватит всё. Начните запись как можно раньше.
Трансляция закончилась, появился повтор или «прошедший эфир» Теперь это обычная запись. Относитесь как к видео по запросу: кнопка загрузки у публикатора или обычный инструмент для скачивания.
Трансляция закончилась, и ничего не опубликовано Сервис, возможно, не хранит архивы. Никакой загрузчик не вернёт сегменты, которые сервер больше не отдаёт.
В плеере замок или ошибка, либо ничего не обнаруживается Поток может быть защищён или отдаваться так, что инструмент не может его прочитать. Остановитесь. Не пытайтесь обходить защиту.

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

Запись потока или запись экрана

«Скачать» прямую трансляцию можно двумя разными способами, и результат у них разный.

Захват источника следует за медиапотоком, который страница уже загружает, и сохраняет сегменты – так работает загрузчик потоков. Результат – поток в том виде, в котором его отдаёт сервис, в выбранном вами качестве; он не зависит от того, что показано на вашем дисплее, и вкладка может оставаться в фоне.

Запись экрана захватывает то, что показывает и воспроизводит компьютер. Такой инструмент, как OBS, способен записать почти всё, что вы можете смотреть, в том числе потоки, которые загрузчик прочитать не может. Но у этого подхода есть реальные издержки:

  • Качество ограничено разрешением экрана, а видео кодируется второй раз.
  • Всё, что прерывает экран, – уведомления, свёрнутое окно, засыпающий дисплей, – может прервать запись.
  • Звук нужно захватывать отдельно, а захват системного звука в некоторых системах требует дополнительной настройки.
  • Нужно время и внимание: запись идёт со скоростью эфира, и на практике плеер должен оставаться на виду.

Ни один способ не меняет того, что вам разрешено делать с контентом. Запись экрана обходит технический формат потока, но не условия публикатора. Если сервис запрещает запись или защищает поток, чтобы её предотвратить, это верно для обоих подходов, и это не совет обходить схему защиты.

Для обычных незащищённых потоков захват источника, как правило, лучший первый выбор: он сохраняет исходное качество и не занимает экран. Запись экрана стоит рассматривать как запасной вариант – только там, где запись явно разрешена и больше ничем поток прочитать нельзя.

Как записать прямую трансляцию в MAX

MAX работает со страницей, на которой поток уже воспроизводится, и записывает поддерживаемые прямые трансляции, пока они идут, сохраняя их в локальные файлы. Начало записи не гарантирует, что каждый последующий сегмент будет получен: обрыв соединения, устаревшая ссылка или завершение потока сервисом могут оставить пропуски. В FAQ в качестве примеров названы живые потоки без DRM – Twitch, Twitter и VK. MAX не поддерживает защищённые DRM медиа и YouTube, а поддержка живого формата конкретной платформы не гарантирована.

  1. Установите MAX из Chrome Web Store (бесплатно).
  2. Откройте прямую трансляцию и дайте ей воспроизводиться, чтобы страница запросила поток.
  3. Откройте всплывающее окно MAX и выберите найденную трансляцию. Если ничего не появилось, попробуйте Force Detection.
  4. Выберите качество и начните загрузку. Запись охватит эфир с этого момента.

Чего ожидать:

  • В живую запись попадёт только то, что источник ещё отдаёт к моменту старта. MAX не может восстановить сегменты, которые уже ушли из плейлиста.
  • У записи прямых трансляций есть отдельная настройка выходного формата: по умолчанию MKV, также доступны fMP4 и MP4.
  • Если загрузка прервалась, MAX сохраняет уже записанные медиа, и их можно воспроизвести.
  • По умолчанию запись идёт прямо в Chrome. Необязательное десктопное приложение добавляет нативную обработку FFmpeg и подходит для долгих записей – а трансляция на несколько часов именно такая.

Перед долгой записью

Живую запись нельзя переделать, поэтому несколько минут подготовки здесь важнее, чем для видео по запросу:

  • Проверьте свободное место на диске. Часы видео занимают реальный объём, и полный диск прервёт запись.
  • Убедитесь, что компьютер не уснёт и соединение стабильно. Перерыв в соединении может означать пропуск в сегментах, а сервер не обязан долго хранить пропущенные.
  • По возможности начните до начала трансляции. Если открыть страницу за несколько минут до эфира, проблема пропущенного начала исчезает совсем.
  • Учитывайте повтор. Если платформа его публикует, он может оказаться более чистым источником, чем живая запись. Живая запись – запасной вариант, а не лучший.
  • Сделайте короткую пробную запись на тихом потоке, если от настройки зависит что-то важное.

Когда остановиться

Не тратьте время на прямой эфир, если:

  • медиа защищено DRM,
  • правила платформы не разрешают записывать или сохранять трансляцию, или
  • страница вообще не отдаёт пригодного медиаисточника – тогда инструменту нечего записывать.

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