Медиа-сервер Nimble Streamer. Живое вещание DASH и HLS через Nimble Streamer

Nimble Streamer — это медиа-сервер, написанный на С++ как приложение для Линукса. Его разработчики — российская команда — ставили целью создание лёгкого сервера для доставки контента по протоколам на базе HTTP.

Сейчас Нимбл поддерживается в том числе Windows и Mac OS X и позволяет обслуживать как “живой” стриминг в реальном времени, так и раздачу видео по запросу.

Управлять сервером можно через файлы конфигурации или через WMSPanel — облачную панель управления, с помощью которой можно не только настроить сервер, но и получить разнообразную статистику.

Рассмотрим живое потоковое видео. Для этого режима работы Нимбл поддерживает приём данных по:

  • RTMP (publish или pull),
  • MPEG-TS (как по UDP, так и по HTTP),
  • Icecast.

На выход может отдаваться:

  • HLS (обычный или audio-only),
  • MPEG-DASH,
  • Icecast,
  • MPEG-TS по HTTP,
  • RTMP.

Все потоки формируются через трансмаксинг (transmuxing, transcode-multiplexing). Это означает, что медиа-данные переупаковываются из формата одного протокола доставки в другой, при этом сами аудио и видео не перекодируются, и их формат и качество остаются прежними.

В этой статье мы разберём процесс настройки живого вещания через Нимбл. На вход ему будут подаваться RTMP-потоки (publish или pull), на выходе они будут преобразованы в DASH или HLS.

1. Установка и настройка Nimble Streamer

Ставится Нимбл под все популярные дистрибутивы Линукса — Ubuntu, Debian, RedHat и CentOS. Используется пакетная установка, которая позволяет не только быстро поставить, но и в дальнейшем без проблем обновить софт. Для Windows и Mac OS X подготовлены отдельные инсталляторы.

Подробнее с процессом установки Нимбла для всех поддерживаемых OS можно ознакомиться здесь. Перед установкой нужно завести аккаунт в WMSPanel, если у вас его ещё нет.

Чтобы подать на вход RTMP-потоки для трансмаксинга, нужно указать доступные источники медиа-данных. После этого их уже подхватит Нимбл. Перейдите в окно Nimble Streamer -> Live Streams Set Upдля просмотра списка доступных серверов.

Nimble-Streamer_1

Затем выберите сервер для настройки. Большинство настроек могут быть применены к нескольким серверам сразу.

Nimble-Streamer_2

Теперь нажимаем на кнопку RTMP settings. Nimble поддерживает два сценария для обработки входных потоков:

  • Публикация потока по протоколу RTMP (RTMP-publish)
  • Ретрансляция готового RTMP-потока (RTMP-pull)

Можно совмещать оба сценария, передавая Нимблу оба типа входных потоков и получая на выходе DASH и HLS. Для настройки живого вещания будем использовать первый сценарий — публикацию потока.

2. RTMP-publish: настройка параметров публикации по RTMP

Настройки приложений

На странице RTMP settings вы увидите несколько вкладок. Первая, которая вам понадобится — этоGlobal (Рис 3). Она содержит следующие глобальные настройки сервера:

  • длина сегмента по умолчанию для исходящих потоков;
  • количество сегментов;
  • протоколы, которые будут получаться на выходе — можно сгенерировать все поддерживаемые типы или только один, это не будет сильно влиять на производительность;
  • логин и пароль для публикации — они будут использованы по умолчанию для опубликованных потоков.

 

Nimble-Streamer_3

Добавление интерфейса

Чтобы Нимбл мог получать опубликованные потоки, он должен быть настроен на прослушивание определённого интерфейса — адреса и порта. Перейдите на вкладку Interfaces и нажмите на кнопку Add interface.

Nimble-Streamer_4

Вы увидите диалог для указания адреса и порта для прослушивания. Поле IP address можно оставить пустым, в этом случае Нимбл будет прослушивать все доступные адреса.

Nimble-Streamer_5

Настройка входного потока

На вход Нимблу нужно подать RTMP-поток. Например, если на тестовой машине есть веб-камера, можно воспользоваться видеокодером Adobe Flash Media Live Encoder.

Nimble-Streamer_6

На вкладке Encoding Options можно задать параметры видео и аудиопотоков, либо выбрать пресет из списка. На панели Output должен быть отмечен чекбокс Stream to Flash Media server. В поле FMS URLукажите те же адрес и порт, что и во вкладке Interfaces настроек Nimble; в поле Stream — имя потока. После этого запускайте вещание нажатием на кнопку Start.

Если веб-камеры нет, можно запустить на живое вещание уже имеющийся файл с помощью ffmpeg. Предположим, что Нимбл настроен на приём RTMP-потока по адресу 127.0.0.1:2000, и для доступа к публикации используются логин и пароль “login” и “pass” соответственно. Тогда команда для стриминга файла может выглядеть так:

./ffmpeg -re -i /home/test/content/mp4/sample.mp4 -acodec copy -vcodec copy -f flv rtmp://login:pass@127.0.0.1:2000/live/stream

Если всё настроено правильно, вы увидите исходящий поток в WMSPanel.

Nimble-Streamer_7

3. Настройка исходящих потоков

После того, как входящий поток определён и обработан Nimble, его можно подвергнуть трансмаксингу, передавая его уже через MPEG-DASH или любой другой протокол, который был указан в глобальных настройках, например HLS.

Нажмите на область Outgoing stream на диаграмме потоков, либо перейдите по ссылке Outgoing в верхнем углу области настроек.

Nimble-Streamer_8

Вы увидите там все потоки, которые в данные момент обрабатываются и готовы к использованию. Каждый поток обладает следующим набором параметров:

  • статус,
  • имена серверов, с которых раздаётся этот поток,
  • имя потока для проигрывания,
  • параметры аудио и видео,
  • ссылка для получения URL для проигрывания потоков — это квадратик со знаком вопроса

Чтобы проиграть исходящий поток, нажмите на знак вопроса, чтобы перейти к диалогу Sample URL for player.

Nimble-Streamer_9

Вы получите ссылки для двух протоколов, которые вы определили в глобальных настройках сервера — MPEG-DASH и HLS. Теперь эти ссылки можно использовать в любом плеере, который вам удобен. Мы тестировали стриминг MPEG-DASH в DASH reference player и bitdash™.

Nimble-Streamer_9

Что ещё?

ABR — adaptive bitrate (адаптивное потоковое вещание)

Получив несколько битрейтов одного и того же потока, можно сформировать HLS поток с несколькими каналами — современные плееры такие как JWPlayer умеют переключаться между каналами в зависимости от качества.

Подробнее об этом можно почитать здесь: http://blog.wmspanel.com/2014/06/make-abr-hls-rtmp.html
Про другие сценарии живых трансляций можно прочитать в этой статье:https://wmspanel.com/nimble/live_streaming

Высокая производительность

Одним из главных достоинств Нимбла является то, что после настройки, получая на вход живые потоки, Нимбл может отрабатывать тысячи одновременных соединений с клиентами и раздавать контент без задержек и зависаний.