Skip to content

Формирование DVB-совместимого потока с постоянным битрейтом (CBR)

Flussonic Media Server позволяет формировать потоки с постоянным битрейтом видео (constant bit rate, CBR), совместимые со стандартом DVB. На самом деле, невозможно кодировать видеопоток с постоянным битрейтом из-за разного размера у разных типов кадров. Однако телевизионный стандарт DVB требует постоянного битрейта, а также каналы передачи имеют свои требования. В Flussonic мы решили ряд проблем по обеспечению совместимости видеопотока с такими требованиями.

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

Полученный в результате поток можно использовать как одну из программ в MPTS или отправить как мультикаст SPTS.

Вы можете сформировать поток с постоянным битрейтом двумя способами:

  1. Указать битрейт непосредственно в параметрах директивы push при отправке мультикаста.
  2. Выполнить тонкую настройку транскодера с использованием дополнительных параметров для гарантированной совместимости с DVB.

Можете использовать эти способы вместе или по отдельности, проверяя на практике оптимальную для ваших условий комбинацию.

Указание битрейта в параметрах push

Рассылку мультикаста с постоянным битрейтом можно сконфигурировать в UI, задав параметры Average bitrate и Bitrate, или в конфигурационном файле с помощью параметров vb и bitrate соответственно:

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

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

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

Настройки транскодера для получения DVB-совместимого потока

Для получения потока с постоянным битрейтом используется опция транскодера rc_method=cbr. Подробнее об этой и других используемых далее опциях см. в справочнике опций транскодера.

Чтобы гарантированно добиться DVB-совместимого потока, может понадобиться использование дополнительных параметров для транскодирования видео дорожки. Ниже приведена типовая конфигурация транскодера для SD MPEG-TS потока.

stream sports {
    input fake://fake;
    transcoder external=true gop=28 hw=cpu seamless=false vb=1100k bframes=3 vcodec=h264 b-pyramid=strict bufsize=950000 maxrate=1150000 x264opts=videoformat=component:no-scenecut:force-cfr:weightb=0 level=3 open_gop=true preset=fast refs=4 size=1280x720:scale deinterlace=true ab=64k acodec=mp2a;
}

Caution

Обратите внимание, что необходимо использовать транскодирование на центральном процессоре hw=cpu. В других случаях описанные ниже дополнительные опции работать не будут.

Подробнее об использованных дополнительных опциях транскодера:

  • b-pyramid=strict — позволяет B-кадрам ссылаться на другие В-кадры, тем самым увеличивая эффективность использования 2 или более B-кадров. Используйте для плавного воспроизведения DVB-потоков, если вы транскодируете их на базе центрального процессора и используете interlace=true. Эта опция устанавливает последовательность полукадров в чересстрочном видео в top_first.

    Возможные значения:

    • none — запрещает использовать В-кадры как референсные.
    • strict — разрешают по 1-му референсному В-кадру на каждый minigop (соблюдает ограничения стандарта Blu-ray).
    • normal — разрешает множественное использование референсных В-кадров на каждый minigop.

    Необходимо значение bframes выше 2.

  • open_gop=true — обеспечивает лучшее качество при меньшем битрейте, т.к. позволяет B-кадрам ссылаться за границы GOP на I и P кадры, т.е. выключает IDR. Нельзя использовать для просмотра через сегментные протоколы HLS, DASH и т.п.

  • bufsize=950000 и maxrate=1150000 позволяют контролировать битрейт видео дорожки. Подберите maxrate в соответствии с указанным значением vb и bufsize по формуле bufsize = maxrate*(множитель от 1 до 2).
  • x264opts=no-scenecut:force-cfr:weightb=0:

    • no-scenecut позволяет энкодеру опционально вставить в поток I-frame, для предотвращения ухудшения качества потока, если происходит резкая смена сцены, которая потребует наличия полноценного опорного кадра.
    • force-cfr включает генерацию собственных таймкодов x264. При использовании этой опции рекомендуется выставить фиксированное значение FPS.
    • weightb=0 отключает взвешенное прогнозирование B-кадров, чтобы избавиться от влияния данного параметра.