Ретрансляция потоков¶
Flussonic Media Server (рестример) может подключиться к другому Flussonic Media Server (источнику), получить список запущенных и доступных по запросу потоков, а затем рестримить их. Вы также получаете прозрачный доступ к архиву на источнике.
Flussonic Media Server позволяет указать несколько серверов-источников и построить отказоустойчивую конфигурацию.
На этой странице:
- Отличия Flussonic Media Server от HTTP-прокси
- Настройка рестриминга
- Дополнительные настройки
- Настройка нескольких источников
- Обзор протокола M4F
Отличия от HTTP-прокси¶
Многие CDN предлагают решение проблемы доставки видео, используя кластер из обычных HTTP-прокси серверов, которые кешируют сегменты HLS-потока и доставляют их до пользователей.
В отличие от HTTP-прокси, Flussonic Media Server, установленный на все серверы в сети, предоставляет следующие возможности:
- Just-in-time упаковка на рестримере. Получая поток по одному протоколу, рестример может переупаковать этот поток в доступные протоколы на выходе, например, HLS, DASH, RTMP, RTSP, HTTP MPEG-TS или UDP MPEG-TS.
- Единая авторизация пользователей по всем доступным протоколам.
- Централизированная агрегация сессий и сбор статистики.
Главное отличие рестриминга c помощью HTTP-прокси и Flussonic Media Server в том, что с Flussonic Media Server вы доставляете видео между серверами лишь раз, а на выходе получаете всю функциональность Flussonic на рестриминг-сервере. Это нереализуемо на HTTP-прокси, потому что прокси не работает с видео на низком уровне.
Настройка рестриминга¶
Чтобы включить рестриминг в кластере Flussonic Media Server, вам нужно использовать следующие директивы:
source
— чтобы указать сервер, с которого вы хотите рестримить видео.cluster_key
— чтобы Flussonic Media Server мог забрать видео через кластерную авторизацию.
Директива source
имеет следующий синтаксис и опции:
cluster_key abcd;
source streamer:8081 {
}
Вы должны установить одинаковые cluster_key
на источнике и рестримере. Кластерный ключ очень важен и его нужно хранить в секрете, потому что он может быть использован для настройки удаленного сервера. Он передается в виде хэша.
Директива source
включает автоматический захват потоков с сервера источника. В ней потоки можно разделить на несколько списков:
- белый список — эти потоки будут статическими (
static
) на рестримере; - серый список — эти потоки будут доступны на рестримере по запросу (
ondemand
); - черный список — эти потоки не будут видны на рестримере.
По умолчанию все работающие потоки с источника попадают в белый список, а все потоки по запросу с источника будут в сером списке рестримера.
Потоки, указанные в опции except
, помещаются в черный список. Эта опция имеет более высокий приоритет, чем only
.
cluster_key abcd;
source streamer:8081 {
except stream1 football;
}
Опция only
разделяет доступные потоки (кроме тех, что в черном списке) на белый и серый списки: only
– в белый список, остальные не будут статическими и будут ждать запроса для запуска.
Если на сервере-источнике присутствует поток с тем же именем, что и настроенный локально на сервере-рестримере или публикуемый на сервер-рестример, то будет использоваться поток, настроенный локально. Поток с источника будет игнорироваться.
cluster_key abcd;
source streamer:8081 {
only cbc football stream2;
}
С опциями only
и except
можно использовать шаблон поиска по имени потока. Эта возможность упрощает конфигурацию, когда используются live-локации на удаленном сервере, и заранее неизвестны имена потоков. Например, такая конфигурация позволяет захватить все потоки с источника, имена которых начинаются на mylive/
:
cluster_key abcd;
source streamer:8081 {
only mylive/*;
}
Дополнительные настройки¶
Вы можете применить настройки сразу для всех потоков, запущенных через source
:
cluster_key abcd;
source streamer:8081 {
on_play http://IP-ADDRESS:PORT/php-auth-script.php;
backup vod/bunny.mp4;
dvr /storage 2d 97%;
}
source test2:8082 {
on_play http://IP-ADDRESS:PORT/php-auth-script.php;
backup vod/bunny.mp4;
dvr /storage 2d 97%;
}
Такая конфигурация автоматически применится для всех потоков, запущенных на рестримере.
Если у вас на основном сервере используется опция backup
, то вам следует загрузить этот файл на рестример и указать путь:
source origin {
backup vod/bunny.mp4;
}
Если вам необходимо запретить проигрывание по некоторым протоколам, вы можете использовать опцию protocols
внутри директивы source
:
source origin {
protocols -dash -hls -rtmp;
}
В приведенном выше примере доступ к контенту по протоколам DASH, HLS и RTMP запрещён, так что зритель не сможет проиграть поток по этим протоколам.
Чтобы узнать все опции и настройки доступные для source
, обратитесь к Flussonic API Reference.
Настройка нескольких источников¶
Flussonic позволяет указать несколько источников на рестримере. Если у нескольких источников будут одинаковые имена потоков, такой поток будет настроен с несколькими URL. Таким образом, если первый источник упадет или поток на нём пропадет, рестример будет получать поток с другого источника.
При настройке нескольких источников с помощью кластерного захвата, вы можете обеспечить отказоустойчивый кластер.
Обзор протокола M4F¶
Flussonic Media Server по умолчанию использует для рестриминга свой внутренний сегментный протокол M4F.
M4F имеет следующие преимущества:
- Синхронизация потоков между источником и рестримером.
- Сохранение одинаковых временных меток (timestamp) кадров у потоков из источника и из рестримера.
- Получение идентичных полезных данных (payload) при запросе к сегменту потока как из источника, так и из рестримера. Полезные данные идентичны на всех серверах. Все серверы возвращают совместимый ответ.
- Временные метки в UTC.
- Сохранение структуры сегментов потока за счёт побайтовой копии потока из источника для всех протоколов на рестримере;
- Сохранение нумерации сегментов на источнике и рестримере.
- Наличие единой байт-структуры для передачи потоков между серверами и хранения архива. Это обеспечивает идентичность данных передаваемых между серверами по M4F и тех, что записываются в архив.
- Оповещение рестримера о появлении новых сегментов с помощью механизма push-уведомлений. Рестример получает уведомление о наличии нового сегмента и скачивает его по отдельному каналу в меру своих возможностей.
- Предоставление информации об архиве источника рестримеру.
При передаче по протоколу M4F обеспечивается точная передача времени и данных. Протокол поддерживает все те же кодеки, что и Flussonic.
В сравнении с M4F другие протоколы имеют следующие недостатки:
- RTMP ломает временные метки.
- Устройство RTMP и MPEG-TS осложняет синхронизацию временных меток при передаче потоков между серверами.
- RTMP и MPEG-TS не имеют способов синхронизации временных меток потока с реальным текущим временем.
- RTSP имеет механизм синхронизации временных меток потока с реальным текущим временем, но вызывает проблемы с доставкой B-кадров и некоторых кодеков.
M4F даёт абсолютное время каждого кадра с высокой точностью.