Skip to content

Рассылка UDP с постоянным битрейтом (CBR)

Flussonic Media Server предоставляют функцию рассылки видео по мультикасту с постоянным битрейтом видео.

Поддерживаются расширенные настройки MPTS:

Как настроить отправку UDP multicast

Рассылку мультикаста можно сконфигурировать так:

stream tvchannel {
  input udp://239.171.0.1:1234;
  push udp://239.172.0.1:1234 bitrate=3200 vb=2720;
}

Либо без указания bitrate и vb:

stream tvchannel {
  input udp://239.171.0.1:1234;
  push udp://239.172.0.1:1234;
}

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

Параметр vb (video bitrate) — это среднее за секунду значение битрейта видеопотока, которое получится отправить, включая все заголовки и инкапсуляцию в транспортный поток. Так, например, значение vb=2720 соответствует примерно битрейту 2600, заданному в настройках транскодера.

Перед отправкой потока на клиентские устройства (ТВ) входной поток транскодируется и затем отправляется в UDP с постоянным битрейтом.

Пример эталонно сконфигурированного транскодера:

stream tvchannel {
  input udp://239.171.0.1:1234;
  transcoder vb=2600k bf=3 open_gop=true rc_method=cbr vui_video_params=0:0:5:5:5 fps=25 g=28 interlace=tff_separated level=3 refs=4 sar=16:11 size=1048x576:scale external=false hw=qsv ab=192k acodec=mp2a;
  push udp://239.172.0.1:1234 bitrate=3200 vb=2720;
}

Опции транскодирования описаны в справочнике по настройкам транскодера.

Результаты

Поток с полученным постоянным битрейтом выглядит следующим образом на графиках анализатора:

CBR MPTS

CBR MPTS

Самое главное, что график буфера выглядит уже эталонным:

CBR MPTS

Что же такое этот буфер? Речь идет о CPB, coded picture buffer, т.е. это буфер кадров. Он пополняется, когда они приходят из транспортного потока и удаляется, когда наступает PCR >= DTS. Т.е. у каждого кадра есть DTS и этот кадр будет лежать в буфере, пока не наступит время отдать его в декодер. Время наступает, когда приходит соответствующий PCR.

Также обратим внимание на хорошее качество перемешивания потока:

CBR MPTS

Чем равномернее перемешан поток, тем стабильнее будет PCR и общий битрейт при удалении одного из пидов из потока.

Это не все. Наше большое достижение — формирование выходного MPTS потока (мультипрограммного транспортного потока).

Формирование выходного 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 t1;
  }
  program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=128;
    pid 1023 t1;
  }
}

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

CBR MPTS

CBR MPTS

CBR MPTS

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

Впереди нас ждет упаковка EPG (EIT), HbbTV и прочих современных необходимых в MPEG-TS вещей.

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

Дорожки в настройках транспондера указываются так:

program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1;
    pid 1023 t1;
  }

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

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

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

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

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

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

program 1020 {
    source channel2;
    title Channel2;
    pid 1010 pmt;
    pid 1021 v1 pcr;
    pid 1022 a1 bitrate=150;
  }

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

Расширенные настройки MPTS (Flussonic 20.09)

Опции 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.

Конфигурирование транспондера в UI

Список созданных транспондеров отображается на главной странице.

Чтобы добавить транспондер, нажмите Add рядом с заголовком раздела Transponders на главной странице. Щелкайте стрелки, чтобы развернуть или свернуть дополнительные параметры (Advanced options).

transponder options

Затем добавьте программы на транспондер:

transponder options

Добавьте ссылки на другие транспондеры, выбрав один из уже добавленных транспондеров:

transponder options