Skip to content

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

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

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

Что мы называем публикацией на сервер Flussonic:

  • Передачу видео с любого мобильного устройства на сервер Flussonic.
  • Передачу видео из OBS (Open Broadcaster Software) или vMix на сервер Flussonic. Узнать больше.
  • Передачу видео с HTML-страницы в браузере через WebRTC на сервер Flussonic. Узнать больше.

Что мы не называем публикацией на сервер Flussonic:

  • Получение мультикаста.
  • Прием потока из какого-либо источника.

В этих ситуациях Flussonic неким образом подключается к источнику. Но ситуация, когда Flussonic не делает ничего для того, чтобы инициировать соединение, называется публикацией: например, публикация — это когда мобильное устройство подключается к Flussonic для передачи видео на сервер.

Публикация видео в социальные сети не подходит под определение публикации, которое мы используем в этой документации, так как не является публикацией на Flussonic.

Протоколы

Flussonic Media Server может принимать запросы на публикацию видео по протоколам RTMP, RTSP, HTTP MPEG-TS, WebRTC и SRT.

Содержание

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

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

Чтобы создать статический поток с публикуемым источником:

  1. В административном интерфейсе создайте поток: Media > Stream > add.
  2. Заполните Stream name.
  3. Укажите publish:// в качестве Source URL. Либо, сохранив настройки, перейдите на вкладку Input и установите переключатель Publication в положение enabled.

    Note

    Чтобы отключить публикацию в поток, удалите источник publish:// или установите переключатель Publication в положение disabled

  4. Нажмите Create.

  5. Для указания дополнительных настроек источника публикации, нажмите options:

Создание статического потока с публикуемым источником

В файле конфигурации этой настройке соответствует такая строка:

stream published {
  input publish://;
}

URL для публикации по разным протоколам

URL для публикации можно посмотреть в веб-интерфейсе для конкретного потока:

  1. Кликните на имя созданного потока, чтобы открыть его настройки, и перейдите во вкладку Input.
  2. Доступные ссылки для публикации отобразятся в разделе Publish links (см. скриншот выше).

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

  • RTSP: rtsp://FLUSSONIC-IP/stream_name
  • HTTP MPEG-TS: http://FLUSSONIC-IP/stream_name/mpegts
  • RTMP: rtmp://FLUSSONIC-IP/stream_name или rtmp://FLUSSONIC-IP/static/stream_name. Особенности URL для RTMP см. на странице Публикация по RTMP.
  • WebRTC: http://FLUSSONIC-IP/stream_name/whip. Подробнее о публикации по WebRTC см. на странице Публикация по SRT.
  • SRT: srt://FLUSSONIC-IP:SRT_PORT?streamid=#!::r=STREAM_NAME,m=publish. Подробнее об URL для SRT см. на странице Публикация по SRT.

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

Зачем использовать динамическое имя и publishing location

Указывать статическое имя для публикуемых потоков может быть непрактично в следующих случаях:

  • Публикация длится ограниченный период времени (по сравнению с трансляцией телеканала, например) и происходит лишь один раз.
  • Может быть слишком много публикаций, чтобы создавать отдельный поток для каждой из них. Кроме того, вам пришлось бы прописывать настройки отдельно для каждого потока.
  • В некоторых случаях неизвестно, под каким именем внешнее приложение-клиент будет публиковать поток. Flussonic не знает имя потока, пока не придет запрос на публикацию видео на сервер. Зачастую имя выбирается произвольно (например, в случае с веб-чатами).

Flussonic позволяет решить эти проблемы с помощью создания префикса публикации (publishing location), где можно указать настройки сразу для множества потоков.

Динамическое имя означает, что полное имя потока формируется из предварительно настроенного префикса публикации и заранее не известного имени, определенного во внешнем приложении.

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

template chats {
  prefix chats;
  input publish://;
}

Здесь chats — это префикс публикации. Все потоки, опубликованные под префиксом chats, будут иметь настройки, которые вы укажете в директиве template. Чтобы узнать подробнее об опциях и настройках потока см. Flussonic Media Server API.

В директиве template вы можете указать несколько префиксов, чтобы создать несколько мест публикации. Вы также можете указать пустой префикс ("") для публикации потока с любым префиксом или даже вообще без префикса. См. подробнее в разделе Шаблоны и префиксы.

URL для публикации по разным протоколам

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

  • RTSP: rtsp://FLUSSONIC-IP/template_name/stream_name
  • HTTP MPEG-TS: http://FLUSSONIC-IP/template_name/stream_name/mpegts
  • RTMP: rtmp://FLUSSONIC-IP/template_name/stream_name. Особенности URL для RTMP см. на странице Публикация по RTMP.
  • SRT: srt://FLUSSONIC-IP:SRT_PORT?streamid=#!::m=publish. Публикация по SRT с динамическим именем поддерживается только для такого формата URL, т.е. когда задан отдельный порт для потока или группы потоков.
  • WebRTC: http://FLUSSONIC-IP:PORT/template_name/stream_name/whip.

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

Проверка публикации

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

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

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

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

Публикация нового RTMP-потока на сервер

Подробнее о формировании URL для публикации по RTMP читайте на странице Публикация по RTMP.

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

Некоторые клиенты могут публиковать видео по 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

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

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

Публикация по SRT

Вы можете использовать ffmpeg, чтобы протестировать публикацию:

/opt/flussonic/bin/ffmpeg -re -i PATH_TO_VIDEO -c copy -y -f mpegts 'srt://FLUSSONIC-IP:SRT_PORT?pkt_size=1316&streamid=#!::r=STREAM_NAME,m=publish'

, где:

  • FLUSSONIC-IP — IP-адрес сервера Flussonic.
  • SRT_PORT — порт SRT.
  • STREAM_NAME — имя потока.
  • m=publish — режим публикации.

Также можно публиковать поток и из другого стороннего ПО с поддержкой SRT, например OBS Studio:

OBS srt

Публикация по WebRTC

Для проверки публикации по WebRTC можно опубликовать видео с веб-камеры или воспользоваться демо-приложением.

Защита публикации паролем

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

template chats {
    prefix chats;
    password mypass;
    input publish://;
}
stream published {
    password secure;
    input publish://;
}

Примеры для проверки публикации:

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

    rtmp application: rtmp://192.168.2.3/live

    stream name: mystream?password=mypass

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

http://192.168.2.3:80/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:80/s1?password=secure

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

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

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

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

template recorded {
  prefix recorded;
  input publish://;
  dvr /storage 3d 500G;
}

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

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

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

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

Для перепубликации потока, используйте push с шаблоном (%s):

Danger

Мы не рекомендуем использовать push по протоколу UDP, поскольку это может привести к коллизии.

template pushed {
  prefix pushed;
  input publish://;
  push rtmp://CDN-SERVER:1936/mylive/%s;
}

При такой настройке для перепубликации потока pushed/mystream будет использоваться следующий адрес: rtmp://CDN-SERVER/client43/pushed/mystream.

Переключение источников, timeout

Правила переключения источников в соответствии с их приоритетом и состоянием (работает поток или нет) распространяются и на публикуемые источники. Поэтому можно добавить в поток с публикуемым источником другие, альтернативные, источники и переключаться на них по timeout.

Если источник публикации недоступен, по умолчанию Flussonic сразу переключается на следующий источник. Но можно и указывать свой timeout.

Пример с несколькими источниками и timeout источников:

stream published {
    source_timeout 3;
    input publish://;
    input file://vod/bunny.mp4;
}

Timeout можно указать и для каждого источника:

stream published {
    input publish:// source_timeout=3;
    input file://vod/bunny.mp4 source_timeout=2;
}

Запрещение публикации и событие publish_forbidden в логах

Когда источник input publish:// ниже приоритетом, чем остальные указанные источники потока, то это может значить, что публикация фактически не произойдет. Вы можете запрещать публикацию и вновь разрешать ее, изменив приоритет источников. Это можно сделать и во время трансляции.

Если публикация невозможна, Flussonic генерирует событие publish_forbidden. Например, это событие возникнет при следующей конфигурации, если файл stub.mp4 существует и успешно проигрывается:

stream published {
    source_timeout 3;
    input file://vod/bunny.mp4;
    input publish://;
}

Чтобы разрешить публикацию, поместите источник публикации перед файлом.