Live — потоковое вещание¶
Flussonic Media Server умеет ретранслировать потоковое видео, перепаковывая его на лету в разные форматы. Это означает, что вы можете захватить MPEG-TS поток и раздавать его одновременно тысячам получателей, например, в DASH или HLS, и публиковать в RTMP на YouTube.
Flussonic Media Server поддерживает три типа потоков:
static
— постоянно живущие (транслируемые).ondemand
— потоки, транслируемые по запросу.live
– публикуемые пользователем. См. Публикация
Содержание:
- Статические потоки
- Потоки по запросу (ondemand)
- Проигрывание потоков
- Скриншоты потока
- Файл-заглушка 'backup' для потока
- Чем заглушка 'backup' отличается от 'input file://'
- Подстановки
- Запись потоков (DVR)
- Сдвиг по часовой зоне (Timeshift)
- Выдача потока в UDP multicast
- Настройки потоков для IP камер наблюдения
- Включение audio-only варианта HLS
- Захват потока с другого сервера Flussonic Media Server
- DRM в 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.
Введите название потока и URL адрес источника. После этого нажмите Create, и созданный поток появится в списке.
Замечание. По умолчанию создается статический поток. Чтобы поменять тип потока на On demand, кликните по Static рядом с названием потока.
Поток создан. Теперь можно перейти на страницу потока для проверки захвата:
Потоки по запросу (on-demand)¶
Если поток нужен не всё время, а только по требованию пользователя, можно указать Flussonic Media Server отключать его при неиспользовании и включать по запросу.
Для указания такого типа потока надо заменить stream
на ondemand
:
ondemand ipcam {
input rtsp://localhost:554/source;
}
Важно. Если между источником и репитером используется 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 с потоком скриншотов можно найти в документации к вашей модели камеры.
Последний скриншот потока доступен по адресу http://flussonic:80/example/preview.jpg
MJPEG поток скриншотов доступен по адресу http://flussonic:80/example/preview.mjpeg
Читайте также:
- Скриншоты о JPEG-скриншотах.
- Видео-скриншоты об MP4-скриншотах, экономящих ресурсы.
Файл-заглушка для потока¶
Если поток недоступен, можно запустить на проигрывание файл — резервный источник видео, указанный через 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;
}
Отставание указывается в секундах.
Выдача потока в 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 умеет обнаруживать низкий уровень звука (отсутствие звука) на источнике входного потока и оповещать об этом. Подробнее в разделе Обнаружение тишины.