---
title: SPTS-потоки
url: https://doc2.pstreamer.tv/ru/manual/streamer/spts.html
lang: ru
product: Perfect Streamer
version: 2.0.2.362
---

# SPTS-потоки

SPTS (Single Program Transport Stream) — поток MPEG-TS с одной программой; это основная единица обработки Perfect Streamer. Тип потока — SPTS или MPTS — выбирается при создании и не может быть изменён позже. Для SPTS-потока дополнительно выбирается тип контента (значения — как в интерфейсе): Default (audio + video), Audio only (звук без видео, радиоканалы) или Video only.

Скремблированные (закодированные) потоки поддерживаются: скремблирование определяется автоматически, и проверки элементарных потоков на это время приостанавливаются. Настройка «Скремблированный канал» объявляет поток постоянно скремблированным и отключает автоопределение.

Общие требования к входному потоку перечислены в [Требования к входному потоку](../planning/index.md#planning-input-requirements), протоколы приёма и передачи — в разделе [Планирование и протоколы передачи данных](../planning/index.md#planning). Обработка мультиплексов описана в [MPTS-потоки](mpts.md#streamer-mpts). Создание и настройка потоков выполняются в веб-интерфейсе ([Потоки](../webui/streams.md#webui-streams)).

## Конвейер обработки

![Конвейер SPTS-потока: входы, переключатель входов, TS-фильтр, анализатор, выравнивание битрейта, синхронизатор, выходы и подсистема OTT / DVR.](../../_images/pipeline_spts.svg)

*Конвейер SPTS-потока: входы, обработка на уровне потока (переключатель входов, TS-фильтр, анализатор, выравнивание битрейта, синхронизатор), подсистема OTT / DVR и выходы.*

Все входы потока сходятся в переключатель входов, дальше поток проходит последовательные этапы обработки:

1. **Переключатель входов** — выбирает активный источник и переключает поток на резерв при аварии (Резервирование источников).
2. **TS-фильтр** — необязательная фильтрация и модификация MPEG-TS (Фильтрация MPEG-TS, Модификация потока).
3. **Анализатор** — непрерывная проверка валидности и измерение потока ([Анализатор](analyzer.md#streamer-analyzer)); по его вердикту переключатель входов признаёт источник аварийным. Данные анализатора использует также мозаика ([Мозаика](../webui/monitor.md#webui-mosaic), отключается настройкой «Генерировать мозаику»), импорт EPG и декодер субтитров.
4. **Выравнивание битрейта** — необязательное заполнение до постоянного битрейта и исправление интервала PAT/PMT (Управление битрейтом).
5. **Синхронизатор** — выдача пакетов в темпе PCR с компенсацией сетевого джиттера (Синхронизация). Сюда же генератор EIT вставляет таблицы программы передач ([Генератор EIT](epg/eit.md#streamer-epg-eit)).

С выхода синхронизатора поток раздаётся на все выходы: транспортные протоколы ([Peer-протоколы надёжной передачи](../planning/index.md#planning-peer-protocols)), запись в файл, мультиплексор MPTS ([Мультиплексор](mux.md#streamer-mux)), транскодер ([Транскодеры](transcoder.md#streamer-transcoder)), а также в подсистему OTT / DVR ([OTT и DVR](ott_dvr.md#streamer-ott-dvr)). Источником SPTS-потока может служить и отдельная программа мультиплекса — вход-демультиплексор (тип demuxer) выделяет её из MPTS-потока или DVB-приёмника по номеру программы ([Демультиплексор](demux.md#streamer-demux)).

## Резервирование источников

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

Номер, которым вход подписан всюду — в списке потоков, в раскрытой строке, в редакторе потока и в тексте оповещения, — это и есть его место в списке: `#1` основной, дальше резервные по порядку. Хранимое значение приоритета может от этого номера отличаться: сохраняя настройки, узел приоритеты не перенумеровывает, и в файле, правленном вручную, значения бывают нулевыми, разреженными или повторяющимися ([Файл настроек pss.json](../extras/config_file.md#extras-config-file)). Входы с одинаковым значением остаются в том порядке, в каком они записаны, и этот порядок переживает последующие правки.

Аварийность определяет анализатор: вход считается аварийным, если поток не проходит проверку валидности или данные не поступают дольше заданного таймаута. Работа потока на резервном входе фиксируется оповещением ([Оповещения (алертер)](../meshwork/alerts.md#meshwork-alerts)).

Вход, с которого поток ушёл, останавливается, но причину, по которой он был оставлен, сохраняет: интерфейс показывает её приглушённой строкой с возрастом, а не как текущий отказ, и оповещение об ошибке этого входа снимается. Если же вход самоприпарковался и ждёт вмешательства администратора, его оповещение остаётся активным и после переключения. «Остановлен» вместе с «Последний сбой …» под резервным входом исправного потока — нормальное состояние, а не авария. Долго такая строка держится под входом, стоящим в списке ниже активного: к нему поток сам не возвращается. Вход выше активного повторно проверяется с интервалом проверки (см. «Повторно проверять основной вход» ниже), и после очередной проверки строка под ним обновляется или исчезает. Причина в строке — своя, транспортная (`Input data timeout (30 sec)`, отказ авторизации, отклонённое соединение), если вход успел сообщить её сам; вход, признанный аварийным по проверке валидности, сам ничего не сообщает, и в строке будет общая формулировка о сработавшем таймауте и переходе на резерв.

Настройки переключения — на вкладке «Поток» редактора потока ([Настроить поток](../webui/streams.md#webui-stream-editor)):

**«Таймаут потока (с)»**
  Время без валидного входного потока, после которого выполняется переключение на следующий вход. По умолчанию 30 секунд.
**«Интервал проверки (с)»**
  Период повторной проверки источников. По умолчанию 60 секунд.
**«Повторно проверять основной вход»**
  Пока поток работает на резервном входе, входы выше по списку повторно проверяются с интервалом проверки. Как только более приоритетный источник снова валиден, поток возвращается на него. Включено по умолчанию.

## Фильтрация MPEG-TS

По умолчанию поток передаётся как есть. Фильтрация применяется на двух уровнях: правила PID — отдельно на каждом входе, фильтры таблиц — на уровне потока.

Правила PID настраиваются на вкладке «MPEG-TS PID» окна входа ([Редактор входа и выхода](../webui/streams.md#webui-stream-io)):

**«Принимать 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](epg/eit.md#streamer-epg-eit)). Обратная операция — настройка «Извлекать EIT в базу данных EPG», которая экспортирует программу передач из потока в базу EPG узла ([Импорт EPG/XMLTV](epg/xmltv.md#streamer-epg-xmltv)).

Для входов, принимающих исходный транспортный поток, доступно программное дескремблирование BISS: на входе задаётся ключ BISS-1 или BISS-E, и поток расшифровывается до анализа и дальнейшей обработки. Приём скремблированных сервисов с DVB-приёмника (CAM, BISS на уровне адаптера) описан в [DVB-приёмник](dvb.md#streamer-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).
- На вход-транскодер ([Транскодеры](transcoder.md#streamer-transcoder)) и вход тестового генератора ([Тестовые потоки](test_stream.md#streamer-test-stream)) режим не действует: там план PID строит кодер или генератор, поэтому их собственные поля PMT PID остаются доступными.
- Если программа в окно не помещается, перенумерация не выполняется вовсе — раскладка остаётся исходной, а в журнал идёт предупреждение; наполовину перенумерованный поток не выпускается.
- Изменение любой из двух настроек применяется на лету: сам поток не перезапускается, но его входы и выходы переподнимаются — несколько секунд на пересинхронизацию.

В статистике потока блок «Информация о медиа — источник» показывает PID, пришедшие на вход, а «Информация о медиа — результат» и таблица битрейтов по PID — назначенные; при включённом режиме расхождение между ними штатно.

Автоматическая раскладка PID не связана с назначением PID в мультиплексоре MPTS ([Назначение PID](mux.md#streamer-mux-pids)) — это отдельная настройка 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 в пределах нормы даже на длинных видеокадрах. Анализатор в этом случае измеряет именно выдаваемый, выровненный поток ([Анализатор](analyzer.md#streamer-analyzer)).

**Когда нужен CBR.** Любая операция, которая вставляет или удаляет пакеты, — фильтры таблиц и PID, генерация SDT и EIT, исправление интервала PAT/PMT, смена номера программы, а также сам режим VBR — меняет положение контента относительно его меток PCR. Если получатель потока требует соответствия TR 101 290, например при DVB-вещании, включите режим CBR: заполнение маскирует эти изменения пересчётом PCR. Для потока после транскодера включите режим CBR на потоке-приёмнике ([PCR и битрейт выходного потока](transcoder.md#streamer-transcoder-pcr)).

Текущее состояние заполнения — целевой битрейт и скорость вставки NULL-пакетов — отображается в данных активного входа на странице потока ([Потоки](../webui/streams.md#webui-streams), секция «Заполнение»; секция видна, только пока заполнение активно).

## Синхронизация

Синхронизатор выдаёт пакеты на выходы в темпе меток PCR источника — поэтому валидные PCR обязательны для входного потока. Между приёмом и выдачей поток задерживается в джиттер-буфере, который сглаживает неравномерность прихода пакетов из сети.

Буфер настраивается отдельно на каждом входе (окно входа, [Редактор входа и выхода](../webui/streams.md#webui-stream-io); дополнительные настройки, названия — как в интерфейсе):

**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 назад, пойманном во время выдачи: перецепиться через него нельзя, буфер синхронизации отбрасывается, выдача рвётся, а транскодер, читающий этот вход, перезапускается. Оба исхода узел считает раздельно и поднимает по ним разные оповещения ([Каталог кодов алертов](../meshwork/alerts.md#meshwork-alert-codes)).

Медленное расхождение между темпом PCR источника и часами узла устраняет компенсатор дрейфа: корректировка применяется плавно, микросдвигами, без жёсткой пересинхронизации и без прерывания выдачи. Управление — на вкладке «Анализ» редактора потока: «Компенсация дрейфа синхронизации» (включена по умолчанию) и «Мягкое окно дрейфа синхронизации (ms)» — зона нечувствительности, внутри которой корректировка не применяется (по умолчанию 500 мс). Жёсткая пересинхронизация остаётся резервным механизмом на случай настоящих разрывов потока.

Компенсатор подтягивает опоздание только до мягкого окна, а однажды опустевший буфер сам собой не наполняется — поэтому вход, переживший остановку источника, может идти дальше с почти пустой очередью и передавать на выходы каждую следующую заминку. Из такого состояния узел выходит сам: если компенсация работает, а очередь дольше десяти секунд держится ниже четверти заданного буфера, выдача один раз останавливается и возобновляется уже наполненной. Это стоит одного разрыва на выходе длиной примерно в размер буфера и повторяется не чаще раза в минуту. Число таких перестроений сообщает API статистики потока ([Подключение внешних систем мониторинга](../extras/monitoring.md#extras-monitoring)): единичное значение — след разовой просадки источника, растущее означает, что источник не выдерживает заданную задержку.
