Skip to content

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 example_stream {
  url udp://239.0.0.1:1234;
}

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

  • example — это имя потока, по которму можно обратиться к Flussonic Media Server и получить его.
  • udp://239.0.0.1:1234 — URL источников.

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

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

Перейдите на вкладку Media и нажмите Add рядом со Streams.

Flussonic add stream

Введите название потока и URL адрес источника. После этого нажмите Create, и созданный поток появится в списке.

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

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

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

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

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

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

ondemand ipcam {
  url rtsp://localhost:554/source;
}

Flussonic ondemand

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

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

ondemand ipcam {
  url rtsp://localhost:554/source;
  retry_limit 10;
  clients_timeout 20;
}

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

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

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

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

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

stream example {
  url fake://fake;
  thumbnails;
}

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

stream example {
  url rtsp://localhost:554/source;
  thumbnails url=http://examplehost:5000/snapshot;
}

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

Flussonic JPEG thumbnails

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

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

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

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

Если поток недоступен, можно запустить на проигрывание файл — резервный источник видео, указанный через backup <VOD location>. Так можно делать для любых live-потоков, включая публикуемые.

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

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

Caution

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

По умолчанию, файл-заглушка не пишется в архив и не транскодируется. Но это можно настроить.

Подробнее о разных способах использования файлов как запасных источников потока рассказано в разделе Переключение источников.

Чем 'backup' отличается от 'url file://'

В отличие от переключения источников с опцией url file://<VOD location>, при использовании заглушки технически не происходит переключения на другой источник. Это особенно полезно при публикации видео на Flussonic, чтобы не заставлять публикующего клиента переподключаться при каждом сбое связи.

Файл-заглушка, указанная через backup <VOD location>, по умолчанию не транскодируется и не пишется в архив, если вы не настроили иначе. Файловый источник url file://<VOD location> будет всегда записываться в архив.

Когда стоит применять backup вместо url file://:

  • При плохом соединении с публикующим видео клиентом Flussonic продолжает принимать кадры, не обрывая соединение с клиентом. Это позволяет клиенту не обрывать сеанс публикации и не начинать его снова. При перебоях зрители видят файл-заглушку, и понимают, что трансляция ещё не окончена.

  • Когда все источники работают со сбоями, из-за чего Flussonic часто переключается между ними, лучше показывать файл-заглушку. Если же указать файл как ещё один источник, то зрители увидят его только после того, как истекут таймауты для каждого из сбоящих источников.

  • Если вы записываете основной поток в архив, но не хотите записывать в архив проигрывание файла, чтобы в дальнейшем файл не попал в просмотр.

  • С помощью таймаутов потока и заглушки можно гибко управлять переключением источников в процессе публикации.

Подробнее об использовании файлов как запасных источников потока, см. в разделе Переключение источников.

Подстановки

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

rewrite nsk/* {
  url rtsp://streamer:555/%s;
}
rewrite ams/* {
  url hls://streamer:8081/%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 умеет воспроизводить записанный в архив поток с фиксированным отставанием.

Warning

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

Для таймшифта есть отдельная схема источника — timeshift://:

stream channel {
  url tshttp://trancoder-5:9000/;
  dvr /storage 90% 5d;
}
stream channel-2h {
  url timeshift://channel/7200;
}

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

Flussonic timeshift

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

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

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

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

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

stream cam1 {
  url rtsp://localhost:553/bunny.mp4;
  rtp udp;
}

Caution

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

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

stream cam1 {
  url rtsp://localhost:553/bunny.mp4 tracks=1;
}

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

stream cam1 {
  url rtsp2://localhost:553/bunny.mp4;
}

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

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

stream cam1 {
  url fake://fake;
  add_audio_only;
}

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

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

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

DRM в live-потоках

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

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

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

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