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

Протокол RTP: передача аудио и видео в реальном времени

В этом тексте мы разберём протокол RTP (Real-time Transport Protocol) как основу передачи аудио‑ и видеоданных в реальном времени по сети. Материал ориентирован на самостоятельное изучение: каждое ключевое понятие сопровождается пояснением и примерами.


RTP

1. Назначение протокола RTP​

RTP (Real-time Transport Protocol) — это сетевой протокол, предназначенный для передачи медиа в реальном времени: аудио (речь, музыка) и видео (камера, экран, трансляции) по IP‑сетям.

Важно сразу понять его роль:

  • RTP не устанавливает соединение между участниками.
  • RTP не гарантирует доставку пакетов (не занимается повторной передачей потерянных данных).
  • Основная задача RTP — правильно упорядочить и синхронизировать медиаданные (кадры видео, аудиосэмплы) на приёмной стороне.

То есть, RTP — это «транспортный формат» для медиа в реальном времени, который опирается на другие протоколы более низкого уровня (обычно UDP) для доставки пакетов.

Пример ситуации использования RTP​

Представьте видеозвонок:

  • Ваше устройство захватывает звук с микрофона и картинку с камеры.
  • Эти данные кодируются (сжимаются) в определённый формат — например, видео в H.264, звук в Opus.
  • Затем закодированные медиафрагменты «упаковываются» в RTP‑пакеты и отправляются по сети.
  • На другой стороне устройство получает RTP‑пакеты, раскладывает их по времени и порядку, декодирует и воспроизводит.

Если несколько пакетов придут не по порядку или какой‑то пакет потеряется, именно механизмы RTP помогают приёмнику понять, что произошло, и максимально корректно воспроизвести поток.


2. Общая структура RTP-пакета​

Каждый RTP‑пакет состоит из двух основных частей:

  1. Заголовок (header) — служебная информация, которая помогает приёмнику правильно обработать данные.
  2. Полезная нагрузка (payload) — собственно фрагмент аудио или видео, закодированный соответствующим кодеком.

Заголовок имеет фиксированную структуру. Ключевые поля заголовка:

  • номер последовательности (sequence number);
  • метка времени (timestamp);
  • идентификатор источника SSRC (synchronization source);
  • тип полезной нагрузки (payload type).

Далее разберём эти поля по отдельности.


3. Номер последовательности: восстановление порядка пакетов​

Номер последовательности (sequence number) — это целое число, которое увеличивается на 1 для каждого нового RTP‑пакета в потоке.

Зачем нужен номер последовательности​

Сеть IP не гарантирует, что пакеты:

  • придут в том же порядке, в каком были отправлены;
  • не потеряются по пути.

Поэтому приёмник не может просто «верить» порядку прихода. Он использует номер последовательности, чтобы:

  1. Восстановить исходный порядок пакетов.
  2. Обнаружить потери (например, если после пакета с номером 100 сразу пришёл пакет с номером 102, значит 101 потерян).
  3. Корректно буферизовать поток, особенно когда задержки в сети различаются (джиттер).

Пример​

Отправитель посылает пакеты с номерами: 1, 2, 3, 4, 5.

Из‑за особенностей сети приёмник получает: 2, 1, 4, 5.

По номерам последовательности приёмник понимает:

  • нужно переставить пакеты в порядке 1, 2, 4, 5;
  • пакет 3 отсутствует — его не удастся восстановить через RTP (повторной передачи RTP не делает), но декодер может, например, показать последний корректный кадр ещё раз или частично восстановить картинку.

4. Метка времени: синхронизация воспроизведения​

Метка времени (timestamp) — это значение, которое указывает, когда (в какой момент времени) данные этого пакета должны быть воспроизведены.

Важно понимать:

  • Метка времени не обязательно совпадает с реальным временем (часы/дата).
  • Это, как правило, счётчик «тактов» с определённой частотой, зависящей от типа медиа.

Зачем нужна метка времени​

  1. Поддержание равномерного воспроизведения
    Приёмник с помощью меток времени понимает, в каком темпе «крутить» аудиопоток и видеопоток:
    • для аудио — чтобы не ускорять и не замедлять речь;
    • для видео — чтобы показать кадры с нужной частотой (например, 25 или 30 кадров в секунду).
  2. Синхронизация аудио и видео
    Если у нас есть и звук, и изображение, метки времени помогают воспроизводить их согласованно — чтобы движения губ совпадали с речью.

Мини‑пример​

  • Видеопоток: частота кадров 25 кадров в секунду.
  • Допустим, в RTP метки времени для видео увеличиваются на 3600 единиц на каждый кадр (частота таймстампа 90000 Гц / 25 кадров).
  • Тогда:
    • первый кадр может иметь timestamp = 0,
    • второй кадр — 3600,
    • третий — 7200 и т.д.

Приёмник, видя такие метки, понимает, что пакеты с timestamp = 7200 нужно воспроизвести позже, чем пакеты с timestamp = 3600, и выдерживает соответствующий интервал между кадрами.


5. Идентификатор источника SSRC: различение потоков​

SSRC (Synchronization Source) — это числовой идентификатор источника медиа внутри RTP‑сессии.

Для чего нужен SSRC​

В одной и той же сетевой сессии (например, в групповом видеозвонке) может передаваться несколько потоков:

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

SSRC позволяет:

  1. Различать источники — понимать, какой пакет от какого отправителя.
  2. Объединять пакеты одного потока, даже если номера портов или IP‑адреса могут быть общими для нескольких потоков.
  3. Поддерживать синхронизацию аудио и видео от одного и того же источника (когда это требуется).

Пример​

В конференции участвуют три человека: A, B и C. Каждый передаёт по одному видеопотоку.

  • Поток A — SSRC = 0x11AA22BB
  • Поток B — SSRC = 0x33CC44DD
  • Поток C — SSRC = 0x55EE66FF

Приёмник, анализируя поле SSRC в заголовке RTP, точно знает, к какому участнику относится каждый пакет, даже если все они приходят на один и тот же сервер и один и тот же порт.


6. Тип полезной нагрузки: какой кодек внутри​

В заголовке RTP есть поле тип полезной нагрузки (payload type). Оно указывает, какой формат медиа (какой кодек) содержится в данном пакете.

Что такое «полезная нагрузка»​

Полезная нагрузка (payload) — это часть пакета, в которой находятся данные, подлежащие доставке:

  • для аудио: закодированные аудиосэмплы (например, в формате Opus, G.711 и т.п.),
  • для видео: закодированные видеоблоки/фреймы (например, H.264, H.265 и др.).

Зачем нужен тип полезной нагрузки​

Приёмнику необходимо:

  1. Понимать, каким декодером обрабатывать содержимое пакета.
  2. Правильно интерпретировать структуру данных внутри payload (разделение на фреймы, блоки и т.д.).

Например, тип полезной нагрузки может указывать:

  • аудио Opus,
  • аудио G.711,
  • видео H.264,
  • видео VP8 и т.д.

При анализе RTP‑потока, например в Wireshark, по полю payload type сразу видно, какой кодек используется.


7. Связка RTP и RTCP: контроль качества передачи​

RTP редко используется в одиночку. Он почти всегда работает в паре с протоколом RTCP (Real-time Transport Control Protocol).

Что делает RTCP​

RTCP — это служебный протокол контроля, который:

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

Чаще всего RTCP‑пакеты передаются по тем же адресам, что и RTP, но по соседним портам.

Типичная информация в RTCP​

RTCP может содержать:

  • уровень потерь пакетов — сколько пакетов не дошло до получателя;
  • задержки (latency) — оценка времени, которое проходит от отправки до получения;
  • джиттер (jitter) — разброс задержек (насколько сильно варьируется время прихода пакетов);
  • сведения об источниках (SSRC) и участниках сессии.

Зачем всё это нужно​

  1. Мониторинг качества
    Системы могут автоматически отслеживать, что поток начал «сыпаться», растёт задержка или увеличиваются потери.
  2. Адаптация параметров передачи
    Некоторые системы (например, видеоконференции) на основе данных RTCP:
    • снижают битрейт видео при плохом канале;
    • уменьшают разрешение или фреймрейт;
    • изменяют стратегию кодирования, чтобы компенсировать потери.
  3. Диагностика проблем
    Администратор, анализируя RTCP‑отчёты, может понять, где возникают проблемы: на стороне отправителя, в канале или у получателя.

8. RTP «под капотом»: где он используется на практике​

В реальных системах протокол RTP редко настраивается вручную пользователем. Чаще всего он скрыт «под капотом» более высокоуровневых технологий и протоколов.

Примеры технологий, использующих RTP​

  • RTSP (Real-Time Streaming Protocol)
    Используется, например, для доступа к потокам IP‑камер. RTSP занимается «сигнализацией» (команды типа PLAY, PAUSE, SETUP), а сами медиаданные передаются по RTP.
  • WebRTC
    Технология для обмена аудио‑ и видеоданными в реальном времени (браузер‑к‑браузеру или через серверы). Внутри WebRTC для передачи медиа тоже используется RTP, адаптированный к защищённым каналам (SRTP).
  • SRT (Secure Reliable Transport)
    Хотя SRT сам по себе обеспечивает надёжный транспорт по нестабильным сетям, он также часто инкапсулирует внутри себя медиаданные, которые концептуально организованы аналогично RTP‑трафику.

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


9. Анализ RTP-потоков в Wireshark​

Хотя RTP обычно «спрятан» внутри других протоколов, его можно увидеть и исследовать с помощью анализаторов сетевого трафика, таких как Wireshark.

Что можно сделать в Wireshark​

  1. Поймать и отфильтровать RTP‑пакеты
    Wireshark умеет автоматически распознавать RTP‑трафик и показывать для него:
    • номера последовательности;
    • метки времени;
    • SSRC;
    • тип полезной нагрузки.
  2. Оценить качество передачи
    По последовательности номеров и времени прихода пакетов можно увидеть:
    • наличие потерь пакетов;
    • перестановки пакетов;
    • задержки и джиттер.
  3. Проанализировать использующиеся кодеки
    Видя типы полезной нагрузки, можно определить:
    • какой видео‑ и аудиокодек использует устройство или приложение;
    • соответствуют ли параметры ожиданиям (например, H.264 вместо ожидаемого H.265).

Пример практического применения​

При отладке IP‑камеры:

  • Вы запускаете Wireshark на машине, принимающей RTSP‑поток.
  • Фильтруете RTP‑пакеты.
  • Проверяете:
    • нет ли больших потерь по sequence number;
    • нормально ли растут timestamp;
    • совпадает ли SSRC с ожидаемым источником;
    • какой payload type используется (действительно ли это H.264).

Это помогает понять, проблема в камере, в сети или в принимающем приложении.


10. Итог: роль RTP в системах передачи медиа​

Подведём итог ключевым моментам:

  1. RTP — это протокол транспортировки медиа в реальном времени, ориентированный на аудио и видео.
  2. Он не устанавливает соединение и не гарантирует доставку, а занимается:
    • нумерацией пакетов (sequence number);
    • синхронизацией по времени (timestamp);
    • идентификацией источников (SSRC);
    • описанием типа медиа (payload type).
  3. RTCP дополняет RTP, передавая служебную информацию о качестве соединения: потери, задержки, джиттер.
  4. В современных системах RTP чаще всего используется внутри более высокоуровневых протоколов (RTSP, WebRTC, SRT и др.) и редко настраивается непосредственно пользователем.
  5. Анализ RTP‑трафика возможен с помощью инструментов вроде Wireshark, что важно для диагностики и отладки медиа‑систем.

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