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 {
  input 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 рядом с названием потока.

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

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

Потоки по запросу (on-demand)

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

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

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

Flussonic ondemand

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

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

ondemand ipcam1 {
  input rtsp://localhost:554/source;
  retry_limit 10;
  clients_timeout 20;
}

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

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

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

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

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

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

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

stream example {
  input 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 {
  input tshttp://10.0.4.5:9000/channel/5;
  backup vod/bunny.mp4;
}

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

Warning

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

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

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

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

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

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

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

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

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

Подстановки

Иногда имена потоков на удалённом сервере заранее неизвестны. В таких случаях возникает необходимость вычислить URL источника (input) на основании запрашиваемого потока. Для этого воспользуйтесь специальной возможностью шаблонов (template) по подстановке имени:

template nsk {
  prefix nsk;
  input rtsp://streamer:555/%s;
}
template ams {
  prefix ams;
  input hls://streamer:8081/%s/index.m3u8;
}

Если в шаблоне в URL источника есть паттерн %s, то вместо этого паттерна будет подставлена часть имени потока, следующая за префиксом (prefix) шаблона. Иначе говоря, часть URL запрашиваемого клиентом потока, предшествующая префиксу prefix, включая и сам префикс, отбрасывается и оставшаяся часть подставляется в URL источника.

Например, при запросе потока по такому URL: http://FLUSSONIC-IP/ams/ort/index.m3u8, Flussonic будет отдавать поток из источника со следующим URL: hls://streamer:8081/ort/index.m3u8, т.е. часть http://FLUSSONIC-IP/ams/ "отрезается", а оставшаяся часть ort/index.m3u8 подставляется в URL источника input.

Как это использовать?

Например, вещать каналы с разных серверов для зрителей разных регионов, т.е. для каждого региона — свой сервер. Это поможет обеспечить быструю и оптимальную доставку контента до зрителя.

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

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

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

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

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

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

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

Warning

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

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

stream channel {
  input fake://fake;
  dvr /storage 90% 5d;
}
stream channel-2h {
  input timeshift://channel/7200;
}

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

Flussonic timeshift

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

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

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

stream example_stream {
  input tshttp://localhost:80/origin/mpegts;
  push udp://239.0.4.4:1234;
}

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

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

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

Warning

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

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

stream cam1 {
  input rtsp://localhost:554/origin tracks=1;
}

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

stream cam1 {
  input rtsp2://localhost:554/origin;
}

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

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

stream cam1 {
  input 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 умеет обнаруживать низкий уровень звука (отсутствие звука) на источнике входного потока и оповещать об этом. Подробнее в разделе Обнаружение тишины.