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

  1. Быстрый старт
  2. How To
  3. Потоковое вещание
    1. Публикация
    2. Прием мультикаста
    3. Варианты источников
    4. Переключение источников
    5. Плейлисты
    6. Наложение логотипа
    7. Миксер
    8. WebRTC публикация
    9. SDI
    10. Отправка на другие сервера
    11. Распознавание DVB субтитров
  4. Транскодер
    1. Логотип
    2. Hardware
    3. Скриншоты
    4. Мозаика
  5. DRM
    1. Simple CAS
    2. Conax DRM
    3. BuyDRM (KeyOS)
  6. Авторизация
    1. Конструктор бэкендов
    2. Сервис сбора статистики
    3. Domain lock
    4. Middleware
    5. Secure links
    6. Ограничение сессий
    7. Мультиавторизация
    8. Бан IP адресов
    9. DVR
    10. Aliaser
  7. API
    1. HTTP API
    2. Events API
    3. MySQL API
    4. SQL API для кластеров
    5. SNMP
  8. Кластер
    1. Ретрансляция
    2. Кластерный захват
    3. Балансировщик нагрузки
    4. Пиринг
    5. Организация CDN
  9. VOD
    1. Кэш
    2. Облако
    3. Транскодирование файлов
  10. DVR
    1. Настройка
    2. Timeshift
    3. Catchup
    4. Проигрывание
    5. Экспорт в MP4
    6. Доступ по протоколам
    7. Timelapse
    8. API
    9. Кластеризация DVR
    10. Репликация
    11. Облако
  11. Воспроизведение
    1. HLS
    2. embed.html
    3. HTML5 с низкой задержкой
    4. Плеер HTML5 с низкой задержкой
    5. MPEG-TS
    6. RTMP
    7. DASH
    8. HDS
    9. RTSP
    10. multicast, CBR UDP
    11. WebRTC проигрывание
    12. H.265
  12. Администрирование
    1. Установка
    2. Обновление

    3. Конфигурация
    4. Мониторинг
    5. Производительность
    6. Лицензия
    7. LUA скрипты
    8. Безопасность
    9. Let's Encrypt
    10. Миграция
  13. IPTV
    1. Захват спутникового видео
    2. Транскодирование
    3. Middleware в IPTV OTT
    4. Экспорт EPG со спутника
    5. Группы каналов

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

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

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

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

Содержание:

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

Статические потоки запускаются при старте сервера и 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) Anchor Anchor x2

Если поток нужен не всё время, а только по требованию пользователя, можно указать 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 секунд.

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

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

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

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

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

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

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

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

А можно указать Flussonic Media Server, где забирать скриншоты. Это поможет не тратить ресурсы CPU. Многие камеры имеют специальный 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

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

Заглушка для потока Anchor Anchor x2

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

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

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

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

Подстановки Anchor Anchor x2

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

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

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

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

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

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

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

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

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

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

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 Anchor Anchor x2

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

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

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

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

Можно указать 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 Anchor Anchor x2

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

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

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

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

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

DRM в live-потоках Anchor Anchor x2

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

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

Эти настройки можно указывать внутри директив 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; Включение архива. Flussonic Media Server будет писать в каталог /storage/streamname и очищать либо через день, либо когда диск на который пишут, заполнится на 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; Включается генерация превьюшек потока. Требуется установить пакет flussonic-ffmpeg.

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 пока нет видео от источника.

publish_enabled

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

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.

no_prepush

no_prepush; Отключается [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` для шестнадцетиричных чисел.

segments

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

segment_duration

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

segment_count

segment_count 4; Количество сегментов для буферизации.

group

group sport; Используется только на сервере-источнике, чтобы отнести поток к одной или нескольким группам ТВ-каналов. [подробнее](/doc/iptv/stream-groups)

disabled

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