Skip to content

Настройка выходного MPEG-TS

Все выходы MPEG-TS одного потока — HTTP-раздача, SRT, пуши по UDP, SRT и RIST — формирует один мультиплексор. Секция mpegts у потока задаёт его служебные таблицы: номер программы, PID дорожек, описание сервиса в SDT. Такая же секция у отдельного выходного канала переопределяет эти значения только для него: разные приёмники получают один и тот же поток под разными номерами программ и PID.

Секция mpegts у потока

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    mpegts:
      pnr: 1030
      pmt_pid: 1000
      service_name: TV One
      provider_name: Example Media
      pids:
        v1: 1011
        a1: 1012

Все параметры необязательны; незаданное поле означает умолчание сервера:

Параметр Что задаёт Умолчание
pnr номер программы: запись в PAT, program_number PMT и service_id SDT 1
pmt_pid PID таблицы PMT подбирается автоматически
pids явные PID дорожек по их именам: v1, a1, … подбираются автоматически
service_name имя сервиса в SDT имя потока
provider_name имя провайдера в SDT пустая строка
ts_stream_id transport_stream_id в PAT и заголовке SDT 1
onid original_network_id в заголовке SDT 1

Правила, которые проверяются при сохранении конфигурации:

  • PID — из диапазона 32–8190; значения ниже зарезервированы за служебными таблицами, выше — за null-пакетами;
  • повторы PID внутри секции запрещены, включая совпадение PID дорожки с pmt_pid;
  • pnr не бывает нулём — нулевой номер программы в PAT зарезервирован за NIT;
  • имена сервиса и провайдера вместе ограничены так, чтобы SDT помещалась в один TS-пакет.

Запись в pids для дорожки, которой в потоке сейчас нет, допустима: она сработает, когда дорожка появится. Если явно заданный PID конфликтует с автоматически назначенным PID другой дорожки, явное значение побеждает, а вытесненная дорожка детерминированно переезжает на свободный PID — с предупреждением в логе.

SDT

Вместе с PAT и PMT в выходной поток входит таблица SDT (PID 0x11): один сервис с типом digital television, service_id равен pnr, имена сервиса и провайдера — из секции mpegts. Строки кодируются по DVB: латиница уходит как есть, остальное — как UTF-8 с объявлением кодировки, поэтому кириллические имена корректно читаются приёмниками.

При изменении настроек версии затронутых таблиц PAT/PMT/SDT увеличиваются, и приёмники штатно подхватывают новые таблицы. Правка секции mpegts применяется на лету: пуши и подключённые клиенты не переподключаются.

Свои настройки у выходного канала

Ту же секцию mpegts принимают отдельные выходные каналы:

  • пуш по UDP, SRT или RIST — у RTMP нет MPEG-TS, поэтому с транспортом rtmp секция не сочетается;
  • srt_play — раздача SRT с выделенного порта потока.
streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    mpegts:
      pnr: 1030
      service_name: TV One
    srt_play:
      port: 4010
      mpegts:
        pnr: 200
    pushes:
      local-multicast:
        udp:
          host: 239.1.1.1
          port: 5500
        mpegts:
          pnr: 300
          pids:
            v1: 211
            a1: 221

Канальная секция накладывается на стримовую поле за полем: заданное у канала значение перекрывает стримовое, незаданное наследуется. Исключение — карта pids: это одно поле, непустая канальная карта замещает стримовую целиком, подорожечного слияния нет.

Переопределение доступно только каналам, которые поток отправляет сам. HTTP-раздача MPEG-TS и общий SRT-порт сервера всегда отдают общий выход потока — со стримовыми настройками.

Как это работает

Второй мультиплексор для канала с собственными настройками не запускается. Канал получает копию общего выхода, в которой переписаны только служебные таблицы и PID пакетов: раскладка пакетов по времени, PCR и continuity counters общего мультиплекса сохраняются, поэтому CBR-свойства выхода действуют и для переопределённых каналов. Каналы с одинаковыми эффективными настройками делят один побайтово идентичный поток — сто одинаковых пушей стоят как один.

Версия таблиц переписанного выхода ведётся по его собственной истории изменений, а не копируется из общего выхода.

Настройка в консоли

Откройте поток, вкладка Исходящий поток. Стримовая секция называется Выходной MPEG-TS; пустые поля показывают умолчания сервера подсказками:

Стримовая секция выходного MPEG-TS

У пуша по UDP, SRT или RIST и у раздачи SRT есть своя секция Переопределение выходного MPEG-TS. Пустые поля наследуют стримовую секцию — унаследованные значения видны плейсхолдерами:

Переопределение у пуша

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

Что дальше