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

Содержание

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

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

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

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

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

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

Flussonic add stream

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

Замечание. По умолчанию создается статический поток. Чтобы поменять тип потока на Cn 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;
  client_timeout 20;
}

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

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

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

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

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

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

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/ort/preview.jpg

MJPEG поток скриншотов доступен по адресу http://flussonic:80/ort/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, при этом нельзя указывать абсолютный путь.

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

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

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

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

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

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

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

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

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

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

Опции файла-заглушки

Заглушка принимает опции:

backup vod/backup-file.mp4 video_timeout=5 audio_timeout=10 timeout=20 dvr=true transcode=true

  • dvr=true — если основной поток пишется в архив, то заглушка будет тоже записываться в архив, если указать эту опцию:

    stream example {
        url udp://239.0.0.1:1234;
        backup vod/bunny.mp4 dvr=true;
        dvr /storage;
    }
    
  • timeout=10 — через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника видеопотока перестанут поступать кадры. Важно, что источник при этом остается запущенным, что позволяет, например, оставаться на сокете клиенту-публикатору.

    Опция рассматривает все виды кадров.

    Flussonic также может переключаться на резервный источник только тогда, когда не поступают кадры определенного типа (видео или аудио), что позволяет лучше управлять переключением, если источник имеет плохое качество. Для разных кадров можно использовать разные интервалы тайм-аута. Чтобы учитывать не любые кадры, а только аудио или видео, используйте опции video_timeout и audio_timeout (см. далее в этом списке).

    Если не указывать timeout специально для заглушки, то в случае отсутствия кадров будет использоваться source_timeout основного источника.

    Комбинируя настройки timeout и source_timeout, можно:

    • задать более долгое время для того, чтобы мобильные клиенты успели начать публикацию и не были отключены
    • при этом переключаться за заглушку как можно скорее.
    Пример:
    stream example {
        url publish:// source_timeout=20;
        url fake://fake;
        backup vod/bunny.mp4 timeout=1;
    }
    

    В этом примере:

    До начала публикации будет воспроизводиться поток fake. Затем подключается клиентское приложение, которое будет публиковать видео на Flussonic. Если после подключения от клиента-публикатора потока так и не пришли кадры в течение 20 секунд, то клиент принудительно отключается и начинает проигрываться fake.

    Затем, когда началась публикация, файл-заглушка backup-file.mp4 начнет проигрываться, если в течение 1 секунды не поступит ни одного кадра от публикуемого потока. Источник публикации при этом пока не отключается.

    При возобновлении кадров от источника поток переключается на клиента-публикатора. Если же в течение 20 секунда кадры не приходят, то публикатор принудительно отключается и начинает проигрываться fake.

  • video_timeout=5 — через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника перестанут поступать видео-кадры.

    Если указать video_timeout, audio_timeout и одновременно timeout основного источника, переключение сработает по таймауту, который наступит быстрее. У этих опций одинаковый приоритет.

  • audio_timeout=10 — через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника перестанут поступать аудио-кадры.

    Если указать audio_timeout, video_timeout и одновременно timeout основного источника, переключение сработает по таймауту, который наступит быстрее. У этих опций одинаковый приоритет.

  • transcode=true — см. Транскодирование файла-заглушки ниже.

Транскодирование файла-заглушки

  • transcode=true — если основной поток транскодируется, то заглушка также будет транскодироваться, если указать эту опцию.

    stream backup_transcode {
        url udp://239.0.0.1:1235;
        source_timeout 5;
        backup vod/bunny.mp4 transcode=true;
        transcoder vb=1000k ab=64k;
    }
    

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

Flussonic fallback file

Подстановки

Иногда заранее неизвестны имена потоков на удаленном сервере, и хочется получать все эти потоки. В этом случае используется специальный тип потока (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 умеет воспроизводить записанный в архив поток с фиксированным отставанием.

Важно! 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 максимально монотонно во времени, чтобы не создавать скачкообразной нагрузки на сеть.

stream ort {
  url tshttp://localhost:80/origin/mpegts;
  push udp://239.0.4.4:1234;
}

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

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

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

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

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