Документация Flussonic Media Server

Содержание

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

Во Flussonic Media Server 20.07 кардинально переделана подсистема, рассылающая видео по мультикасту. Мы внесли два очень важных изменения:

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

Было

Во Flussonic уже была возможность отправить UDP multicast поток с константным битрейтом, но это касалось всего транспортного потока, а не конкретных дорожек (PIDs) в нём.

В предыдущих версиях Flussonic конфигурация рассылки мультикаста выглядела так:

stream tvchannel {
  url udp://239.0.0.1:1234;
  push udp://239.1.0.1:1234?cbr=4000&pcr=20;
}

Результирующий график битрейта можно посмотреть на картинках:

CBR MPTS

CBR MPTS

Как видно, суммарный график достаточно стабильный, но отдельные пиды сильно скачут.

Проблемы со старой системой (не считая расстроенных эстетических чувств) следующие:

  • Если из такого потока вырезать один аудиопид, скорее всего он перестанет быть CBR и совершенно точно в нём разломается точность проштамповки PCR.
  • В нём очень большой трафик нуль-пакетов, больше чем реально требуется.
  • При чтении такого потока часть клиентских устройств будет зависать, потому что он не выдерживает заполненность буфера приемника. На следующем графике видно, что буфер декодера, который управляется с помощью DTS и PCR, постоянно опустошается:

CBR MPTS

Стало

В версии Flussonic 20.07 рассылку мультикаста можно сконфигурировать так:

stream tvchannel {
  url udp://239.0.0.1:1234;
  push udp2://239.2.0.1:1234 bitrate=3200 vb=2720;
}

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

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

stream tvchannel {
  url udp://239.0.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 udp2://239.2.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 {
  url udp://239.0.0.1:1234;
}
stream channel2 {
  url udp://239.0.0.2:1234;
}
transponder tp1 {
  bitrate 6400;
  ts_stream_id 2;
  provider Flussonic;
  push udp://239.1.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.