Планирование и протоколы передачи данных¶
Ядро Perfect Streamer — надёжная доставка потоков MPEG-TS между узлами через публичную сеть с потерями пакетов и задержками. В этом разделе описана модель передачи, транспортные протоколы и то, как спланировать канал: выбрать протокол, рассчитать полосу, задержку и порты. Детальные настройки отдельных полей вынесены в контекстное описание веб-интерфейса (Веб-интерфейс), а обработка потока на узле — в раздел Streamer: особенности реализации.
Модель передачи: Stream, Sender, Receiver, Peer¶
Единица работы — поток (Stream), один канал MPEG-TS. Для каждого потока настраивается сервер-передатчик (Sender) и один или несколько приёмников (Receiver); связка «передатчик — приёмник» обозначается Peer.
Настройка сводится к спискам входов (input) и выходов (output) для каждого потока:
на передатчике input — источники MPEG-TS, output — передача на приёмники;
на приёмнике input — приём потока от передатчика.
Несколько входов в списке дают резервирование источников, несколько выходов — одновременную раздачу одного канала многим получателям и по разным протоколам.
Для протоколов, где соединение инициирует приёмник, NAT на его стороне не помеха: приёмник сам подключается к передатчику, и проброс входящих портов на приёмнике не требуется.
Peer-протоколы надёжной передачи¶
Для передачи между передатчиком и приёмником доступны четыре Peer-протокола. Они делятся на два класса по принципу компенсации потерь:
ARQ (Automatic Repeat reQuest) — потерянные пакеты передаются повторно по запросу приёмника. Требует обратного канала и буфера на приёмнике; глубина восстановления настраивается. К этому классу относятся PS1, SRT и RIST.
FEC (Forward Error Correction) — к потоку постоянно добавляются избыточные данные, позволяющие восстановить потери без обратного канала. К этому классу относится Pro-MPEG COP3/RTP+FEC (SMPTE 2022-1/2).
PS1 (Perfect Stream)¶
Протокол собственной разработки на базе UDP. Работает по принципу ARQ с выборочной ретрансмиссией. Отличается низкой ресурсоёмкостью и переносит потоки высокого битрейта, включая полноразмерный MPTS.
Соединение инициирует приёмник, поэтому передатчик требует аутентификации: приёмники прописываются как Peer с логином и паролем либо авторизуются по IP. Задержка определяется буфером приёмника (окно устранения джиттера и ретрансмиссии); буфер передатчика должен быть больше буфера приёмников. При смене активного источника на передатчике приёмники не переподключаются: разрыв восстанавливается штатной ретрансмиссией.
PS1 — проприетарный протокол и работает только между узлами Perfect Streamer. Лучше всего подходит для конфигурации точка-многоточка: один передатчик и много приёмников.
SRT¶
Открытый протокол на базе UDP (UDT). Широко распространён и хорошо компенсирует потери пакетов. Поддерживает режимы listener и caller, что даёт совместимость со сторонним SRT-оборудованием и облачными сервисами.
В режиме listener на передатчике к одному потоку подключается несколько приёмников; для авторизации приёмники прописываются как Peer, доступна авторизация по IP. Инициирующая сторона (caller) может находиться как на приёмнике, так и на передатчике. Запас полосы на ретрансмиссию задаётся в процентах сверх битрейта потока.
На плотных приёмных узлах с большим числом SRT-входов в режиме caller можно отключить встроенную буферизацию приёмника SRT (TSBPD): синхронизацию берёт на себя джиттер-буфер узла (Синхронизация), что заметно снижает нагрузку на CPU.
RIST¶
Открытый протокол на базе RTP/RTCP. Работает по принципу ARQ без ACK, только по NACK. Использует unicast и multicast.
Реализованы профили Simple и Main: Simple занимает два UDP-порта подряд (базовый порт должен быть чётным), Main мультиплексирует данные в один порт. Поддерживается несколько путей (пиров) с взвешенной балансировкой — для резервирования и агрегации. При multicast приёмников может быть много, с авторизацией по IP.
Pro-MPEG FEC¶
Доставка MPEG-TS поверх RTP с упреждающей коррекцией ошибок (FEC), без обратного канала. В PSS реализована двумерная матрица FEC (строки и колонки, SMPTE 2022-2).
Поток RTP-пакетов группируется в матрицу заданного размера, по строкам и колонкам
которой формируются FEC-пакеты. Чем меньше матрица, тем лучше восстановление, но
выше постоянные накладные расходы. FEC-каналы занимают два дополнительных порта
(port+2 и port+4), что нужно учитывать при размещении нескольких потоков на
одном хосте или в одной multicast-группе.
Достоинства — низкая фиксированная задержка и совместимость с профессиональным вещательным оборудованием. Недостатки — постоянный дополнительный трафик и слабое восстановление при больших потерях (свыше ~0,2 %), поэтому протокол рассчитан на управляемые каналы с низкими потерями, а не на «тяжёлый» публичный интернет.
Выбор протокола передачи¶
Протокол |
Принцип |
Обратный канал |
Задержка |
Совместимость |
|---|---|---|---|---|
PS1 |
ARQ поверх UDP |
требуется |
настраиваемая |
только между узлами Perfect Streamer |
SRT |
ARQ поверх UDP (UDT) |
требуется |
настраиваемая |
открытый; стороннее SRT-оборудование и облако |
RIST |
ARQ (NACK) поверх RTP/RTCP |
требуется |
настраиваемая |
открытый; стороннее RIST-оборудование; unicast и multicast |
Pro-MPEG FEC |
FEC поверх RTP |
не требуется |
низкая, фиксированная |
открытый (SMPTE 2022-1/2); профессиональное вещательное оборудование |
Ориентиры выбора:
канал между узлами Perfect Streamer, высокий битрейт или полноразмерный MPTS, раздача точка-многоточка — PS1;
совместимость со сторонним оборудованием или облаком, запас на ретрансмиссию в процентах сверх битрейта — SRT;
открытый транспорт на базе RTP, multicast, балансировка по нескольким путям — RIST;
управляемый канал с низкими потерями, минимальная задержка без обратного канала, профессиональное вещательное оборудование — Pro-MPEG FEC.
Планирование полосы, задержки и портов¶
ARQ-протоколы (PS1, SRT, RIST). Потери компенсируются повторной передачей, поэтому нужно предусмотреть:
обратный канал от приёмника к передатчику;
запас полосы сверх номинального битрейта — всплески потерь вызывают всплески ретрансмиссионного трафика;
буфер на приёмнике под задержку канала. Чем больше буфер, тем глубже восстановление потерь, но выше сквозная задержка; ориентир — несколько значений RTT. Потоки низкого битрейта требуют большего по времени буфера, чтобы в окне восстановления помещалось достаточно пакетов.
FEC-протокол (Pro-MPEG). Избыточные пакеты передаются постоянно, независимо от фактических потерь, поэтому накладные расходы фиксированы и зависят от размера матрицы FEC. Обратный канал не нужен, задержка низкая и фиксированная, но восстановление ограничено, поэтому этот транспорт подходит для каналов с низкими потерями.
Порты. Каждой слушающей точке нужен уникальный UDP-порт в пределах хоста или
группы. Дополнительно учитывайте, что профиль RIST Simple занимает два порта
подряд (чётный базовый и следующий), а Pro-MPEG — базовый порт плюс два FEC-порта
(port+2 и port+4). В сети Meshwork общий каталог занятых адресов и портов
помогает избегать коллизий (см. Meshwork).
Шифрование потоков¶
Шифрование AES включается общей парольной фразой, которая задаётся на обеих сторонах соединения; фразы должны совпадать. Пустая фраза означает работу без шифрования. Шифрование не изменяет битрейт потока.
Поддержка и допустимая длина фразы различаются по протоколам:
Протокол |
Длина парольной фразы |
Особенности |
|---|---|---|
PS1 |
10–64 байта |
— |
SRT |
10–79 байт |
Дополнительно выбирается длина ключа: 128, 192 или 256 бит. Фраза вне допустимой длины останавливает вход или выход с явным сообщением об ошибке. |
RIST |
не проверяется; используются первые 127 байт |
Только в профиле Main. В профиле Simple парольная фраза не действует. |
Pro-MPEG |
10–64 байта |
Нестандартное расширение: при его включении совместимость со сторонним ПО и оборудованием не гарантируется. |
Длина фразы считается в байтах, а не в символах: кириллическая буква занимает два байта.
Другие входы и выходы¶
Помимо Peer-протоколов доступны стандартные транспорты для приёма и передачи:
Протокол |
Вход |
Выход |
Примечание |
|---|---|---|---|
UDP |
да |
да |
unicast/multicast, SSM, выбор интерфейса; до 7 TS-пакетов на датаграмму |
RTP |
да |
да |
восстановление порядка переставленных пакетов |
TCP |
да |
— |
режим клиента; приём там, где UDP заблокирован |
HLS / HTTP |
да |
да |
на приёме выбирается вариант адаптивного плейлиста по настраиваемому номеру (по умолчанию первый); вход — только для SPTS |
RTSP |
да |
— |
IP-камеры и RTSP-серверы; авто-ремукс в MPEG-TS; только для SPTS |
RTMP / RTMPS |
да |
да |
публикация на сторонние RTMP-приёмники; H.264 и HEVC; только для SPTS |
file / device |
да |
да |
запись в TS-файл и вывод MPEG-TS на устройство (например, ASI); цикличное воспроизведение из файла |
pipe (FIFO) |
да |
да |
мост к внешнему процессу через именованный канал |
std (внешнее приложение) |
да |
да |
мост к нештатным протоколам через консольное приложение |
Публикация и приём RTMP описаны в Публикация и приём RTMP; RTSP, HLS/HTTP-вход, файлы и устройства, именованные каналы и внешние приложения — в Прочие входы и выходы. Детальные настройки каждого транспорта — в разделе Веб-интерфейс. OTT-раздача (HLS, LL-HLS, DASH) описана отдельно в OTT и DVR.
Резервирование источников и раздача¶
Резервирование. Для потока можно задать несколько входов; активен всегда только один. При аварии активного входа поток автоматически переключается на следующий по списку, а при восстановлении может возвращаться к приоритетному источнику. Это позволяет заранее спланировать основной и резервные источники канала; детальные настройки переключения входов описаны в SPTS-потоки.
Раздача. Несколько выходов на один поток раздают один канал многим получателям и по разным протоколам одновременно.
Требования к входному потоку¶
Соответствие ISO/IEC 13818-1, Single Program (SPTS) или Multi Program Transport Stream (MPTS).
Состав дорожек — по выбранному типу контента SPTS-потока, см. SPTS-потоки.
Скремблированные (закодированные) потоки поддерживаются, см. SPTS-потоки.
Для синхронизации в потоке должны быть валидные метки PCR.
Фильтрация, модификация и режимы битрейта входного потока описаны в SPTS-потоки, особенности мультиплекса — в MPTS-потоки.