Документация на 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. Группы каналов

Публикация видео на сервер

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

Публикация может использоваться в тех случаях, когда устройство не имеет статического IP адреса или вообще находится за NAT и Flussonic Media Server не сможет обратиться к этому устройству или программе за видео. Flussonic Media Server может принимать запросы на публикацию видео по протоколам RTMP, RTSP и HTTP MPEG-TS.

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

Содержание:

Публикация в статический поток Anchor Anchor x2

Если вы точно знаете под каким именем поток должен появиться на сервере, то вы можете создать поток без источников и указать ему, что вы разрешаете в него публиковать:

stream published {
  publish_enabled;
}

При такой конфигурации вы можете публиковать видео используя следующие адреса:

  • rtsp://flussonic-ip/published
  • http://flussonic-ip/published/mpegts
  • rtmp://flussonic-ip/published
  • rtmp://flussonic-ip/static/published

Важно. Для RTMP адреса. Если вы укажете простое имя потока, то у стороннего ПО может возникнуть вопрос — какое имя приложения использовать. Flussonic Media Server выкидывает rtmp из имени приложения, поэтому, если ПО обязательно требует какое-то имя приложения, укажите ему static. Это будет выглядеть так:

  • server URL: rtmp://flussonic-ip/static
  • stream name: published

Если вы используете сложное имя стрима, например client15/published1, то вы можете использовать:

  • server URL: rtmp://flussonic-ip/client15
  • stream name: published1

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

Публикация по динамическому имени Anchor Anchor x2

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

live chats {
}

В этом случае вам надо публиковать стримы под именами, например:

  • rtsp://flussonic-ip/chats/tempname
  • http://flussonic-ip/chats/tempname/mpegts
  • rtmp://flussonic-ip/chats/tempname

Что именно идет после chats — это дело клиента, но Flussonic Media Server заранее не знает, какое именно это будет имя.

Это же можно сделать через веб-интерфейс.

  1. Откройте вкладку Media: Публикация видео на сервер
  2. Найдите раздел Publish locations и нажмите add: Publish locations
  3. Введите имя префикса и сохраните конфигурацию. Имя должно быть уникальным, состоять из английских букв, цифр, подчеркивания и /. Крайне не рекомендуется использовать другие символы — они могут быть восприняты различными программами на клиентах как служебные (сам Flussonic ограничений на имя не накладывает). Публикация видео на сервер Префикс для публикации создан.

Более подробная инструкция по настройке опций в разделе про настройку потоков.

Публикация по RTMP Anchor Anchor x2

С настройкой публикации по RTMP есть ряд сложностей. Дело в том, что протокол RTMP не имеет как таковых адресов. При подключении к серверу по RTMP клиент указывает имя сервера + имя приложения, а потом уже указывает в какой поток публиковать или какой поток проигрывать.

Обычно для сокращенной записи имя приложения и имя потока склеивают. Например, пара из rtmp://rtmp.myhosting.com/chats и chat-15 превращается в rtmp://rtmp.myhosting.com/chats/chat-15.

Стандартная практика при интерпретации RTMP адреса rtmp://rtmp.myhosting.com/chats/chat-15 — разделить путь после имени сервера по первому слешу и взять первую часть имени в качестве приложения.

В Flussonic Media Server нет концепции приложений, они существуют только в RTMP и в других протоколах они неестественны, поэтому при публикации по RTMP используется следующая логика:

  1. Сервер склеивает имя приложения с публикуемым путем. Так пары rtmp://rtmp.myhosting.com/chats/my, chat-15 и rtmp://rtmp.myhosting.com/chats, my/chat-15 превратятся в публикуемое имя потока chats/my/chat-15.
  2. Ищется первый префикс публикации, который подходит под это имя. В нашем случае будет выбран префикс chats.
  3. Дальше во всех интерфейсах авторизации и т.п. имя потока будет полное: chats/my/chat-15.

Опубликовать по RTMP можно, например, с помощью ffmpeg:

ffmpeg -re -i /opt/flussonic/priv/bunny.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost/chats/my/chat-15

При этом в веб-интерфейсе появится новый поток:

Публикация видео на сервер

Публикация по RTSP Anchor Anchor x2

Некоторые клиенты могут публиковать видео по RTSP.

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

Имя потока должно быть полным: chats/my/chat-15

ffmpeg -re -i /opt/flussonic/priv/bunny.mp4 -vcodec copy -acodec copy -f rtsp rtsp://localhost/chats/my/chat-15

Публикация по MPEG-TS Anchor Anchor x2

При транскодировании потока с помощью ffmpeg можно опубликовать видео по HTTP.

Для этого надо явно указать в конфиге опцию publish_enabled:

live chats {
  publish_enabled;
}

После этого можно опубликовать видео, добавив суффикс mpegts:

ffmpeg -re -i /opt/flussonic/priv/bunny.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy -f mpegts http://localhost:8080/chats/my/chat-15/mpegts

Авторизация при публикации потока Anchor Anchor x2

Flussonic Media Server может проверять пароль при публикации потока. Укажите пароль в конфигурационном файле следующим образом:

  live live {
    password mypass;
  }

  stream s1 {
    password secure;
    publish_enabled;
  }

RTMP

Чтобы опубликовать в защищенную паролем зону поток по RTMP, укажите данные следующим образом:

rtmp application: rtmp://192.168.2.3/live

stream name: mystream?password=mypass

HTTP MPEG-TS

Чтобы опубликовать поток по HTTP MPEG-TS, укажите данные следующим образом:

http://192.168.2.3:8080/s1/mpegts?password=secure
ffmpeg -re -i video.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.2.3/live/mystream?password=mypass
ffmpeg -re -i video.mp4 -vcodec copy -bsf h264_mp4toannexb -acodec copy -f mpegts http://192.168.2.3:8080/s1?password=secure

Расширенная валидация публикации Anchor Anchor x2

Flussonic Media Server позволяет указать HTTP URL или пользовательский скрипт, которые будут проверять расширенную информацию о паблишере перед тем, как разрешить или запретить публикацию.

live chats {
  on_publish http://my-site.com/publish-check.php;
}

или

live chats {
  on_publish /etc/flussonic/publish_check.lua;
}

В HTTP запросе Flussonic Media Server передает по методу POST JSON объект с полями, описанными ниже. В lua скрипт передается объект req с такими же полями.

Передаются следующие поля:

  • name — имя публикуемого потока (например chats/15), включающее префикс публикации
  • location— префикс публикации
  • proto — протокол публикации (rtmp, rtsp, mpegts)
  • args — параметры из query string запроса. Для rtmp берется query string из имени публикуемого потока
  • ip — IP адрес источника

HTTP обработчик должен вернуть код 200, что бы публикация началась. Также может вернуть заголовок x-record, чтобы сообщить в какой файл записывать публикуемый поток.

lua скрипт должен вернуть пару true и объект, в котором допустимо поле record_path с путем для записи.

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

Архив и динамические имена потоков Anchor Anchor x2

Вы можете сконфигурировать архив для live префикса:

live recorded {
  dvr /storage 3d 500G;
}

В этом случае публикуемое видео будет записываться и будет доступно даже если публикация остановилась.

Когда клиент перестает публиковать видео, то стрим через какое-то время пропадает и Flussonic Media Server про него почти ничего не знает. Почти — означает, что в индексе архива информация об этом видео потоке существует и Flussonic Media Server не потеряет эти файлы на диске.

Система зачистки архива удалит их по расписанию.

Перепубликация Anchor Anchor x2

Когда вы используете префиксы публикации, вы не можете использовать push в UDP:

live pushed {
  udp 239.0.0.1:1234;
}

Точнее можете, но в этом случае все потоки будут отправляться в одну мультикаст группу с печальными последствиями.

Правильнее использовать push с шаблоном (%s) по другим протоколам:

live pushed {
  push rtmp://cdn-server/client43/%s;
}

При такой настройке для перепубликации стрима pushed/mystream будет использоваться адрес rtmp://cdn-server/client43/pushed/mystream