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

02 UDP vs TCP для медиа

UDP и TCP в медиапередаче: как выбор протокола влияет на видео и звук

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

В этом тексте мы разберём:

  1. Чем отличаются протоколы UDP и TCP.
  2. Почему для живых трансляций обычно выбирают UDP.
  3. Почему веб‑платформы стриминга чаще используют TCP.
  4. Как это связано с задержкой, потерями пакетов и качеством изображения/звука.

UDP vs TCP

1. Транспортный протокол и его роль в передаче медиа

Транспортный протокол — это уровень сетевого стека, который отвечает за доставку данных между двумя конечными точками: отправителем (например, IP‑камера, стриминговый кодер) и получателем (плеер, сервер, записывающее устройство).

При работе с мультимедиа (аудио и видео) у нас всегда есть конфликт между:

  • Надёжностью передачи (дошли ли все данные, ничего ли не потерялось);
  • Задержкой (через сколько миллисекунд или секунд зритель увидит/услышит то, что происходит сейчас).

В разных задачах приоритеты различаются:

  • Для живой трансляции (онлайн‑ивент, видеоконференция, мониторинг камер) критична минимальная задержка.
  • Для веб‑стриминга по запросу (видео на сайте, запись трансляции, просмотр архива) важнее, чтобы всё доехало без потерь, а небольшая задержка не так страшна.

Именно поэтому на транспортном уровне чаще всего рассматриваются два основных протокола — UDP и TCP.


2. UDP: скорость важнее гарантии

2.1. Что такое UDP

UDP (User Datagram Protocol) — это транспортный протокол, который:

  • Не устанавливает соединение в явном виде (нет механизма “рукопожатия” перед началом передачи).
  • Не гарантирует доставку пакетов (нет подтверждений, нет повторной отправки).
  • Не гарантирует порядок доставки (пакеты могут прийти не по порядку или не прийти вообще).
  • Работает максимально просто и быстро: «отправил — и забыл».

Пакет UDP иногда называют датаграммой — это самостоятельная единица данных, которую сеть старается доставить по указанному адресу, но без гарантий.

2.2. Почему UDP подходит для живого видео и аудио

Для живых трансляций (live‑стриминг) важна низкая задержка. Зритель должен видеть и слышать происходящее как можно ближе к “сейчас”.

UDP идеально подходит под эту задачу:

  1. Нет ожидания подтверждений
    Отправитель не ждёт ответа от получателя на каждый пакет. Это сокращает время доставки и убирает дополнительный сетевой трафик.
  2. Нет повторных передач «отстающих» пакетов
    Если пакет потерялся, UDP не пытается его отправить заново. Потерянный пакет уже «пропустил свой момент» во времени — пока мы бы его ждали, реальный поток ушёл бы вперёд, и задержка увеличилась бы.
  3. Постоянный поток данных
    Видео и аудио при live‑стриминге — это непрерывный поток. Лучше иногда потерять часть данных, но сохранить плавность и актуальность потока, чем замораживать картинку из‑за ожидания старых пакетов.

2.3. Что происходит при потере пакетов в UDP

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

В мультимедийных приложениях основной принцип такой:
«Лучше показать слегка испорченный кадр вовремя, чем идеальный, но сильно с опозданием

Декодер (программа или устройство, которое расшифровывает сжатое видео и аудио) может:

  • Интерполировать недостающие данные — то есть “додумать” содержимое кадра на основе предыдущих и последующих кадров.
  • Сгладить артефакты, сделать плавные переходы, замазать или “растянуть” информацию во времени.

Для зрителя это выглядит, например, как:

  • Кратковременное небольшое «смазывание» картинки.
  • Едва заметный скачок или потеря детали в движении.

Но поток продолжает идти без остановок, и большая часть аудитории не замечает этих проблем.

2.4. RTP и UDP

На практике для переноса медиаданных часто используется протокол RTP (Real-time Transport Protocol).

Он:

  • Работает поверх UDP в большинстве систем реального времени.
  • Добавляет к каждому пакету метку времени и номер последовательности, чтобы получатель мог собрать поток в правильном порядке и синхронизировать аудио/видео.

Таким образом:

  • UDP даёт быстрый, “лёгкий” транспорт.
  • RTP добавляет структуру и синхронизацию, необходимые для реального времени.

3. TCP: надёжность важнее задержки

3.1. Что такое TCP

TCP (Transmission Control Protocol) — это транспортный протокол, который:

  • Устанавливает логическое соединение между отправителем и получателем (трёхшаговое “рукопожатие”).
  • Гарантирует доставку всех пакетов (если пакет потерялся, запрашивается повторная передача).
  • Гарантирует порядок доставки (получатель видит данные в том порядке, в котором они были отправлены).
  • Управляет скоростью передачи (чтобы не перегружать сеть).

TCP предназначен для ситуаций, где нельзя терять данные: файлы, веб‑страницы, API‑запросы, банковские транзакции и т.п.

3.2. Механизм надёжности и его цена

TCP обеспечивает надёжность за счёт нескольких механизмов:

  1. Подтверждения (ACK)
    Получатель регулярно отправляет отправителю подтверждения о том, какие данные он получил.
  2. Повторная передача (retransmission)
    Если подтверждение не пришло за заданное время, отправитель предполагает, что пакет потерялся, и отправляет его заново.
  3. Гарантированный порядок
    TCP собирает поток байт в правильной последовательности. Если какой-то пакет задерживается, получатель ждёт его, прежде чем передавать данные дальше приложению.

Из-за этих механизмов при проблемах в сети возникает эффект, который критичен для мультимедиа.

3.3. Head-of-line blocking: что это и почему это плохо для “реального времени”

Head-of-line blocking — это ситуация, когда:

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

В мультимедийных условиях это приводит к:

  • Задержке увеличенной на сотни миллисекунд или даже секунды.
  • Подвисанию картинки, “фризам” (картинка стоит, звук может прерваться или тоже зависнуть).

Для реального времени это неприемлемо. Пользователь лучше проглотит мелкие визуальные артефакты, чем длительную паузу.

::: warn На практике, например, при работе с источниками RTSP-потоков даже в компактной локальной сети, не говоря о корпоративной сети вроде зданий ВШЭ, лучше использовать TCP: при передаче потоков по UDP поток разваливается очень часто. Это наблюдается как в коммерческом ПО (видеомикшер VMix), так и в известных open source приложениях (OBS, gstreamer, ffmpeg, vlc).

Это противоречит теоретическим положениям (действительно, во всех учебниках пишут, что в реальном времени видео лучше передавать по UDP, не будем с ними спорить), но когда вам понадобится, чтобы картинка не сыпалась хотя бы в домашней системе видеонаблюдения, не говоря о производственном видеокомплексе, вспомните это примечание. :) Один кадр = 40 мс, за это время TCP много раз обернется с переотправкой потерянных пакетов.

:::


4. Где TCP всё-таки уместен: веб‑стриминг и HTTP‑протоколы

Несмотря на проблемы с задержкой, TCP имеет большое преимущество — надёжность и предсказуемость доставки. Это особенно важно для:

  • Веб‑стриминга через браузер.
  • Видео по запросу (VOD), когда пользователь смотрит уже записанный контент.
  • Масштабируемых публичных трансляций через CDN (Content Delivery Network).

Большинство веб‑сервисов работают поверх протокола HTTP, а HTTP, в свою очередь, использует TCP как транспорт.

4.1. HLS и DASH поверх TCP

Протоколы HLS (HTTP Live Streaming) и MPEG‑DASH:

  • Разбивают видео на короткие сегменты (обычно от 2 до 10 секунд).
  • Каждый сегмент — это по сути небольшой файл (часть видеофайла), который загружается по HTTP.
  • Клиент (браузер или плеер) скачивает один сегмент за другим по TCP.

Преимущества такого подхода:

  • Все сегменты доходят до клиента полностью и без искажений.
  • Можно легко кэшировать сегменты на серверах и в CDN.
  • Легко масштабировать трансляцию на миллионы зрителей, используя стандартную веб‑инфраструктуру.

Недостаток:

  • Суммарная задержка вырастает из‑за:
    • буферизации нескольких сегментов;
    • особенностей TCP (подтверждения, возможные повторные передачи).

Но для массового веб‑просмотра задержка в 10–30 секунд чаще всего приемлема.


5. Сравнение подходов: UDP vs TCP для медиа

Ниже приведена компактная таблица, обобщающая ключевые различия:

ХарактеристикаUDP + RTP (типичные live‑системы)TCP + HTTP (HLS, DASH и др.)
Гарантия доставкиНет (возможны потери пакетов)Да (пакеты доставляются или переотправляются)
Порядок доставкиНе гарантирован протоколомГарантирован
ЗадержкаМинимальная, оптимально для real‑timeВыше, зависит от буферизации и сети
Реакция на потерю пакетаПакет игнорируется, плеер интерполируетПовторная отправка, ожидание (head-of-line blocking)
Качество при плохой сетиМогут быть артефакты, но поток продолжает идтиВозможны фризы, остановки из‑за ожидания
Типичные сценарииВидеоконференции, мониторинг, студийные фидыВеб‑стриминг, VOD, массовые онлайн‑трансляции

6. Выбор протокола в зависимости от задачи

На практике сложился следующий подход:

  1. Живые системы (live‑системы), где критична низкая задержка
    Примеры: видеоконференции, онлайн‑игры с видеопотоком, прямые эфиры с минимальным отставанием, системы видеонаблюдения для оперативного реагирования.
    • Чаще всего используют UDP как транспорт.
    • Поверх UDP обычно работают протоколы типа RTP, а также решения для реального времени с собственными надстройками (коррекция потерь, адаптация битрейта и т.п.).
  2. Веб‑платформы и массовые стриминговые сервисы
    Примеры: стриминговые сайты, видеоархивы, трансляции через браузер, встроенные плееры на веб‑страницах.
    • Используют TCP для надёжности и совместимости с существующей веб‑инфраструктурой.
    • Протоколы вроде HLS и DASH работают поверх HTTP, а HTTP поверх TCP.

Итого:

  • UDP выбирают там, где важнее быстрота и актуальность сигнала.
  • TCP выбирают там, где важнее надёжность и масштабируемость, а задержка может быть больше.

Выбор между UDP и TCP в задачах медиапередачи — это выбор между:

  • Низкой задержкой, но возможными искажениями (UDP, live‑сценарии).
  • Гарантированной доставкой, но более высокой задержкой (TCP, веб‑стриминг).