Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

CDN на базе WCS-серверов может быть организована двумя способами:

  1. Статическая CDN, набор узлов в которой жестко определяется на этапе настройки, и для изменения конфигурации CDN необходимо перезапустить сервер(а), которые являются источниками потоков в данной сети. Такая CDN 1.0 организуется на базе функции балансировки нагрузки.
  2. Динамическая CDN, набор узлов в которой может изменяться на ходу. Для включения/исключения узла из такой CDN достаточно перезапустить только этот узел.

В данном разделе рассмотрим динамическую CDN на базе Web Call Server 5.1.

Описание

Принципы работы динамической CDN

Распределенная динамическая сеть доставки контента (CDN) на базе WCS 5.1 работает следующим образом:

  1. При запуске сервера запускается специальный CDN-модуль. Модуль отправляет запрос к серверу, указанному как точка входа в CDN, для получения от него списка других серверов в CDN и списка доступных потоков. Если точка входа не указана, либо указанный сервер недоступен, модуль ожидает извещения от какого-либо другого сервера в CDN (например, если этот сервер уже был добавлен в список CDN-серверов на другом сервере, или указан как точка входа). В результате каждый активный CDN-сервер в каждый момент времени имеет актуальный список всех остальных CDN-серверов.
  2. Все взаимодействие между узлами CDN производится по Websocket.

Роли серверов в CDN

Сервер может иметь одну из двух ролей
1. Origin: служит источником потоков для других серверов в CDN. Может раздавать как опубликованные на нем потоки, так и потоки, которые он забирает с других серверов.
2. Edge: может забирать потоки с Origin-серверов, при этом не раздает свои (локальные) потоки другим сереврам.
При этом потоки не раздаются принудительно, Edge-сервер забирает определенный поток с Origin только по запросу пользователя из браузера или мобильного приложения.

Схема работы

  1. Браузер соединяется с Origin сервером по протоколу Websocket и отправляет команду publish.
  2. Браузер захватывает микрофон и камеру и отправляет WebRTC поток на сервер.
  3. Второй браузер устанавливает соединение с Edge3 сервером по Websocket и отправляет команду play.
  4. Edge3 сервер запрашивает поток у Origin сервера
  5. Edge3 сервер получает WebRTC поток.
  6. Второй браузер получает WebRTC поток и воспроизводит этот поток на странице.

Принципы идентификации потоков в CDN

Имя потока уникально для каждого WCS-сервера (и однозначно идентифицирует поток), но не для CDN в целом. Таким образом, существует два ограничения:

  1. Если на сервере опубликован поток с таким же именем, как у потока, уже опубликованного на каком-либо Origin-сервере, то при воспроизведении на этом сервере будет воспроизводиться локальный (не CDN) поток.
  2. При воспроизведении CDN-потока на этом сервере не может быть опубликован поток с таким же именем. То же имя может быть использовано для публикации только после остановки воспроизведения и удаления pull-агента по истечении таймаута проверки активности (по умолчанию 1 минута).

Настройка

Параметры файла настроек

Для настройки CDN  используются следующие основные параметры файла настроек flashphoner.properties (полный список см в описании файла настроек):

Параметр

Значение по умолчанию

Тип

Описание

cdn_enabled

false

Boolean

Включить/отключить CDN

cdn_ip

Empty

String

Адрес сервера в CDN

cdn_nodes_resolve_ip

false

Boolean

Разрешать имена серверов в IP-адреса

cdn_point_of_enry

Empty

String

Адрес сервера-точки входа в CDN для данного сервера

cdn_port

8084

Int

Номер порта для CDN

cdn_role

edge

String

Роль сервера в CDN:

origin - источник потоков для других серверов в CDN

edge - может получать потоки с других серверов

Примеры конфигурации

Пример минимальной конфигурации

Два сервера: Origin (origin.flasphoner.com) и Edge (edge.flasphoner.com)

Настройки Origin:

cdn_enabled=true
cdn_ip=origin.flashponer.com
cdn_nodes_resolve_ip=true
cdn_role=origin


Настройки Edge:

cdn_enabled=true
cdn_ip=edge.flashphoner.com
cdn_nodes_resolve_ip=true
cdn_point_of_entry=origin.flashponer.com
cdn_role=edge

Пример конфигурации с двумя Origin-серверами

Четыре сервера: Origin1 (origin1.flasphoner.com), Origin2 (origin2.flasphoner.com) и Edge1 (edge1.flasphoner.com), Edge2 (edge2.flasphoner.com)

Настройки Origin1:

cdn_enabled=true
cdn_ip=origin1.flashponer.com
cdn_nodes_resolve_ip=true
cdn_role=origin


Настройки Origin2:

cdn_enabled=true
cdn_ip=origin2.flashponer.com
cdn_point_of_entry=origin1.flashponer.com
cdn_nodes_resolve_ip=true
cdn_role=origin


Настройки Edge1:

cdn_enabled=true
cdn_ip=edge1.flashphoner.com
cdn_point_of_entry=origin1.flashponer.com
cdn_nodes_resolve_ip=true
cdn_role=edge


Настройки Edge2:

cdn_enabled=true
cdn_ip=edge2.flashphoner.com
cdn_point_of_entry=origin1.flashponer.com
cdn_nodes_resolve_ip=true
cdn_role=edge

Использование CLI

Получение информации о текущем состояниии CDN из командной строки WCS производится следующими командами:

Команда

Описание

Пример результата

show cdn-nodes

Отображает список узловых серверов в CDN:

ACTIVE - сервер запущен, отвечает на запросы и/или рассылает извещения

PASSIVE - сервер остановлен или недоступен


Ip                       State        
---------------------------------
edge1.flashphoner.com    ACTIVE   
edge2.flashphoner.com    ACTIVE   
origin2.flashphoner.com  PASSIVE

show cdn-routes

Отображает список активных потоков в CDN


Route                       Stream     
------------------------------------
1-origin2.flashphoner.com-2 stream1
0-origin2.flashphoner.com-0 stream2
2-origin1.flashphoner.com-1 stream1

Согласование кодеков на Origin и Edge серверах

Для того, чтобы избежать излишнего транскодирования при ретрансляции потоков, необходимо согласовывать настройку кодеков на Origin и Edge серверах.
Рассмотрим следующую схему работы CDN, предназначенной для ретрансляции потока с веб-камеры и RTMP-кодировщика:


1. Ретрансляция потока, захваченного из браузера Chrome

1.1. Origin принимает поток H.264+Opus с Chrome.
1.2. Edge забирает с Origin поток по WebRTС H.264+Opus, на Origin нет транскодинга.
1.3. Зритель забирает с Edge поток:
1.3.1. по H.264+Opus, на Edge нет транскодинга;
1.3.2. по H.264+AAC, на Edge транскодинг Opus > AAC.

2. Ретрансляция потока, захваченного c RTMP-кодировщика

2.1. Origin принимает поток H.264+AAC с RTMP стримера.
2.2. Edge забирает с Origin поток по WebRTС H.264+Opus, на Origin транскодинг AAC > Opus.
2.3. Зритель забирает с Edge поток:
2.3.1. по H.264+Opus, на Edge нет транскодинга;
2.3.2. по H.264+AAC, на Edge транскодинг Opus > AAC.

Для работы такой CDN необходимо в файле flashphoner.properties настроить кодеки следующим образом:

на Origin сервере

codecs=opus,mpeg4-generic,alaw,ulaw,g729,g722,telephone-event,h264,vp8,flv,mpv
# включаем транскодинг, чтобы отдавать на Edge только Opus
disable_rtc_avoid_transcoding_alg=true


на Edge сервере

codecs=opus,mpeg4-generic,alaw,ulaw,g729,g722,telephone-event,h264,vp8,flv,mpv
#удаляем aac с cdn, чтобы забирать с Origin только Opus
codecs_exclude_cdn=flv,telephone-event,mpeg4-generic

Краткое руководство по тестированию

Подготовка к тестированию

1. Для тестирования используем:

  • два WCS сервера;
  • веб-приложение Two Way Streaming для публикации потока
  • веб-приложение Player для воспроизведения потока.

Настройка WCS

2. Для тестирования настройте CDN в минимальной конфигурации: один Origin и один Edge-сервер

Настройки Origin:

cdn_enabled=true
cdn_nodes_resolve_ip=true
cdn_ip=origin.flashphoner.com
cdn_role=origin


Настройки Edge:

cdn_enabled=true
cdn_nodes_resolve_ip=true
cdn_point_of_entry=origin.flashphoner.com
cdn_ip=edge.flashphoner.com
cdn_role=edge


Здесь origin.flashphoner.com и edge.flashphoner.com - примеры имен WCS-серверов
Перезапустите Origin и Edge-серверы. Войдите в интерфейс командной строки Edge-сервера, авторизуйтесь и введите команду

show cdn-nodes


Результат выполнения команды будет следующим:

> show cdn-nodes
Ip                  State
---------------------------
origin.flashphoner.com ACTIVE


Запуск трансляции с веб-камеры на Origin-сервер

3. Откройте веб-приложение Two Way Streaming на Origin-сервере. Нажмите кнопку Connect и укажите имя транслируемого потока testCDN:


4. Нажмите кнопку Publish. Начнется трансляция потока с веб-камеры:


Воспроизведение потока на Edge-сервере

5. Откройте веб-приложение Player на Edge-сервере. Укажите имя потока, транслируемого на Origin-сервер, testCDN:


6. Нажмите кнопку Start. Начнется воспроизведение потока testCDN:


7. В интерфейсе командной строки Edge-сервера введите команду

show cdn-routes


Результат выполнения команды будет следующим:

> show cdn-routes
Route                   Stream
--------------------------------
0-origin.flashphoner.com-0 testCDN


Остановка трансляции с веб-камеры на Origin-сервер

8. Нажмите кнопку Stop на странице публикации потока. Публикация остановится:


При этом на странице воспроизведения Edge-сервера проигрывание потока также остановится с вывоом сообщения "Stopped by publisher stop"

Известные проблемы

1) Изменение настройки кодеков на Edge сервере может приводить к возрастанию нагрузки на сервер в результате включения транскодинга

Симптомы: при ретрансляции большого количества потоков возрастает нагрузка на CPU Edge-сервера
Решение: согласовать настройку кодеков на Origin и Edge серверах таким образом, чтобы исключить излишнее включение транскодинга

Например, если в настройке Origin сервера указан следующий набор кодеков:

codecs=opus,mpeg4-generic,alaw,ulaw,g729,g722,telephone-event,h264,vp8


а в настройке Edge сервера - такой

codecs=opus,speex16,mpeg4-generic,g729,g722,h264,vp8


то при ретрансляции потока на Edge сервере включается транскодирование звука в Speex16 или AAC, что при большом количестве потоков существенно увеличивает нагрузку на CPU сервера


  • No labels