Документация Flussonic Media Server

Contents

Live — потоковое вещание

Flussonic Media Server умеет ретранслировать потоковое видео, перепаковывая его на лету в разные форматы. Это означает, что вы можете захватить MPEG-TS поток и раздавать его одновременно тысячам получателей, например, в DASH или HLS, и публиковать в RTMP на YouTube.

Flussonic Media Server поддерживает три типа потоков:

  • static — постоянно живущие (транслируемые).
  • ondemand — потоки, транслируемые по запросу.
  • live – публикуемые пользователем. См. Публикация

Содержание:

Статические потоки

Статические потоки запускаются при старте сервера и Flussonic Media Server постоянно следит за ними. Если источник пропадает (выключился транскодер, авария на антенне), то Flussonic Media Server будет пытаться переподключиться к источнику и ни при каких обстоятельствах не перестанет этого делать.

IPTV канал или IP камера обычно объявляются именно как статический поток.

Flussonic Media Server поддерживает различные типы источников, которые указываются в виде URL-адресов.

Пример конфигурации потоков из /etc/flussonic/flussonic.conf:

stream ort {
  url tshttp://10.0.4.5:9000/stream;
}
stream ipcam {
  url rtsp://192.168.0.100/channel/101;
}

В этой конфигурации:

  • ort и ipcam — это имена потоков, по которым можно обратиться к Flussonic Media Server и получить их.
  • tshttp://10.0.4.5:9000/stream и rtsp://192.168.0.1/channel/101 — URL источников.

Важно. Имя канала должно состоять из латинских букв, чисел, точки (.), символов минуса (-) и нижнего подчеркивания (_). Если в имени будет что-то кроме этих символов, то работоспособность DVR и вещания мы гарантировать не можем.

Чтобы добавить поток через веб-интерфейс:

Перейдите на вкладку Media.

Live — потоковое вещание

Нажмите add рядом со Streams.

потоковое вещание

Введите название потока и URL адрес источника. После этого нажмите create.

По умолчанию создается статический поток. Чтобы поменять тип потока на on demand, кликните по static рядом с названием потока.

Поток создан. Теперь можно перейти на страницу потока для проверки захвата:

потоковое вещание

Потоки по запросу (ondemand)

Если поток нужен не всё время, а только по требованию пользователя, можно указать Flussonic Media Server отключать его при неиспользовании и включать по запросу.

Для указания такого типа потока надо заменить stream на ondemand:

ondemand ipcam {
  url rtsp://192.168.0.1/channel/101;
}

Важно. Если между источником и репитером используется RTMP, RTSP или HTTP MPEG-TS, то снимать с репитера HDS или HLS не получится, потому что эти протоколы требуют наличия 10-30 секундного буфера видео в памяти. Плеер не начнет проигрывание пока этот буфер не накопится, и, следовательно, первый пришедший пользователь будет ждать это время. Единственный источник, который не подвержен этой проблеме – это другой Flussonic Media Server по протоколу HLS. Во Flussonic Media Server используются собственные расширения, позволяющие моментально стартовать видео на iPhone.

Можно регулировать время жизни потока после отключения клиента:

ondemand cam1 {
  url rtsp://192.168.0.1/channel/101;
  retry_limit 10;
  client_timeout 20;
}

В конфигурации выше указано следующее: пытаться переподключиться к сбойному источнику не больше 10 раз и после ухода последнего клиента гонять поток вхолостую не дольше 20 секунд.

Проигрывание потоков

Проигрывание описано подробно в отдельном разделе.

Мультибитрейтный поток

Для объединения двух независимых источников одного и того же контента для создания мультибитрейтного потока используется опция mbr=1.

Подробнее в разделе про объединение источников в один поток

JPEG-cкриншоты потока

Flussonic Media Server может делать JPEG-скриншоты потока. Для этого надо указать опцию thumbnails в настройках потока:

stream ort {
  url udp://239.255.0.100:1234;
  thumbnails;
}

А можно указать Flussonic Media Server, где забирать скриншоты. Это поможет не тратить ресурсы CPU. Многие IP-камеры имеют специальный URL со скриншотами:

stream cam0 {
  url rtsp://10.0.4.3:554/h264;
  thumbnails http://10.0.4.3/cgi-bin/snapshot.cgi
}

URL с потоком скриншотов можно найти в документации к вашей модели камеры.

Последний скриншот потока доступен по адресу http://flussonic:8080/ort/preview.jpg

MJPEG поток скриншотов доступен по адресу http://flussonic:8080/ort/preview.mjpeg

Читайте также:

Файл-заглушка для потока

Если поток недоступен, можно запустить на проигрывание файл.

stream rtr {
  url tshttp://10.0.4.5:9000/channel/5;
  backup vod/backup.mp4;
}

Необходимо указывать путь к файлу-заглушке относительно VOD-локации, например vod/backup.mp4, при этом нельзя указывать абсолютный путь.

Важно. Если оригинальный поток идет без звука (например, с IP камеры), то и файл-заглушка тоже должен быть без звука.

Подстановки

Иногда заранее неизвестны имена потоков на удаленном сервере, и хочется получать все эти потоки. В этом случае используется специальный тип потока (rewrite):

rewrite nsk/* {
  url rtsp://nsk-origin:554/%s;
}

rewrite ams/* {
  url hls://ams-origin:8080/%s/index.m3u8;
}

Если опция rewrite сочетается с использованием звездочки на конце имени потока, то префикс перед звездочкой отрезается от имени потока и результат подставляется в URL на место "%s".

Запись потоков (DVR)

Во Flussonic Media Server встроена система записи потоков в так называемый архив. Архиватор потоков умеет записывать видео, предоставлять доступ к произвольному фрагменту, экспортировать части архива в виде MP4 файлов, очищать старые файлы и поддерживать заполнение хранилища на приемлемом уровне.

Для включения архива достаточно указать опцию dvr в конфиге потока:

stream foxlive {
  url tshttp://trancoder-5:9000/;
  dvr /storage 90% 5d;
}

Подробнее в разделе про архив и методов работы с ним.

Сдвиг по часовой зоне (Timeshift)

Flussonic Media Server умеет воспроизводить записанный в архив поток с фиксированным отставанием.

Важно! Flussonic Media Server очень четко поддерживает фиксированное отставание. Если в архиве были "дырки", то пользователи не получат никакого видео за это время.

Для таймшифта есть отдельный протокол источника:

stream ort {
  url tshttp://trancoder-5:9000/;
  dvr /storage 90% 5d;
}

stream ort-4h {
  url timeshift://ort/14400;
}

Отставание указывается в секундах.

Выдача потока в UDP multicast

Flussonic Media Server умеет ретранслировать поток из источника в локальную сеть.

Flussonic Media Server пытается выдавать UDP максимально монотонно во времени, чтобы не создавать скачкообразной нагрузки на сеть.

stream ort {
  url tshttp://trancoder-5:9000/;
  udp 239.0.4.4:1234;
}

Настройки потоков для IP-камер видеонаблюдения

Можно указать Flussonic Media Server запрашивать поток с камеры только по UDP. Это бывает нужно с камерами, в которых проблемная реализация TCP.

stream cam1 {
  url rtsp://10.0.4.3:554/h264 rtp=udp;
}

Важно! Обратите внимание, что из десктопных браузеров показывать H265 сейчас фактически умеет только Microsoft Edge (версия 16 и выше) и Safari (версия 11 и выше). Из мобильных браузеров — Safari и Chrome для iOS (версия 11.0 и выше). Подробнее в статье Воспроизведение H265.

Если с камеры не надо забирать звук (например, он в G.726) то можно указать Flussonic Media Server забирать только одну дорожку. Ее номер необходимо указать в конфигурации:

stream cam1 {
  url rtsp://10.0.4.3:554/h264 tracks=1;
}

Для того, чтобы автоматически транскодировать аудио с камеры из G.711a или G.711u в AAC, укажите другой протокол:

stream cam1 {
  url rtsp2://10.0.4.3:554/h264;
}

Включение audio-only варианта HLS

Apple при валидации программ в AppStore может потребовать, чтобы поток был с audio only вариантом. Если добавить директиву в конфигурацию:

stream cam1 {
  url rtsp://10.0.4.3:554/h264;
  add_audio_only;
}

и при этом в потоке есть и видео, и аудио, то Flussonic Media Server будет генерировать мультибитрейтный вариантный плейлист из двух потоков: один обычный, второй только со звуком.

Захват потока с другого сервера Flussonic Media Server

Детально вопросы передачи видео между разными Flussonic Media Server описаны в разделе про кластеризацию видеопотоков в Flussonic.

DRM в live-потоках

Детально вопрос использования таких DRM как AES-128, SAMPLE-AES и Conax описан в разделе про DRM.

Обнаружение тишины в потоке

Flussonic умеет обнаруживать низкий уровень звука (отсутствие звука) на источнике входного потока и оповещать об этом. Подробнее в разделе

Обнаружение тишины

Настройки потока или группы

Эти настройки можно указывать внутри директив stream, ondemand, rewrite и live. Мы называем их опции.

auth

auth http://backend/; Включение авторизации для потока. Более подробно в разделе про авторизацию.

domains

domains host1.ru *.host1.ru; Указание доменов, на которых можно проигрывать это видео. Не работает для клиентов, которые не передают Referer. Для правильной работы в WEB в списке доменов должен присутствовать домен, с которого загружается embed плеер.

allowed_countries

allowed_countries RU UA KZ; Cписок стран (двухбуквенные коды как в БД maxmind) с которых разрешен доступ.

url

url tshttp://transcoder:port/; Адрес источника. Можно перечислить несколько директив url для выбора источника по кругу.

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

urls

urls source1 source2; Список адресов источников. Подробнее про механизм переключения источников.

url_prefix

url_prefix prefix При использовании протокола HLS, адреса отдельных сегментов и плейлистов в вариантном плейлисте будут начинаться с указанного префикса. Эта опция может быть использована не только как часть настроек конкретного потока, но и в глобальной части файла конфигурации. Прописанная глобально опция применяется ко всем потокам на этом сервере. Пример: url_prefix http://my.domain.address.com:8080

dvr

dvr /storage 1d 50% schedule=8:00-16:00;

dvr @my_raid 1d 50% schedule=8:00-16:00;

Включение архива. Flussonic Media Server будет писать в каталог /storage/streamname или дисковый массив @my_raid. Очищать архив он будет либо через день, либо когда диск, на который пишут, заполнится на 50%. Вместо дней можно указывать часы: 20h. Параметр schedule позволяет задать расписание для записи архива в виде интервалов. Время указывается в UTC в часах и опционально минутах, интервал может перехлёстываться через полночь: 22-1:30. Расписание может содержать несколько интервалов, разделенных запятой: 8:00-16:00,22-1:30.

dvr_offline

dvr_offline /storage 1d 50%; При указании этой опции, поток не будет включать запись на старте. Её надо будет включать явно через API. Эта опция указывается вместо опции `dvr`.

udp

udp 239.0.0.1:4501 multicast_loop;

udp 239.0.0.1:4501;
Flussonic Media Server будет посылать поток по UDP MPEG-TS. Чтобы задать UDP сокету параметр MULTICAST_TTL, используйте следующий синтаксис: udp 239.0.0.1:4501?ttl=8;. Чтобы задать постоянный битрейт (CBR), используйте следующий синтаксис: udp 239.0.0.1:4501?cbr=2000;, где 2000 — битрейт в kbit/sec.

thumbnails

thumbnails; Включает генерацию JPEG-скриншотов потока..

retry_limit

retry_limit 10; Количество раз, которое Flussonic Media Server будет пытаться подключиться к источникам, прежде чем отключить не статический поток.

clients_timeout

clients_timeout 10; Количество секунд которое Flussonic Media Server будет держать нестатический стрим после последнего обращения клиента.

source_timeout

source_timeout 10; Количество секунд, которое Flussonic Media Server будет ожидать кадры от источника. По прошествии этого времени Flussonic Media Server переподключится к источнику. По умолчанию значение source_timeout равно 60 секундам.

frames_timeout

frames_timeout 3; Время в секундах, в течение которого Flussonic Media Server ожидает кадры от источника прежде чем генерировать событие frames_timed_out. Это время должно быть меньше, чем source_timeout. Событие frames_timed_out уведомляет вас о том, что источник, возможно, скоро отключится. Если от источника снова начали поступать кадры, до наступления source_timeout, Flussonic генерирует событие frames_restored.

password

password secret; Пароль, который должен передаваться в query string (http или rtmp) для публикации в поток или в группу.

push

push rtmp://destination-server/name; При указании этой опции Flussonic Media Server будет публиковать поток на другой сервер.

backup

backup vod/blank.mp4; Указание этой опции в потоке будет запускать указанный файл vod/blank.mp4 пока нет видео от источника.

url publish://

url publish://; Указание этой опции в потоке позволяет публиковать в него видео. Не используется для группы потоков.

on_publish

on_publish http://host/publish.php;

on_publish /etc/flussonic/publish.lua;
При публикации в этот поток или группу потоков будет вызывать скрипт или делаться HTTP запрос с параметрами в виде названия потока, IP адреса публикующего и т.п. В ответ можно либо отказать в публикации, либо разрешить:
— HTTP бэкенд должен вернуть либо 200 OK, либо 403 Forbidden;
— .lua скрипт должен вернуть либо {true, {}}, либо {false, {}}.

max_sessions

max_sessions 1000; Лимит по количеству сессий на поток.

settings_rtp

rtp udp; Включает принудительное использование UDP для работы с RTSP камерами.

add_audio_only

add_audio_only; Добавляет в HLS плейлист ссылку на поток только с аудио. Требуется для прохождения валидации приложения в Apple.

prepush off

prepush off; Отключается [prepush](#prepush), т.е. более быстрый старт. Может быть нужно для сохранения риалтайма в потоке.

prepush

prepush 10; Включает буфер заданной продолжительности. Если соединение клиента с сервером прерывается или замедляется, то он проигрывает видео из буфера, что позволяет плееру стартовать быстрее, но с отставанием.

max_bitrate

max_bitrate 1000; Лимит битрейта публикуемого потока.

logo

В версии 4.6.15 и выше.

logo path=flu/embed-logo.png height=100 width=100 left=0 top=0; Добавить логотип при воспроизведении потока. Такой логотип не будет отображаться на мобильных устройствах и в DVR плеере. Чтобы добавить логотип к видео используйте транскодер.
path (Обязательный параметр) — путь относительно директории wwwroot.
height, width — размер изображения логотипа в пикселях. Если задан только один из этих параметров, то второй будет изменен пропорционально. Не указывайте эти параметры, чтобы оторазить логотип в исходном размере.
left, top, right, bottom — положение логотипа заданное в виде смещения в пикселях от левого, верхнего, правого и нижнего края видео. Например, чтобы отобразить логотип в правом нижнем углу: `right=0, bottom=0`. Не используйте одновременно параметры left, top, right и bottom.

mpegts_pids

mpegts_pids pmt=4095 sdt=0x12 v1=211 v2=212 a0=220 t0=16#fb; С помощью этого параметра задаются значения PID исходящему MPEG-TS потоку. Можно задать PID для PMT, SDT, дорожек с видео, аудио и субтитрами. Дорожки нумеруются начиная с 1: `a1=123` установит PID для первой аудио дорожки. Можно задать базовый PID для дорожек определённого типа с помощью индекса 0. Например, `t0=100` установит первой дорожке субтитров PID равный 101, второй - 102 и т.д. Числа могут быть заданы в десятичном виде (по умолчанию) или префиксом `0x` для шестнадцетиричных чисел.

segment_duration

segment_duration 4; Регулирует длительность сегмента в HLS и HDS потоках (в секундах). Не для всех получаемых потоков Flussonic сможет применить указанную длительность сегмента. Всё зависит от длины GOP у потока. Нужно, чтобы сегмент был кратен GOP, потому что GOP нельзя порезать на части. Например, для потока с GOP в 4 секунды допустима длина сегмента 4 секунды, 8 секунд, 12 секунд и т.д. Если это не так, то Flussonic создаёт сегменты равные GOP.

segment_count

segment_count 4; Регулирует количество сегментов в HLS и HDS плейлистах.

group

group sport; Используется только на сервере-источнике, чтобы отнести поток к одной или нескольким группам ТВ-каналов. Подробнее

disabled

disabled; Отключить поток.