Skip to content

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

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

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

Отличия от HTTP прокси

Многие CDN предлагают решение проблемы доставки видео, используя кластер из обычных HTTP-прокси серверов, которые кешируют сегменты HLS потока и доставляют их до пользователей.

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

  • вы получаете не только HLS, но и DASH, RTMP, RTSP, HTTP MPEG-TS, и UDP MPEG-TS;
  • единая авторизация пользователей по всем доступным протоколам;
  • централизированная агрегация сессий и сбор статистики.

Главное отличие между обычным HTTP прокси и рестримингом на Flussonic Media Server в том, что вы доставляете видео между серверами лишь единожды, а на выходе получаете весь функционал Flussonic Media Server на рестриминг сервере.

Это нереализуемо на HTTP прокси, потому что он не работает с видео на низком уровне.

Конфигурация

Чтобы включить рестриминг в кластере Flussonic Media Server, вам нужно использовать следующие директивы:

  • source — чтобы указать сервер, с которого вы хотите рестримить видео.
  • cluster_key — чтобы Flussonic Media Server мог забрать видео через кластерную авторизацию.

Директива source имеет следующий синтаксис и опции:

cluster_key abcd;
source streamer:8081 {
}

Вы должны установить одинаковые cluster_key на источнике и рестримере. Кластерный ключ очень важен и его нужно хранить в секрете, потому что он может быть использован для настройки удаленного сервера. Он не передается в открытом виде, только хэш.

Директива source включает автоматический захват потоков с сервера источника. В ней потоки можно разделить на несколько списков:

  • белый список — эти потоки будут статическими (static) на рестримере;
  • серый список — эти потоки будут доступны на рестримере по запросу (ondemand);
  • черный список — эти потоки не будут видны на рестримере.

По умолчанию все работающие потоки с источника попадают в белый список, а все потоки по запросу с источника будут в сером списке рестримера.

Опция except помещает потоки в черный список. Эта опция имеет более высокий приоритет, чем only.

source streamer:8081 {
  cluster_key abcd;
  except stream1 football;
}

Flussonic cluster restreaming

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

Flussonic cluster restreaming

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

cluster_key abcd;
source streamer:8081 {
  only cbc football stream2;
}

С опциями only и except можно использовать шаблон поиска по имени потока. Эта возможность упрощает конфигурацию, когда используются live-локации на удаленном сервере, и заранее неизвестны имена потоков. Например, такая конфигурация позволяет захватить все потоки с origin, имена которых начинаются на 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;
}

Несколько источников

Можно указать несколько источников на рестримере. Если у нескольких источников будут одинаковые имена потоков, такой поток будет настроен с несколькими URL.

Это значит, что если первый источник упадет или потеряет поток, рестример переключит поток на другой источник.

Когда настроено несколько источников с помощью кластерного захвата, вы получаете действительно высокодоступный кластер.

Протокол M4F

Flussonic Media Server по умолчанию использует для рестриминга свой внутренний сегментный протокол M4F.

Этот протокол гарантирует следующие возможности:

  • потоки между источником и рестримером хорошо синхронизированы;
  • одинаковые таймстампы кадров;
  • одинаковое тело;
  • нет короткого счетчика таймстапов, как в MPEGTS или RTMP: все таймстампы в UTC;
  • сохраняет такую же структуру сегментов, делая byte-to-byte копию с источника для всех протоколов на рестримере;
  • сохраняет одинаковыми номера сегментов на источнике и рестримере;
  • имеет такую же байт-структуру, как формат хранения архива на диске;
  • умеет слать пуш-уведомления клиенту о появлении новых данных;
  • предоставляет рестримеру информацию об архиве источника.

Таким образом, при передаче по протоколу M4F точно передаются время и данные. Протокол поддерживает все те кодеки, что и Flussonic.

Наш протокол M4F имеет ряд преимуществ по сравнению с HLS или RTMP:

  • RTMP имеет только миллисекундную точность таймстампов, и он ломает таймстампы;
  • RTMP имеет лишь 24 (или 32 бита) таймер миллисекунд, MPEG-TS дает 33 бита для таймера, основанного на 90Khz. Это значит, что сложно синхронизировать время между источником и рестримером;
  • RTMP и MPEG-TS не имеют способов синхронизации времени потока и реального времени;
  • RTSP имеет механизм синхронизации времени потока и реального времени, но имеет проблемы с доставкой B-кадров и некоторых кодеков;
  • У M4F достаточно места, чтобы сохранить реальное время в 90khz, давая абсолютное время каждого кадра с высокой точностью.