Skip to content

Отправка MPTS

Flussonic умеет формировать MPTS-потоки (также называемые мультиплексорами), которые можно подавать на модулятор и отправлять в кабельную сеть, эфир или спутник. Подробнее о том, что такое мультиплексоры и зачем они нужны, читайте на странице Мультиплексор.

Note

Flussonic также может принимать MPTS и разделять его на отдельные STPS.

Формирование выходного MPTS

Для настройки отправки MPTS используется директива transponder:

stream channel1 {
  input udp://239.0.0.1:1234;
}
stream channel2 {
  input udp://239.0.0.2:1234;
}
transponder tp1 {
  bitrate 6400k;
  ts_stream_id 2;
  provider Flussonic;
  push udp://239.172.0.1:1234 multicast_loop;
  push file://dumpts.ts;
  program 1010 {
    source channel1;
    title Channel1;
    pid 1010 pmt;
    pid 1011 v1 pcr;
    pid 1012 a1 bitrate=150;
    pid 1013 l1;
  }
  program 1020 {
    source channel2;
    title Channel2;
    pid 1020 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=128;
    pid 1023 l1;
  }
}

Результат работы такого кода хорошо виден в анализаторе:

CBR MPTS

CBR MPTS

CBR MPTS

Этот поток можно смело подать на модулятор и отправить в кабельную сеть, эфир или спутник.

Выбор выходных треков

Входной поток может содержать много дорожек с субтитрами, аудио, видео и т.д. Вероятно, что не все они нужны в выходном MPTS потоке. Вы можете указать, какую дорожку включить в выходной MPTS, назначив ей PID вот так:

transponder tp1 {
  bitrate 6400k;
  push udp://239.172.0.1:1234 multicast_loop;
  program 1020 {
    source channel1;
    title Channel1;
    pid 1020 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1;
    pid 1023 l1;
  }
}

Note

В MPTS можно использовать видео дорожки (v1, v2, ...), аудио дорожки (a1, a2, ...) и дорожки телетекста (l1, l2, ...). Дорожки с текстовыми WebVTT субтитрами не будут работать в результирующем MPTS.

Только дорожки с назначенным PID будут уходить на мультиплексор или отправляться в UDP, остальные — не будут. Если дорожки не были указаны, все они будут отправлены в MPTS с автоматически назначенными PID. Но если была указана хотя бы одна дорожка, то другие дорожки не будут включены в вывод.

Это избавляет вас от необходимости создавать вспомогательный поток для приема только тех дорожек, которые вам нужны, а затем отправлять его в MPTS.

Настройки битрейта отдельных дорожек

Битрейты дорожек можно указать в настройках мультиплексора следующим образом:

transponder tp1 {
  bitrate 6400k;
  push udp://239.172.0.1:1234 multicast_loop;
  program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=150;
  }
}

Такое указание битрейтов позволит вам настроить битрейт для лучшего использования полосы пропускания, меняя битрейты прямо во время трансляции MPTS.

Буфер для неравномерных источников

Если источник, из которого вы формируете MPTS, отправляет данные с большими перерывами между пакетами, например из-за сетевого джиттера, отправка MPTS может прерваться. Чтобы избежать проблем в работе пушера с неравномерным источником, увеличьте параметр prebuffer — это значение в миллисекундах, задающее максимальное время ожидания следующего пакета из источника; по умолчанию 300 мс. Обратите внимание, что увеличение этого параметра может привести к увеличению задержки на выходе.

transponder tp1 {
  bitrate 7000k;
  prebuffer 800;
  push udp://239.172.0.1:1234 multicast_loop;
  program 1 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=150;
  }
}

Расширенные настройки MPTS

Опции SI таблиц

Flussonic 20.09 позволяет сформировать более сложные NIT таблицы, содержащие LCN (logical channel number), T2 delivery system descriptor и другие опции. Некоторые из опций передаются также в SDT.

Flussonic реализует вариант настроек в соответствии со спецификацией NorDig Unified Requirements for Integrated Receiver Decoders version 3.1.1, выпущенной NorDig.

В настройки мультиплексора вы можете добавить следующие опции:

  • network 13582 original=8833 name="Example network"; — сеть доставки. Используется один и тот же original (original network) для NIT и SDT.
  • ts_descriptor 0x04 04012283; — тэг и HEX данные любого дескриптора. Это параметр, позволяющий вписать, например, любой ts_descriptor для NIT ts_loop. В примере указаны тег и HEX дескриптора "T2 delivery system descriptor". Добавляется в NIT и SDT.
  • ts_stream_id 2; — Добавляется в NIT и SDT.
  • service_type — используется как program P { service_type 0x16;} Если у программы указан source, но не указан service_type, то Flussonic пытается угадать service_type по пришедшему media_info.
  • timeout service_type 10; — если за 10 секунд источник не ожил, то вещаем без этой программы в NIT. По умолчанию timeout составляет 15 секунд.
  • program 19 { lcn 7;} — logical channel number.

Версии PSI-таблиц

В PSI-таблицах есть поле version_number. При внесении изменения в таблицу текущее значение version_number в ней должно получить инкремент. Это даст сигнал принимающим устройствам (телевизорам) о том, что необходимо перечитать TS содержимое. Flussonic поддерживает указание номера версии в настройке мультиплексора. Таким образом, устройства смогут применить изменения в потоке или подготовиться к ним.

  • version psi VERSION_NUMBER — глобальная версия для всех PSI таблиц.
  • version sdt VERSION_NUMBER — версия конкретной SI таблицы, например, SDT.

TOT (time offset table)

Flussonic генерирует PSI таблицу TOT (time offset table). Настройки TOT имеет смысл указывать только в основном мультиплексоре, а не в other.

Добавьте следующие опции в конфигурацию основного потока:

time_offset FRA:1 time_of_change=2018-03-23T03:00:00Z local_time_offset=+0100 next_time_offset=+0100;

Значения опций приводятся в спецификации

Пример

Полный пример конфигурации мультиплексора с расширенными настройками:

transponder ts_tp {
  push udp://239.1.2.4:1234 multicast_loop;
  push file://tmp/ts-tp.ts pkt_limit=300000;
  bitrate 27000k;
  provider Flussonic;
  network 123123 original=12345 name="Example network 1";
  ts_stream_id 2;
  ts_descriptor 0x7f 040012340325;
  version psi 4;
  version sdt 9;
  time_offset RUS:7 time_of_change=2018-03-23T03:00:00Z local_time_offset=+0600 next_time_offset=+0600;
  timeout service_type 10;
  program 1020 {
    source clock;
    title Channel1;
    lcn 2;
    pid 1120 pmt;
    pid 1121 v1 pcr bitrate=500;
    pid 1122 a1 bitrate=150;
  }
  program 1030 {
    title Channel2;
    lcn 3;
    service_type digital_tv_mpeg2_hd;
  }
  program 1040 {
    title Channel4;
    lcn 4;
  }
  other @02;
}
transponder 02 {
  bitrate 0;
  network 123123 original=12345 name="Another network";
  ts_stream_id 1;
  ts_descriptor 0x7f 040033123325;
  program 1010 {
    lcn 1;
    service_type digital_tv_mpeg2_hd;
  }
  program 1070 {
    lcn 7;
    service_type 0x20;
  }
}

Добавление в мультиплексор ссылок на другие мультиплексоры

Для услуги TV необходимо, чтобы были известны все каналы, включенные в услугу, для отображения их на клиентских устройствах. Для этого каждый передаваемый мультиплексор (MPTS поток), а он содержит только часть каналов, должен располагать информацией обо всех остальных передаваемых со спутника каналах на других частотах.

Например, на одной частоте (MPTS потоке, или в мультиплексоре) передается 10 каналов, а всего 40 частот, следовательно, есть 400 каналов, и о них необходимо передать информацию в каждом MPTS потоке. Для этого в настройки каждого потока следует добавить ссылки на другие потоки, составляющие вашу услугу.

Чтобы добавить одну такую ссылку, в опции other укажите имя другого MPTS потока.

transponder ts_tp {
  push udp://239.1.2.4:1234 multicast_loop;
  push file://tmp/ts-tp.ts pkt_limit=300000;
  bitrate 27000k;
  provider Flussonic;
  network 13582 original=8833 name="Example network 1";
  program 1020 {
    source clock;
    title Channel1;
    lcn 2;
    pid 1120 pmt;
    pid 1121 v1 pcr bitrate=500;
    pid 1122 a1 bitrate=150;
  }
  other @02;
}
transponder 02 {
  bitrate 0;
  network 13582 original=8839 name="Another network";
  ts_stream_id 1;
  ts_descriptor 0x7f 040022830325;
  program 1010 {
    lcn 1;
    service_type digital_tv_mpeg2_hd;
  }
}

Мультиплексор, указанный в other, отправляется в NIT и SDT.

Резервирование мультиплексора

Вы можете настроить резервирование мультиплексоров таким образом, чтобы при прекращении вещания основного сервера вместо него начинал вещать резервный. Для этого добавьте опцию standby=true в директиве push резервного мультиплексора. Остальные настройки должны быть идентичны.

Порядок отработки резервирования следующий:

  1. Оба сервера формируют абсолютно одинаковый набор программ. Основной сервер (без опции standby) вещает поток в мультикаст группу. Резервный сервер постоянно проверяет, ведется ли вещание в эту мультикаст группу, но сам не вещает, находясь в ожидании.
  2. Если вещание прекращается, то резервный сервер начинает вещать сам.
  3. Как только появится в эфире основной сервер, вещание резервного прекратится.

Пример конфигурации для основного и резервного серверов:

transponder main {
  bitrate 6400k;
  push udp://239.172.0.1:1234 multicast_loop;
  program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=150;
  }
}
transponder backup {
  bitrate 6400k;
  push udp://239.172.0.1:1234 multicast_loop standby=true;
  program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=150;
  }
}

Конфигурирование мультиплексора в UI

Чтобы добавить мультиплексор, перейдите на вкладку Media - Multiplexers и нажмите +. Задайте имя и битрейт мультиплексера, после этого станут доступны настройки. Щелкайте стрелки, чтобы развернуть или свернуть общие и дополнительные параметры (General settings и Advanced settings).

multiplexer options

Затем добавьте программы в мультиплексор:

multiplexer options