System Design Space
Граф знанийНастройки

Обновлено: 23 июня 2026 г. в 01:21

Прямые трансляции (Live Streaming)

средний

Системный кейс прямых трансляций: конвейер реального времени от захвата и ingest через онлайн-транскодирование, упаковку в сегменты и фан-аут через CDN. Разбор HLS и MPEG-DASH, бюджет задержки (обычный HLS vs Low-Latency HLS vs WebRTC), стоимость транскодирования и выравнивание сегментов, DVR, DRM и чат как отдельный realtime-контур.

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

Глава собирает в одну систему приём потока (ingest), онлайн-транскодирование в лестницу качеств, упаковку в сегменты с манифестом и раздачу через сеть доставки контента, где всё держится на бюджете задержки.

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

Бюджет задержек

Каждый межсервисный переход в критическом пути должен иметь чёткий режим работы и предсказуемое поведение в рамках общего бюджета задержек.

Стратегия раздачи

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

Состояние сессии

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

Плавная деградация

При пиках нагрузок система должна понижать качество сервиса без массового отказа.

Граница

Video Hosting (VOD)

Соседний кейс про загрузку и видео по запросу: оффлайн-транскодирование и доставку готовых файлов. Здесь же речь про прямой эфир в реальном времени.

Читать обзор

Прямая трансляция () — это не «видео, которое смотрят сразу». Это конвейер, который должен в реальном времени принять сигнал, перекодировать его в несколько качеств, нарезать на сегменты и раздать через при от одного источника к миллионам зрителей. Ключевая ось проектирования здесь — не объём хранилища, а : сколько секунд проходит от момента съёмки до картинки на экране зрителя.

Важно сразу отделить этот кейс от соседнего разбора Video Hosting. Там речь про загрузку и VOD (видео по запросу): тяжёлый путь записи, очередь оффлайн-транскодирования и многократно более дешёвую отдачу одного и того же ролика. Здесь же файл не лежит готовым — он рождается прямо сейчас, и каждый сегмент нужно закодировать и доставить, пока событие ещё идёт. Это меняет всё: транскодирование становится онлайн-операцией с дедлайном, а задержка превращается в продуктовое требование.

Чем live отличается от VOD

  • Источник: в VOD файл готов заранее, в live он создаётся в момент трансляции и не имеет «конца».
  • Транскодирование: в VOD — оффлайн, можно ретраить и оптимизировать; в live — онлайн, с жёстким дедлайном на каждый сегмент.
  • Главная метрика: в VOD — стоимость хранения и старт воспроизведения; в live — и устойчивость к пикам зрителей.
  • Перемотка: в VOD доступна вся длительность; в live зритель «гонится» за live edge и ограничен окном DVR.

Требования

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

Функциональные

  • Стример публикует поток (камера/энкодер → ).
  • Зритель смотрит трансляцию в нескольких качествах.
  • Перемотка к live edge и назад в пределах окна DVR.
  • Опционально: чат, реакции, счётчик зрителей в реальном времени.
  • Опционально: запись эфира в VOD после завершения.

Нефункциональные

  • Контролируемая под целевой режим (секунды или суб-секунда).
  • Высокая на пике одновременных зрителей.
  • Адаптивность к сети: между качеством картинки и плавностью при падении канала.
  • Глобальная раздача с близким к зрителю edge.

Пайплайн: от захвата до зрителя

Базовый контур — это четыре стадии: (ingest), онлайн- в лестницу качеств, упаковка в сегменты с манифестом и раздача через . Каждая стрелка на схеме добавляет к бюджету задержки.

Захваткамера / энкодерIngestRTMP / SRT / WebRTCТранскодABR-лестницаУпаковкасегменты + манифестCDN / edgeфан-аут 1→млнБюджет задержкикаждая стадия добавляет миллисекунды → секундызрителиHLS / DASH / WebRTC

Ingest: как сигнал попадает в систему

  • RTMP: исторический стандарт публикации от энкодера; широко поддержан, но поверх и без защиты от потерь.
  • SRT: транспорт поверх с восстановлением потерь — устойчивее на нестабильных каналах contribution-сети.
  • WebRTC: публикация прямо из браузера и путь к суб-секундной задержке — но раздача уже не ложится на обычную сеть доставки контента и требует отдельной сети реле.

Упаковка: почему сегменты

  • Поток нарезается на короткие файлы-сегменты (обычно 2–6 секунд) плюс манифест-плейлист.
  • Сегменты — обычные -объекты, поэтому раздаются и кешируются стандартным .
  • Манифест описывает доступные качества и список сегментов; клиент сам решает, какое качество тянуть.
  • Граница сегмента должна совпадать с ключевым кадром, иначе переключение качества рвёт картинку.

Протоколы доставки: HLS и MPEG-DASH

На клиент трансляция доставляется не одним непрерывным потоком, а как манифест плюс цепочка сегментов поверх обычного . Два доминирующих формата — HLS (Apple) и MPEG-DASH (стандарт ISO/MPEG, доводимый до практики DASH Industry Forum). Оба строятся на сегментах и манифесте, оба полагаются на как на масштабируемый слой раздачи.

HLS

  • Манифест — плейлист .m3u8, сегменты в TS или fMP4 (CMAF).
  • Базовый формат для Apple-устройств и Safari; через hls.js работает почти везде.
  • Формализован в RFC 8216, развивается спецификациями Apple (включая Low-Latency HLS).

MPEG-DASH

  • Манифест — .mpd (XML), сегменты в fMP4/CMAF.
  • Не привязан к кодеку и вендору; в браузере работает через Media Source Extensions и dash.js.
  • Интероп-гайдлайны и профиль ведёт DASH Industry Forum.

ABR на клиенте

Adaptive Bitrate (ABR) означает, что плеер измеряет пропускную способность канала и буфер, а затем выбирает, какое качество из манифеста запросить для следующего сегмента. Логика адаптации живёт на клиенте: сервер лишь публикует доступные варианты. Именно поэтому сегментирование так важно — на каждой границе сегмента клиент может безболезненно переключиться вверх или вниз по .

Бюджет задержки: три режима

Главная ось live-стриминга — задержка против масштаба. Чем ниже задержка, тем сложнее и дороже раздать поток на миллионы зрителей: короче сегменты, меньше буфер, выше требования к энкодеру и сети. Поэтому первым делом стоит назвать целевой режим — для спорта и аукционов важна суб-секунда, для обычного эфира приемлемы несколько секунд, и это разные системы, а не одна с разной настройкой.

РежимТипичная задержкаКомпромисс
Обычный HLS / DASH≈ 10–30 c (оценка)Длинные сегменты и большой буфер дают максимальный масштаб и устойчивость, но «отстают» от реального времени.
Low-Latency HLS / LL-DASH≈ 2–5 c (оценка)Частичные сегменты, preload-подсказки и блокирующая перезагрузка плейлиста сокращают задержку, оставаясь поверх /.
WebRTCсуб-секунда (оценка)Прямая peer-доставка по даёт минимальную задержку, но масштабирование на миллионы требует отдельной сети SFU/реле и дороже.

Числа — порядковые ориентиры из инженерной практики и спецификаций (Apple Low-Latency HLS, DASH-IF), а не гарантированные значения конкретной системы; реальная задержка зависит от длины сегмента, размера буфера и сети. Если меняется длительность сегмента, политика кеширования манифеста или скорость энкодера, весь бюджет задержки надо пересчитать заново.

Масштаб раздачи: CDN, edge и фан-аут

Один стример порождает поток, который смотрят миллионы. Это классический 1→N, и держит его не (origin), а с многоуровневым кешированием. Сегменты и манифест — обычные -объекты, поэтому большая часть запросов обслуживается из , не доходя до источника.

Многоуровневое кеширование

  • Edge-узлы рядом с зрителем держат горячие сегменты; промежуточный слой ( ) гасит запросы к источнику.
  • Сегменты иммутабельны, поэтому кешируются надолго; манифест меняется на каждом новом сегменте и кешируется коротко.
  • Грамотные критичны: слишком долгий кеш манифеста увеличивает задержку, слишком короткий бьёт по на пике.

Пик одновременных зрителей

  • Нагрузка не размазана: финал матча или премьера дают резкий пик, к которому edge должен быть прогрет заранее.
  • «Громовое стадо» на манифест: тысячи плееров синхронно перечитывают плейлист — нужна защита от cache stampede.
  • Подробнее про слои и — в соседнем разборе CDN.

Транскодирование: лестница битрейтов и стоимость

Из одного входящего потока система строит лестницу качеств (ABR ladder) — набор вариантов от низкого до высокого разрешения и битрейта. В отличие от VOD, где это идёт оффлайн, в live кодировать нужно в реальном времени, с дедлайном на каждый сегмент.

Лестница и выравнивание

  • Несколько вариантов (например 1080p / 720p / 480p / 360p) кодируются параллельно из одного источника.
  • Ключевые кадры (IDR) во всех вариантах должны стоять в одних точках, а границы сегментов — совпадать.
  • Без выравнивания клиент не сможет переключаться между качествами без артефактов — это типичная ловушка, которую разбирает инженерный блог Twitch.

Стоимость и аппаратное кодирование

  • Транскодирование в реальном времени — самый дорогой компонент по CPU/GPU на каждый активный канал.
  • GPU и аппаратные энкодеры дают плотность и предсказуемую задержку, но хуже по сжатию, чем медленный софт.
  • Один декодер на источник и общий конвейер вместо N независимых процессов экономят ресурсы — именно к этому пришёл Twitch вместо набора независимых инстансов FFmpeg.

Глубокие разборы

Запись live → VOD и DVR-окно

  • Те же сегменты, что раздаются вживую, можно сохранять и собирать в VOD-ресурс после эфира — мост к кейсу Video Hosting.
  • DVR-окно — это сколько прошлого эфира доступно для перемотки; задаётся длиной плейлиста и хранением сегментов.
  • Зритель «гонится» за live edge; уход назад в DVR увеличивает буфер, но теряет реальное время.

Защита контента

  • Подписанные URL и токены ограничивают доступ к манифесту и сегментам по времени и пользователю.
  • DRM (FairPlay для HLS, Widevine/PlayReady для DASH) шифрует сегменты и управляет ключами.
  • Защита от перезахвата потока (geo-блокировки, ротация ключей) — отдельный продуктовый контур.

Чат и реакции как отдельный контур реального времени (real-time)

Чат, реакции и счётчик зрителей — это не часть видеоконвейера. Это отдельный канал со своим фан-аутом, обычно поверх и шины сообщений, со своей и семантикой доставки. На большом эфире его масштаб (сообщений в секунду) может превосходить нагрузку самого видео по числу событий. Контур фан-аута, подтверждений и повторов ближе к разбору Distributed Message Queue, чем к видеоупаковке.

Компромиссы и типовые ошибки

  • Гнаться за суб-секундой везде: WebRTC «по умолчанию» там, где хватило бы LL-HLS, резко усложняет масштаб и стоимость.
  • Игнорировать выравнивание сегментов: несовпадение ключевых кадров рвёт переключение качества при ABR.
  • Считать live как VOD: закладывать оффлайн-транскодирование и забывать про дедлайн на каждый сегмент.
  • Недооценивать пик: не греть edge и не защищать манифест от синхронного перечитывания на старте события.
  • Смешивать контуры: тащить чат через тот же путь, что и видео, вместо отдельного канала .

Что важно проговорить на интервью

  • Какой целевой бюджет задержки и почему именно он (спорт vs обычный эфир vs интерактив).
  • Где проходит граница между видеоконвейером и отдельным контуром чата/реакций.
  • Как устроена раздача на пике: слои , edge, защита манифеста от «громового стада».
  • Что происходит после эфира: запись в VOD, DVR-окно, защита токенами и DRM.

Связанные главы

  • Video Hosting - Соседний кейс про загрузку и VOD: оффлайн-транскодирование, хранение исходников и доставку готовых файлов по запросу.
  • CDN - Многоуровневое кеширование, edge и защитный слой origin (origin shield). Без этого слоя фан-аут сегментов на миллионы зрителей упирается в origin на первом же пике.
  • Real-Time Gaming - Другой класс систем реального времени (real-time) с жёстким бюджетом задержки, где видно цену суб-секундной доставки и обратной связи.
  • Distributed Message Queue - Чат и реакции — это не часть видеоконвейера, а отдельный канал реального времени (real-time): фан-аут, подтверждения, повторы. Здесь видно, во что обходится их доставка.

Чтобы отмечать прохождение, включи трекинг в Настройки