Динамическое изменение битрейта — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
 
Строка 16: Строка 16:
 
=Пример команд=
 
=Пример команд=
  
Создаём цепочку без конкретного получателя. номер цепочки присваивается автоматически, начиная с 1
+
Создаём цепочку без конкретного получателя. номер цепочки присваивается автоматически, начиная с 1. Цепочка может быть любой, для примера привожу свою тестовую.
 
  gst-client create "v4l2src always-copy=false chain-ipipe=true ! capsfilter caps=video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720,framerate=(fraction)30 ! dmaiaccel ! dmaienc_h264 copyOutput=false ddrbuf=false encodingpreset=2 ratecontrol=1 intraframeinterval=30 idrinterval=60 t8x8intra=true t8x8inter=true airrate=30 targetbitrate=1000000 bytestream=false headers=true ! rtph264pay mtu=1500 pt=96 ! multiudpsink clients=\"\" sync=false enable-last-buffer=false"
 
  gst-client create "v4l2src always-copy=false chain-ipipe=true ! capsfilter caps=video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720,framerate=(fraction)30 ! dmaiaccel ! dmaienc_h264 copyOutput=false ddrbuf=false encodingpreset=2 ratecontrol=1 intraframeinterval=30 idrinterval=60 t8x8intra=true t8x8inter=true airrate=30 targetbitrate=1000000 bytestream=false headers=true ! rtph264pay mtu=1500 pt=96 ! multiudpsink clients=\"\" sync=false enable-last-buffer=false"
  

Текущая версия на 14:16, 16 ноября 2014

Для раздела Управление цепочками GStreamer приведу самый актуальный для трансляции пример - динамическое (т.е. "на лету") изменение битрейта видеопотока.


Содержание

Что должно быть запущено в системе

DBus (скрипт S30dbus в автозапуске)

gstd (скрипт S31gstd в автозапуске)


Общий принцип

Принцип такой: при старте Виртурилки создаются нужные цепочки для видео (их можно создавать неограниченное количество), для примера будем рассматривать только одну цепочку. При создании цепочки находятся "на паузе", трансляция не идёт. После создания цепочки, при появлении надобности, указываем клиента, на который будем слать видеопоток и стартуем цепочку - трансляция пошла.


Пример команд

Создаём цепочку без конкретного получателя. номер цепочки присваивается автоматически, начиная с 1. Цепочка может быть любой, для примера привожу свою тестовую.

gst-client create "v4l2src always-copy=false chain-ipipe=true ! capsfilter caps=video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720,framerate=(fraction)30 ! dmaiaccel ! dmaienc_h264 copyOutput=false ddrbuf=false encodingpreset=2 ratecontrol=1 intraframeinterval=30 idrinterval=60 t8x8intra=true t8x8inter=true airrate=30 targetbitrate=1000000 bytestream=false headers=true ! rtph264pay mtu=1500 pt=96 ! multiudpsink clients=\"\" sync=false enable-last-buffer=false"


Задаём получателя для цепочки №1 (им будет хост 192.168.1.10, порт 3000)

gst-client -p 1 set multiudpsink0 clients string 192.168.1.10:3000

Запускаем эту цепочку

gst-client -p 1 play


Теперь, при каком-то событии, нам понадобилось изменить битрейт на очень маленький. Меняем на 100 кбит/сек

gst-client -p 1 set dmaienc_h2640 targetbitrate integer 100000


Теперь меняем на высокий битрейт

gst-client -p 1 set dmaienc_h2640 targetbitrate integer 3000000


Всё просто :-)


Нюансы

Битрейт (параметр targetbitrate элемента dmaienc_h264) можно менять на значение, не большее чем параметр maxbitrate (элемента dmaienc_h264). Но, т.к. по умолчанию maxbitrate равен 50 мегабит, про это можно особо не париться.

Иногда, при каком-то сочетании параметров цепочки, изменение "на лету" не срабатывает, тогда необходимо перед изменением битрейта поставить цепочку на паузу (gst-client -p 1 pause), изменить битрейт а потом возобновить цепочку (gst-client -p 1 play).