Медиа-сервер 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для просмотра списка доступных серверов.
Затем выберите сервер для настройки. Большинство настроек могут быть применены к нескольким серверам сразу.
Теперь нажимаем на кнопку RTMP settings. Nimble поддерживает два сценария для обработки входных потоков:
- Публикация потока по протоколу RTMP (RTMP-publish)
- Ретрансляция готового RTMP-потока (RTMP-pull)
Можно совмещать оба сценария, передавая Нимблу оба типа входных потоков и получая на выходе DASH и HLS. Для настройки живого вещания будем использовать первый сценарий — публикацию потока.
2. RTMP-publish: настройка параметров публикации по RTMP
Настройки приложений
На странице RTMP settings вы увидите несколько вкладок. Первая, которая вам понадобится — этоGlobal (Рис 3). Она содержит следующие глобальные настройки сервера:
- длина сегмента по умолчанию для исходящих потоков;
- количество сегментов;
- протоколы, которые будут получаться на выходе — можно сгенерировать все поддерживаемые типы или только один, это не будет сильно влиять на производительность;
- логин и пароль для публикации — они будут использованы по умолчанию для опубликованных потоков.
Добавление интерфейса
Чтобы Нимбл мог получать опубликованные потоки, он должен быть настроен на прослушивание определённого интерфейса — адреса и порта. Перейдите на вкладку Interfaces и нажмите на кнопку Add interface.
Вы увидите диалог для указания адреса и порта для прослушивания. Поле IP address можно оставить пустым, в этом случае Нимбл будет прослушивать все доступные адреса.
Настройка входного потока
На вход Нимблу нужно подать RTMP-поток. Например, если на тестовой машине есть веб-камера, можно воспользоваться видеокодером Adobe Flash Media Live Encoder.
На вкладке 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.
3. Настройка исходящих потоков
После того, как входящий поток определён и обработан Nimble, его можно подвергнуть трансмаксингу, передавая его уже через MPEG-DASH или любой другой протокол, который был указан в глобальных настройках, например HLS.
Нажмите на область Outgoing stream на диаграмме потоков, либо перейдите по ссылке Outgoing в верхнем углу области настроек.
Вы увидите там все потоки, которые в данные момент обрабатываются и готовы к использованию. Каждый поток обладает следующим набором параметров:
- статус,
- имена серверов, с которых раздаётся этот поток,
- имя потока для проигрывания,
- параметры аудио и видео,
- ссылка для получения URL для проигрывания потоков — это квадратик со знаком вопроса
Чтобы проиграть исходящий поток, нажмите на знак вопроса, чтобы перейти к диалогу Sample URL for player.
Вы получите ссылки для двух протоколов, которые вы определили в глобальных настройках сервера — MPEG-DASH и HLS. Теперь эти ссылки можно использовать в любом плеере, который вам удобен. Мы тестировали стриминг MPEG-DASH в DASH reference player и bitdash™.
Что ещё?
ABR — adaptive bitrate (адаптивное потоковое вещание)
Получив несколько битрейтов одного и того же потока, можно сформировать HLS поток с несколькими каналами — современные плееры такие как JWPlayer умеют переключаться между каналами в зависимости от качества.
Подробнее об этом можно почитать здесь: http://blog.wmspanel.com/2014/06/make-abr-hls-rtmp.html
Про другие сценарии живых трансляций можно прочитать в этой статье:https://wmspanel.com/nimble/live_streaming
Высокая производительность
Одним из главных достоинств Нимбла является то, что после настройки, получая на вход живые потоки, Нимбл может отрабатывать тысячи одновременных соединений с клиентами и раздавать контент без задержек и зависаний.