Skip to content

Ретрансляция потоков

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

Flussonic Media Server позволяет указать несколько серверов-источников и построить отказоустойчивую конфигурацию.

На этой странице:

Отличия от 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;
}

Flussonic cluster restreaming

Опция only разделяет доступные потоки (кроме тех, что в черном списке) на белый и серый списки: only – в белый список, остальные не будут статическими и будут ждать запроса для запуска.

Flussonic cluster restreaming

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

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 даёт абсолютное время каждого кадра с высокой точностью.