SPTS-потоки¶
SPTS (Single Program Transport Stream) — поток MPEG-TS с одной программой; это основная единица обработки Perfect Streamer. Тип потока — SPTS или MPTS — выбирается при создании и не может быть изменён позже. Для SPTS-потока дополнительно выбирается тип контента (значения — как в интерфейсе): Default (audio + video), Audio only (звук без видео, радиоканалы) или Video only.
Скремблированные (закодированные) потоки поддерживаются: скремблирование определяется автоматически, и проверки элементарных потоков на это время приостанавливаются. Настройка «Скремблированный канал» объявляет поток постоянно скремблированным и отключает автоопределение.
Общие требования к входному потоку перечислены в Требования к входному потоку, протоколы приёма и передачи — в разделе Планирование и протоколы передачи данных. Обработка мультиплексов описана в MPTS-потоки. Создание и настройка потоков выполняются в веб-интерфейсе (Потоки).
Конвейер обработки¶
Конвейер SPTS-потока: входы, обработка на уровне потока (переключатель входов, TS-фильтр, анализатор, выравнивание битрейта, синхронизатор), подсистема OTT / DVR и выходы.¶
Все входы потока сходятся в переключатель входов, дальше поток проходит последовательные этапы обработки:
Переключатель входов — выбирает активный источник и переключает поток на резерв при аварии (Резервирование источников).
TS-фильтр — необязательная фильтрация и модификация MPEG-TS (Фильтрация MPEG-TS, Модификация потока).
Анализатор — непрерывная проверка валидности и измерение потока (Анализатор); по его вердикту переключатель входов признаёт источник аварийным. Данные анализатора использует также мозаика (Мозаика, отключается настройкой «Генерировать мозаику»), импорт EPG и декодер субтитров.
Выравнивание битрейта — необязательное заполнение до постоянного битрейта и исправление интервала PAT/PMT (Управление битрейтом).
Синхронизатор — выдача пакетов в темпе PCR с компенсацией сетевого джиттера (Синхронизация). Сюда же генератор EIT вставляет таблицы программы передач (Генератор EIT).
С выхода синхронизатора поток раздаётся на все выходы: транспортные протоколы (Peer-протоколы надёжной передачи), запись в файл, мультиплексор MPTS (Мультиплексор), транскодер (Транскодеры), а также в подсистему OTT / DVR (OTT и DVR). Источником SPTS-потока может служить и отдельная программа мультиплекса — вход-демультиплексор (тип demuxer) выделяет её из MPTS-потока или DVB-приёмника по номеру программы (Демультиплексор).
Резервирование источников¶
У потока может быть несколько входов, но активен всегда только один. Порядок входов в списке задаёт приоритет: первый — основной, остальные — резервные. Если активный вход признан аварийным, поток переключается на следующий по списку; после последнего входа перебор продолжается с первого. Вход, поставленный на паузу, при переключении не учитывается.
Номер, которым вход подписан всюду — в списке потоков, в раскрытой строке,
в редакторе потока и в тексте оповещения, — это и есть его место в списке:
#1 основной, дальше резервные по порядку. Хранимое значение приоритета
может от этого номера отличаться: сохраняя настройки, узел приоритеты не
перенумеровывает, и в файле, правленном вручную, значения бывают нулевыми,
разреженными или повторяющимися (Файл настроек pss.json). Входы с
одинаковым значением остаются в том порядке, в каком они записаны, и этот
порядок переживает последующие правки.
Аварийность определяет анализатор: вход считается аварийным, если поток не проходит проверку валидности или данные не поступают дольше заданного таймаута. Работа потока на резервном входе фиксируется оповещением (Оповещения (алертер)).
Вход, с которого поток ушёл, останавливается, но причину, по которой он
был оставлен, сохраняет: интерфейс показывает её приглушённой строкой с
возрастом, а не как текущий отказ, и оповещение об ошибке этого входа
снимается. Если же вход самоприпарковался и ждёт вмешательства
администратора, его оповещение остаётся активным и после переключения.
«Остановлен» вместе с «Последний сбой …» под резервным входом исправного
потока — нормальное состояние, а не авария. Долго такая строка держится
под входом, стоящим в списке ниже активного: к нему поток сам не
возвращается. Вход выше активного повторно проверяется с интервалом
проверки (см. «Повторно проверять основной вход» ниже), и после очередной
проверки строка под ним обновляется или исчезает. Причина в строке — своя,
транспортная (Input data timeout (30 sec), отказ авторизации,
отклонённое соединение), если вход успел сообщить её сам; вход, признанный
аварийным по проверке валидности, сам ничего не сообщает, и в строке будет
общая формулировка о сработавшем таймауте и переходе на резерв.
Настройки переключения — на вкладке «Поток» редактора потока (Настроить поток):
- «Таймаут потока (с)»
Время без валидного входного потока, после которого выполняется переключение на следующий вход. По умолчанию 30 секунд.
- «Интервал проверки (с)»
Период повторной проверки источников. По умолчанию 60 секунд.
- «Повторно проверять основной вход»
Пока поток работает на резервном входе, входы выше по списку повторно проверяются с интервалом проверки. Как только более приоритетный источник снова валиден, поток возвращается на него. Включено по умолчанию.
Фильтрация MPEG-TS¶
По умолчанию поток передаётся как есть. Фильтрация применяется на двух уровнях: правила PID — отдельно на каждом входе, фильтры таблиц — на уровне потока.
Правила PID настраиваются на вкладке «MPEG-TS PID» окна входа (Редактор входа и выхода):
- «Принимать PID (белый список)»
Список разрешённых PID. Если список пуст, разрешено всё, кроме запрещённого чёрным списком.
- «Отклонять PID (чёрный список)»
Список запрещённых PID. PID, указанный одновременно в обоих списках, отклоняется.
Таблица PMT после фильтрации регенерируется по фактическому составу элементарных потоков. Правила PID применяются до автоматической раскладки PID (Автоматическая раскладка PID), если она включена.
Фильтры уровня потока — на вкладке «MPEG-TS» редактора потока, секция «Фильтры» (по умолчанию все выключены):
- «Очищать ненужные таблицы»
Удаляет служебные данные, не относящиеся к программе, и элементарные потоки неизвестных типов; потоки известных типов (видео, звук, телетекст, субтитры) и таблицы PAT/PMT сохраняются. Отдельные таблицы (SDT, EIT, NIT, TDT, CAT) управляются собственными фильтрами.
- «Удалять CAT / ECM / EMM»
Удаляет таблицы и сообщения систем условного доступа (CAS), включая CA-дескрипторы из PMT — например, чтобы очистить остатки CAS после дескремблирования.
- «Удалять EIT»
Удаляет таблицы программы передач источника. По умолчанию EIT проходит насквозь.
- «Удалять NIT», «Удалять TDT»
Удаляют таблицы сети и меток времени источника.
- «Удалять телетекст», «Удалять субтитры»
Удаляют потоки телетекста и DVB-субтитров вместе с их записями в PMT.
- «Удалять исходную SDT» (секция «SDT»)
Удаляет таблицу описания сервиса источника — например, при передаче потока на дальнейшее мультиплексирование. При назначении собственного имени сервиса (Модификация потока) исходная SDT заменяется автоматически, отдельно включать этот фильтр не нужно.
Примечание
Удаление обязательных таблиц (SDT, NIT, TDT, EIT, CAT) нарушает требования TR 101 290 к их присутствию в потоке — это осознанный выбор оператора, уместный, например, при передаче потока на дальнейшее мультиплексирование. Кроме того, любая фильтрация меняет состав пакетов потока; о влиянии на точность PCR см. Управление битрейтом.
Модификация потока¶
Собственные данные сервиса задаются в секции «SDT» вкладки «MPEG-TS». Генерацию таблицы включает поле «Имя сервиса» (а также активная генерация EIT из EPG): если в источнике нет SDT, таблица генерируется; если есть — заменяется сгенерированной. Поля «Имя провайдера» и «Язык» заполняют соответствующие поля генерируемой таблицы. Настройка «ID сети» задаёт идентификатор сети для генерируемых таблиц EIT, когда источник не сообщает собственный идентификатор сети; если идентификатор в источнике есть, используется он.
Номер программы переназначается в секции «Номер программы»: включите «Изменить номер программы» и задайте «Новый номер программы». Таблицы PAT и PMT регенерируются с новым номером; SDT и EIT также перегенерируются.
«Фиксировать интервал PAT/PMT» — регенерирует PAT/PMT и вставляет их с интервалом, соответствующим TR 101 290. Применяется к источникам с редкими или нерегулярными таблицами.
«Исправлять ссылку на PCR в PMT» — чинит таблицу, которая не объявляет пригодной ссылки на PCR: либо PCR_PID выставлен в 0x1FFF («PCR нет»), либо указывает на PID, где PCR не передаётся. Узел находит PID, на котором PCR действительно идёт, и объявляет в PMT его. Первая таблица придерживается до двух секунд, пока идёт распознавание, и уходит без изменений, если за это время подходящий PID не нашёлся. Исправляется только объявление: сам PCR остаётся обязательным, и поток, в котором его нет вовсе, всё равно не поднимется. Включение принудительно включает фильтр MPEG-TS — с тем же следствием, что и у автоматической раскладки PID: PID, не объявленные в PMT и CAT, перестают транслироваться. На входах транскодера и тестового потока настройка не действует, они параметры MPEG-TS не применяют.
Переназначение PID и языков выполняется на входе, вкладка «MPEG-TS PID» окна входа:
- «Переназначить PID»
Пары «Из PID» / «В PID» — замена идентификаторов элементарных потоков, например для приведения потока к плану PID сети. При включённой автоматической раскладке PID (Автоматическая раскладка PID) эти пары не действуют.
- «Переназначить язык аудио»
Пары «Аудио PID» / «Новый язык» — замена языка звуковой дорожки в PMT.
Генерация EIT из внешнего источника EPG включается в секции «Генерировать EIT из EPG» вкладки «Поток»: выбираются «Источник EPG» и «Канал EPG», и в поток вставляются таблицы EIT с программой передач (Генератор EIT). Обратная операция — настройка «Извлекать EIT в базу данных EPG», которая экспортирует программу передач из потока в базу EPG узла (Импорт EPG/XMLTV).
Для входов, принимающих исходный транспортный поток, доступно программное дескремблирование BISS: на входе задаётся ключ BISS-1 или BISS-E, и поток расшифровывается до анализа и дальнейшей обработки. Приём скремблированных сервисов с DVB-приёмника (CAM, BISS на уровне адаптера) описан в DVB-приёмник.
Автоматическая раскладка PID¶
По умолчанию идентификаторы элементарных потоков переходят из источника в выходной поток без изменений, поэтому при переключении на резервный вход раскладка PID на выходе меняется вслед за источником. Автоматическая раскладка назначает PID сама, по одному и тому же правилу для любого входа: план PID выходного потока остаётся неизменным независимо от того, какой источник сейчас активен.
Режим доступен только для SPTS и включается в секции «MPEG-TS» вкладки «MPEG-TS» редактора потока:
- «Автоматическая раскладка PID»
Включает режим.
- «Базовый PID»
Первый PID окна: от 32 до 8127, по умолчанию 32. Нижняя граница выводит окно за пределы диапазона, зарезервированного под таблицы PSI/SI, верхняя оставляет всё окно ниже PID нулевых пакетов.
Программа перенумеровывается в окно из 64 PID, начинающееся с базового:
PID |
Назначение |
|---|---|
базовый |
PMT |
базовый + 1 |
видео |
далее |
звуковые дорожки |
далее |
остальные элементарные потоки: телетекст, DVB-субтитры, данные, SCTE-35 |
далее |
PCR, если он не передаётся в одном из перечисленных потоков |
далее |
ECM: сначала по дескрипторам уровня программы, затем по дескрипторам отдельных потоков |
с конца окна вниз |
EMM |
Внутри каждой группы сохраняется порядок исходной таблицы PMT. Если видео в программе нет, раскладка сжимается: сразу за PMT идёт первая звуковая дорожка. EMM выделяются с конца окна, поскольку таблица CAT разбирается независимо от PMT и может прийти раньше — их адреса не должны зависеть от числа элементарных потоков.
Таблицы PAT, PMT и CAT пересобираются под новую раскладку. SDT, NIT, EIT и TDT не изменяются: ссылок на PID они не содержат.
Что учесть при включении режима:
Режим принудительно включает фильтрацию MPEG-TS, поэтому PID, не объявленные в PMT и CAT, наружу больше не проходят. Поток, который полагался на транзит необъявленных PID, их потеряет.
Ручное переназначение PID на входах не действует и игнорируется, о чём в журнал пишется предупреждение. Веб-интерфейс скрывает эти поля, пока режим включён; сохранённые пары не теряются и возвращаются при его выключении.
Списки приёма и отклонения PID продолжают работать и применяются до перенумерации: слот получают только выжившие элементарные потоки, и пропусков в окне не остаётся (Фильтрация MPEG-TS).
На вход-транскодер (Транскодеры) и вход тестового генератора (Тестовые потоки) режим не действует: там план PID строит кодер или генератор, поэтому их собственные поля PMT PID остаются доступными.
Если программа в окно не помещается, перенумерация не выполняется вовсе — раскладка остаётся исходной, а в журнал идёт предупреждение; наполовину перенумерованный поток не выпускается.
Изменение любой из двух настроек применяется на лету: сам поток не перезапускается, но его входы и выходы переподнимаются — несколько секунд на пересинхронизацию.
В статистике потока блок «Информация о медиа — источник» показывает PID, пришедшие на вход, а «Информация о медиа — результат» и таблица битрейтов по PID — назначенные; при включённом режиме расхождение между ними штатно.
Автоматическая раскладка PID не связана с назначением PID в мультиплексоре MPTS (Назначение PID) — это отдельная настройка muxer-входа.
Управление битрейтом¶
Режим управления битрейтом задаётся полем «Режим битрейта» на вкладке «MPEG-TS» (значения — как в интерфейсе):
- Original (по умолчанию)
Поток передаётся без изменений; метки PCR источника не пересчитываются.
- VBR
Удаляет NULL-пакеты источника, что минимизирует битрейт. Подходит, когда поток используется только для OTT-вещания или транзита. Метки PCR при этом не пересчитываются, поэтому точность PCR по TR 101 290 на выходе не гарантируется.
- CBR (auto stuffing)
Выравнивает битрейт вставкой NULL-пакетов (stuffing) до постоянного значения. Целевой битрейт определяется автоматически: он фиксируется через несколько секунд после включения, повышается при устойчивом превышении и постепенно снижается, если пик контента долго остаётся ниже цели. Смена цели не прерывает выдачу потока.
- CBR (explicit stuffing)
То же, но целевой битрейт задаётся явно полем «Битрейт заполнения (kbps)». Задавайте значение с запасом больше фактического битрейта контента.
В режимах CBR метки PCR пересчитываются по фактически переданным байтам, поэтому выход соответствует требованиям TR 101 290 к точности PCR. Дополнительно при активном заполнении на выходе поддерживается частота повторения PCR в пределах нормы даже на длинных видеокадрах. Анализатор в этом случае измеряет именно выдаваемый, выровненный поток (Анализатор).
Когда нужен CBR. Любая операция, которая вставляет или удаляет пакеты, — фильтры таблиц и PID, генерация SDT и EIT, исправление интервала PAT/PMT, смена номера программы, а также сам режим VBR — меняет положение контента относительно его меток PCR. Если получатель потока требует соответствия TR 101 290, например при DVB-вещании, включите режим CBR: заполнение маскирует эти изменения пересчётом PCR. Для потока после транскодера включите режим CBR на потоке-приёмнике (PCR и битрейт выходного потока).
Текущее состояние заполнения — целевой битрейт и скорость вставки NULL-пакетов — отображается в данных активного входа на странице потока (Потоки, секция «Заполнение»; секция видна, только пока заполнение активно).
Синхронизация¶
Синхронизатор выдаёт пакеты на выходы в темпе меток PCR источника — поэтому валидные PCR обязательны для входного потока. Между приёмом и выдачей поток задерживается в джиттер-буфере, который сглаживает неравномерность прихода пакетов из сети.
Буфер настраивается отдельно на каждом входе (окно входа, Редактор входа и выхода; дополнительные настройки, названия — как в интерфейсе):
- Auto jitter buffer
Автоматический подбор задержки по типу входа: для входов TCP и HLS используется увеличенный буфер, для остальных — стандартный. Включено по умолчанию.
- Jitter buffer (ms)
Размер буфера вручную, когда автоматический режим выключен (по умолчанию 500 мс). Увеличьте значение, если на нестабильной сети буфер регулярно опустошается.
- Auto PCR discontinuity window
Автоматический подбор окна допустимого скачка PCR: 400 мс на входе SPTS-потока и 1000 мс на входе MPTS-потока. Включено по умолчанию; заданное вручную значение при этом принимается и сохраняется, но не действует, о чём узел предупреждает в журнале при открытии входа.
- PCR discontinuity window (ms)
Окно вручную, когда автоматический подбор выключен (по умолчанию 1000 мс).
Скачок PCR внутри окна узел пережидает — и на источнике со сплайсом, рекламной вставкой или петлёй плейаута широкое окно тем самым навсегда добавляет ожидание в очередь синхронизации. Поэтому автоматический подбор берёт для SPTS 400 мс: ровно столько нужно самой редкой допустимой частоте меток PCR (ISO/IEC 13818-1 разрешает между ними 100 мс). Скачок за пределы окна — это разрыв таймлайна источника, и узел проводит его без потерь, когда может: скачок вперёд подхватывается на новой точке отсчёта прямо в выдаче, накопленное доигрывается, а получатель видит одну рассогласованность часов — ту самую, что была у источника. Содержимое теряется на откате PCR назад, пойманном во время выдачи: перецепиться через него нельзя, буфер синхронизации отбрасывается, выдача рвётся, а транскодер, читающий этот вход, перезапускается. Оба исхода узел считает раздельно и поднимает по ним разные оповещения (Каталог кодов алертов).
Медленное расхождение между темпом PCR источника и часами узла устраняет компенсатор дрейфа: корректировка применяется плавно, микросдвигами, без жёсткой пересинхронизации и без прерывания выдачи. Управление — на вкладке «Анализ» редактора потока: «Компенсация дрейфа синхронизации» (включена по умолчанию) и «Мягкое окно дрейфа синхронизации (ms)» — зона нечувствительности, внутри которой корректировка не применяется (по умолчанию 500 мс). Жёсткая пересинхронизация остаётся резервным механизмом на случай настоящих разрывов потока.
Компенсатор подтягивает опоздание только до мягкого окна, а однажды опустевший буфер сам собой не наполняется — поэтому вход, переживший остановку источника, может идти дальше с почти пустой очередью и передавать на выходы каждую следующую заминку. Из такого состояния узел выходит сам: если компенсация работает, а очередь дольше десяти секунд держится ниже четверти заданного буфера, выдача один раз останавливается и возобновляется уже наполненной. Это стоит одного разрыва на выходе длиной примерно в размер буфера и повторяется не чаще раза в минуту. Число таких перестроений сообщает API статистики потока (Подключение внешних систем мониторинга): единичное значение — след разовой просадки источника, растущее означает, что источник не выдерживает заданную задержку.