04-02-01 Сигналинг: зачем нужен отдельный протокол управления сессией

В предыдущих лекциях вы познакомились с медиапротоколами, такими как RTP, RTSP, SRT и HLS, которые отвечают за передачу аудио- и видеоданных. Однако при переходе от одностороннего стриминга (например, трансляции с камеры на YouTube) к интерактивной видеосвязи (например, видеозвонку в Zoom или WebRTC) возникает множество новых задач, которые не может решить один лишь медиатранспорт. Для их решения требуется отдельный уровень — сигналинг.
Что такое сигналинг?
Сигналинг — это протокол управления сессией, который не передаёт медиаданные напрямую, но отвечает за организацию, настройку и завершение сеанса связи. Его задача — согласовать все параметры соединения до начала передачи видео и звука, а также управлять этим соединением во время его работы.
Представьте, что вы хотите позвонить коллеге. Просто начать говорить в пустоту бессмысленно — сначала нужно:
- Узнать, где он находится (его номер или адрес),
- Позвонить ему (отправить приглашение),
- Дождаться ответа (подтверждение),
- Договориться, на каком языке говорить (аудиокодек),
- И, наконец, начать разговор.
Сигналинг выполняет все эти шаги в мире цифровой связи.
Основные задачи сигналинга
1. Поиск и адресация участников
Чтобы установить связь, один участник должен найти другого. Для этого используется уникальный идентификатор, например:
- Номер телефона (в традиционной телефонии),
- SIP-адрес вида
user@domain.com(аналог электронной почты), - Имя пользователя в мессенджере.
Этот идентификатор позволяет системе определить, куда направить приглашение на вызов.
Пример:
Вы нажимаете "Позвонить" в Zoom, вводя email коллеги. Система использует этот email как идентификатор для поиска его устройства и отправки сигнала приглашения.
2. Установление и завершение вызова
Сигналинг отвечает за жизненный цикл сессии:
- Начало вызова: отправка приглашения (например, командой
INVITEв SIP), - Подтверждение: получатель отвечает, принимая или отклоняя вызов,
- Завершение: один из участников отправляет сигнал завершения (например,
BYE), и соединение закрывается.
Это похоже на набор номера, гудки, разговор и "положить трубку".
Аналогия из повседневной жизни:
Как при звонке по телефону — вы набираете номер (INVITE), слышите гудки (Ringing), собеседник берёт трубку (200 OK), вы разговариваете, а потом один из вас кладёт трубку (BYE).
3. Переговоры о параметрах медиа
Перед началом передачи видео и звука стороны должны договориться о множестве технических деталей. Сигналинг обеспечивает обмен описанием сессии, в котором указываются:
| Параметр | Описание |
|---|---|
| Поддерживаемые кодеки | Какие аудио- и видеокодеки может использовать каждый участник (например, H.264, VP8, Opus)? |
| Направление потоков | Будет ли участник только отправлять видео (sendonly), только получать (recvonly), или и то, и другое (sendrecv)? |
| IP-адреса и порты | По каким сетевым адресам и портам будет происходить передача медиа? |
| Тип транспорта | Будет ли использоваться UDP (обычно для RTP), TCP или что-то иное? |
| Профили и уровни кодеков | Например, для H.264 — profile-level-id, packetization-mode и т.д. |
Этот обмен происходит с помощью SDP (Session Description Protocol), который передаётся в теле сигнальных сообщений (например, внутри SIP-запроса INVITE).
Пример:
Участник А говорит: «Я могу принимать видео в H.264, разрешением до 1080p, и аудио в Opus».
Участник Б отвечает: «Я тоже поддерживаю H.264 и Opus, давайте использовать эти кодеки. Мой IP — 192.168.1.100, порт 5004 для видео».
Теперь оба знают, как и куда отправлять медиаданные.
4. Управление состоянием сессии
Даже после начала вызова может потребоваться его изменение. Сигналинг позволяет управлять сессией в реальном времени:
- Перевести вызов на удержание (hold),
- Передать вызов другому участнику (transfer),
- Отключить микрофон или камеру (mute/unmute),
- Добавить нового участника в конференцию.
Эти действия реализуются через дополнительные сигнальные сообщения, которые обновляют параметры сессии.
Пример:
Во время видеоконференции вы нажимаете «Отключить микрофон». Это не останавливает медиапоток физически, а отправляет сигнальное сообщение, которое информирует систему: «Теперь мой аудиопоток — recvonly (только приём) или inactive (неактивен)».
Почему RTSP недостаточен для видеосвязи?
Ранее в курсе вы изучали RTSP (Real-Time Streaming Protocol) — протокол, который также управляет воспроизведением потока. На первый взгляд, RTSP похож на сигналинг. Однако его возможности ограничены сценарием одностороннего стриминга от сервера к клиенту, как при просмотре камеры через VLC.
Основные ограничения RTSP:
- Нет поддержки двустороннего обмена медиа (например, ваш микрофон → собеседнику),
- Нет механизма поиска и адресации участников (RTSP работает по URL, а не по идентификатору пользователя),
- Нет гибких переговоров о параметрах (например, выбор общего кодека),
- Нет поддержки управления конференцией (добавление участников, передача вызова и т.д.).
Таким образом, RTSP — это частный случай управления потоком, тогда как сигналинг в видеосвязи — это полноценный протокол управления коммуникацией.
Современные протоколы сигналинга
Для решения всех перечисленных задач используются специализированные сигнальные протоколы:
1. SIP (Session Initiation Protocol)
- Где используется: корпоративные системы видеоконференцсвязи (ВКС), IP-телефония (VoIP), IP-АТС.
- Особенности:
- Стандартизирован IETF,
- Работает поверх UDP/TCP,
- Использует SIP-URI (
sip:user@domain), - Интегрируется с SDP для описания медиа.
Пример:
Аппаратный видеотерминал от Cisco регистрируется на SIP-сервере с адресомjohn@company.comи принимает вызовы по этому адресу.
2. Веб-сигналинг (в контексте WebRTC)
- Где используется: браузерные видеозвонки (Google Meet, Zoom в браузере, Jitsi).
- Особенности:
- Не стандартизирован — разработчик сам выбирает технологию передачи сигнала (часто WebSocket поверх HTTPS),
- Используется для обмена SDP-описаниями (offer/answer) и ICE-кандидатами,
- Работает в связке с медиастеком WebRTC.
Пример:
При открытии ссылки на видеоконференцию в браузере JavaScript-приложение через WebSocket отправляет сигнал "Я хочу присоединиться" на сервер, получает от него SDP-описание других участников и начинает установку соединения.
Итог: сигналинг — основа интерактивной связи
Сигналинг — это критически важный уровень в архитектуре видеосвязи. Он обеспечивает:
- Поиск и идентификацию участников,
- Установление и завершение вызова,
- Согласование параметров медиа,
- Управление сессией в реальном времени.
Без сигналинга невозможно построить ни один интерактивный сервис — от простого видеозвонка до сложной многопользовательской конференции.
Хотя сигналинг не передаёт само видео и звук, он создаёт все условия для их корректной и безопасной передачи по протоколам вроде RTP/RTCP и SRTP, которые мы рассмотрим далее.
Ключевое понимание:
Сигналинг — это "дирижёр" оркестра видеосвязи: он не играет на инструментах (не передаёт медиа), но решает, кто, когда и как должен играть.