StreamBuilder. Установка и настройка

Для установки нужно добавить репозитарий StreamBuilder в ваш менеджер пакетов:

Ubuntu 14.04

sudo add-apt-repository 'deb http://repo.streambuilder.pro/open/ubuntu/14.04 /'

Ubuntu 12.04

sudo sh -c "echo 'deb http://repo.streambuilder.pro/open/ubuntu/12.04 /' > /etc/apt/sources.list.d/streambuilder.list"

Ubuntu 10.04

sudo sh -c "echo 'deb http://repo.streambuilder.pro/open/ubuntu/10.04 /' > /etc/apt/sources.list.d/streambuilder.list"

Debian 6.0

sudo sh -c "echo 'deb http://repo.streambuilder.pro/open/debian/6.0 /' > /etc/apt/sources.list.d/streambuilder.list"

Затем скачать pgp-ключ и установить пакет streambuilder:

wget -q -O - http://repo.streambuilder.pro/open/binary/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install -f --yes --force-yes streambuilder

Конфигурация

Для размещения файлов конфигурации используется директория /etc/streambuilder. Все
конфигурационные файлы размещаются в этой директории и имеют расширение .conf, например:

/etc/streambuilder/<название канала>.conf

Примеры типовых конфигураций можно найти в директории /etc/streambuilder/example/.

Лог-файлы по-умолчанию находится в директории /var/log/streambuilder.

  • <название канала>.log – основной лог
  • rtmpsplit.log – лог rtmp сервера (только для input type “in_rtmp_server”)

Если в начальном файле конфигурации указать другое название файла логов, то для логирования будет
использовани именно этот файл.

Сразу после установки StreamBuilder в директории /etc/streambuilder есть пример
конфигурации, который настроен на прием udp потока на порту 5686, транскодирование видео в 2
качества и выдачу через rtmp server на порту 5786. Этот пример можно использовать для создания
своих конфигурации (раскомментировав нужные секции, закомментировав ненужные), например:

$ cp /etc/streambuilder/streambuilder.conf.example /etc/streambuilder/test.conf
$ vim /etc/streambuilder/test.conf

Проверить работоспособность StreamBuilder сразу после установки можно с помощью ffmpeg
(команды приведены для ffmpeg версии 2.0.3):

  • Подать на вход udp сигнал:

    ffmpeg -re -i test.mp4 -acodec libfaac -vcodec libx264 -bsf:v h264_mp4toannexb -ar 44100 -ab 128000 -ac 2 -f mpegts -r 25 udp://127.0.0.1:5686

  • Посмотреть rtmp, 1-е качество:

    ffplay “rtmp://127.0.0.1:5786/stream_2/stream”

  • Посмотреть rtmp, 2-е качество:

    ffplay “rtmp://127.0.0.1:5786/stream_4/stream”

Управление сервисами каналов

Кодирование каждого канала выполняется как отдельный daemon. По-умолчанию все доступны каналы запускаются при старте сервера. Управлять каналами можно командой:

sudo service streambuilder <действие> <название канала>

Доступны следующие действия:

  • start
  • stop
  • restart
  • delete – удалить канал
  • status – вывести текущий статус
  • check – проверить конфиг

Во всех вышеперечисленных командах присутствует необязательный параметр <название канала>. Если
этот параметр указан, то действие выполняется именно для этого канала, иначе для всех каналов, для
которых уже созданы сервисы.

Описание файла конфигурации

Формат файла

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

Комментарии начинаются с символа точка с запятой “;” и могут стоять в любом месте конфигурационного
файла, но не между параметром и значением.

Основные блоки

1. Источник сигнала (блок input)

На вход StreamBuilder может принимать UDP, RTMP в режиме сервера и RTMP в режиме клиента.

udp

В этом режиме StreamBuilder принимает UDP пакеты на заданном порту с видео в формате mpegts.

input {
    type udp                         ; режим UDP
    address "127.0.0.1:5686"         ; адрес и порт
}

in_rtmp_server

В этом режиме запускается RTMP сервер, принимающий входящие соединения.

input {
    type in_rtmp_server             ; режим RTMP server
    address "0.0.0.0:1935"          ; адрес и порт сервера
    rtmp_app app                    ; имя RTMP application
    rtmp_stream stream              ; имя RTMP stream
}

Входящие соединения с некорректными rtmp_app/rtmp_stream отбрасываются.

in_rtmp_client

В этом режиме StreamBuilder подключается к указанному серверу для получения RTMP потока.

input {
    type in_rtmp_client             ; режим RTMP client
    address "192.168.1.1:22052"     ; адрес и порт сервера
    rtmp_app app                    ; имя RTMP application
    rtmp_stream stream              ; имя RTMP stream
}

2. Кодирование (блок streams)

StreamBuilder может преобразовывать входной поток в произвольное количество выходных.

streams {
    stream_1 "hd_hdp"
    stream_2 "hdp"
    stream_3 "hd"
    stream_4 "sd"
}

Каждый выходной поток задается парой <имя потока> “<профиль кодирования>”.
Имя потока (stream_1, …) можно выбирать произвольным образом.
Эти имена определят директори, в которые будут записываться файлы .ts для формата HLS, а
также имя RTMP application для входящих соединений для режима output “out_rtmp_server”.

Профиль кодирования может быть одним из предопределенных (в комментариях указаны примерные битрейты):

HD:

hd_hdp  ; ~3328 Kb
hd_i2   ; ~1598 Kb
hd_i1   ; ~798  kb

SD:

hdp     ; ~1300 Kb
hd      ; ~804  Kb
sd      ; ~400  Kb
sld     ; ~256  Kb

Для профилей HD будет сгенерировано изображение с размерами 1280×720, для остальных профилей размеры
изображения будут 640×360. Разрешения видео могут быть переопределены в блоке video.

В блоке video можно указать тип кодирования сигнала – аппаратный или программный. При указании
аппаратного кодирования, если технология Intel QuickSync не поддерживается, то будет выведено
соответствующее предупреждение при запуске сервиса.

Для использования StreamBuilder без транскодирования эту секцию можно оставить пустой или не
указывать совсем. В этом случае входящий поток протокола udp (при его использовании) должен
соответствовать определенным требованиям (формат mpegts, аудио sampling rate 44100 герц), например:

> ffmpeg -re -i test.mp4 -acodec libfaac -vcodec libx264 -bsf:v h264_mp4toannexb -ar 44100 -ab 96000 -ac 2 -f mpegts -r 25 udp://127.0.0.1:5686

3. Выходной поток (блок output)

Выходной поток может быть четыерх типов: hls, out_rtmp_server, out_rtmp_client, udp.

hls

StreamBuilder сохраняет HLS файлы в указанную директорию и работает как HTTP-сервер.

output {
    type "hls"                       ; тип выходного потока
    basedir "/mnt/mediaroot/default" ; директория записи файлов
    hls_server 0.0.0.0:8084          ; [необязательно] адрес http-сервера отдачи HLS
}

В корне директории basedir создается файл manifest.m3u8, со сылками на m3u8 потоков.

Playlist URL: http://:/channel/<имя канала>.m3u8

out_rtmp_server

В этом режиме запускается RTMP сервер принимающий входящие соединения.

output {
    type out_rtmp_server              ; тип выходного потока
    streams "stream_2,stream_4"       ; потоки подаваемые на выход через rtmp сервер, application часть для входящих rtmp
    address "0.0.0.0:5786"            ; адрес rtmp-сервера
    rtmp_stream stream                ; rtmp stream
    max_clients 100                   ; лимит зрителей, по-умолчанию 100
}

out_rtmp_client

В этом режиме запускается RTMP сервер принимающий входящие соединения.

output {
    type out_rtmp_client            ; тип выходного потока
    streams stream_2                ; поток (один) отправляемый на удаленный RTMP сервер
    address "192.168.1.1:22052"     ; адрес и порт сервера
    rtmp_app app                    ; имя RTMP app
    rtmp_stream stream              ; имя RTMP stream
}

udp

output {
    type udp                       ; тип выходного потока
    address "192.168.1.1:22053"    ; адрес и порт
}

4. Логирование (блок log)

log {
    default 2                        ; уровень логирования по умолчанию
    listen unix:/var/run/streambuilder/<название канала>.s   ; сокет управления логированием
    filename "/var/log/streambuilder/<название канала>.log"  ; местоположение файла логов
}
  • default – уровень логирования, от 0 (минимальный) до 5 (максимальный)
  • listen – сокет управления логированием
  • filename – расположение файла лога

Если эта секция не прописана в конфигурационном файле, то в полной конфигурации используются значения
по умолчанию:

logger {
    level {
        default 2
    }
    listen unix:/var/run/streambuilder/<название канала>.s
    filename /var/log/streambuilder/<название канала>.log
}

Пример конфигурации

input {
    type udp                         ; тип входящего потока
    address "127.0.0.1:5686"         ; адрес сокета
}
streams {
    stream_2 "hdp"                   ; поток кодирования сигнала в качестве hdp
    stream_4 "i1"                    ; поток кодирования сигнала в качестве i1(sd)
}
output {
   type out_rtmp_server              ; тип выходного потока
   streams "stream_2,stream_4"       ; потоки подаваемые на выход через rtmp сервер, application часть для входящих rtmp
   address "0.0.0.0:5786"            ; адрес rtmp-сервера
   rtmp_stream stream                ; rtmp stream
   max_clients 100                   ; лимит зрителей, по-умолчанию 100
}
log {
    default 2                        ; уровень логирования по умолчанию
    listen unix:/var/run/streambuilder/<название канала>.s   ; сокет управления логированием
    filename "/var/log/streambuilder/<название канала>.log"  ; местоположение файла логов
}
video {
    size_hd 1280,720                 ; размер hd-видео
    size_sd 640,360                  ; размер sd-видео
    encoder sw                       ; hw - hardware (аппаратный), sw - software (программный)
}
logo {
    png_uri /usr/local/etc/sb.png    ; файл png-логотипа
    png_width 6%                     ; ширина логотипа
    png_height 10%                   ; высота логотипа
    x_shift -3%                      ; смещение логотипа по горизонтали
    y_shift 3%                       ; смещение логотипа по вертикали
}
Наверх