Формирование DVB-совместимого потока с постоянным битрейтом (CBR)
Flussonic Media Server позволяет формировать потоки с постоянным битрейтом видео (constant bit rate, CBR), совместимые со стандартом DVB. На самом деле, невозможно кодировать видеопоток с постоянным битрейтом из-за разного размера у разных типов кадров. Однако телевизионный стандарт DVB требует постоянного битрейта, а также каналы передачи имеют свои требования. В Flussonic мы решили ряд проблем по обеспечению совместимости видеопотока с такими требованиями.
Энкодер Flussonic использует комбинацию методов, чтобы все кадры соответствовали разрешенному размеру, а если кадры занимают меньше байтов, чем требуется, заполняет их данными до требуемого размера. Таким образом, Flussonic анализирует поток до каждого отдельного кадра и создает видео, полностью совместимое с DVB.
Полученный в результате поток можно использовать как одну из программ в MPTS или отправить как мультикаст SPTS.
Вы можете сформировать поток с постоянным битрейтом двумя способами:
- Указать битрейт непосредственно в параметрах директивы
push
при отправке мультикаста. - Выполнить тонкую настройку транскодера с использованием дополнительных параметров для гарантированной совместимости с 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-кадров, чтобы избавиться от влияния данного параметра.