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