Skip to content

Кластерное транскодирование

Механизм cluster ingest можно использовать не только для захвата видео из источника, но и для других сценариев, таких как транскодирование, запись архива (DVR) или отправка видео на другие серверы (например, Youtube). В каждом из этих сценариев каждый поток будет работать на одном из пиров, и если какой-либо пир выйдет из строя, потоки на нем будут полностью отключены, а другие пиры перезахватят эти потоки и будут выполнять с ними необходимые действия. В частности, механизм cluster ingest может быть очень полезен для транскодирования.

Пример сценария

Предположим, что у нас есть два сервера Flussonic (граббера), которые захватывают спутниковое видео с 200 каналами с головной станции IPTV DVB. Далее чересстрочное видео конвертируется в прогрессивное с помощью четырех других серверов Flussonic (транскодеров), объединенных в кластер, и наконец рассылается по сети. Мы будем использовать опцию cluster_ingest для отказоустойчивого транскодирования всех каналов и определения того, какой пир будет выполнять транскодирование того или иного канала.

Настройка грабберов

Давайте настроем грабберы так, чтобы каждый из них захватывал половину телевизионных каналов. В конфигурации каждого граббера будет настроено 100 потоков для захвата соответствующих телевизионных каналов:

  • grabber1: потоки 1-100
  • grabber2: потоки 101-200

Конфигурация каждого потока будет выглядеть следующим образом:

stream dvb01 {
    input mpts-dvb://a1?program=1000;
}

Настройка транскодеров

Транскодеры будут перезахватывать потоки с грабберов, так что на вход каждого из них придет по 50 потоков.

  • transcoder1: потоки 1-50
  • transcoder2: потоки 51-100
  • transcoder3: потоки 101-150
  • transcoder4: потоки 151-200

Чтобы объединить транскодеры кластер, добавим в конфигурацию каждого из них директиву cluster_key:

cluster_key abcd;
peer transcoder1;
peer transcoder2;
peer transcoder3;
peer transcoder4;

Здесь и далее мы предполагаем, что все серверы имеют действительные и разрешимые имена хоста.

Затем в конфигурацию каждого транскодера мы добавим по 50 потоков. Настройки всех этих потоков будут одинаковыми (за исключением имени перезахватываемого потока с граббера):

stream dvb01 {
  input m4f://grabber1/dvb01;
  transcoder vb=1k deinterlace=true ab=128k;
  cluster_ingest;
}

Если не использовать опцию cluster_ingest в конфигурации потоков, все транскодеры будут перезахватывать потоки и обрабатывать их одновременно. Но если какой-либо транскодер выйдет из строя, его потоки вообще не будут транскодироваться и зрители не смогут смотреть некоторые программы.

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

Имейте в виду, что при перераспределении потоков от нерабочего транскодера нагрузка на другие транскодеры может возрасти. Например, если все четыре транскодера работают одновременно, каждый из них может быть загружен примерно на 60-70 %, но если один из них выйдет из строя, нагрузка на остальные транскодеры вырастет до 90 %. Это следует принимать во внимане при выборе емкостей серверов для транскодирования.