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 8 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

Удаление остановленных серверов из списка узлов

По умолчанию, остановленный или недоступный сервер будет отображаться в списке узлов CDN в статусе PASSIVE до тех пор, пока он вновь не будет запущен, либо вся CDN не будет остановлена. При необходимости, может быть установлен интервал, по истечении которого неактивный узел будет удаляться из списка. Интервал задается в секундах при помощи параметра в файле настроек flashphoner.properties, например

cdn_nodes_timeout=60

В данном случае неактивные узлы будут удаляться из списка через 60 секунд.

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

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

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

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 с RTMP стримера:
2.1.1 звук в AAC без транскодинга:
2.1.2 звук в Speex с транскодингом в AAC.
2.2. Edge забирает с Origin поток по WebRTС H.264+AAC.
2.3. Зритель забирает с Edge поток:
2.3.1. по H.264+Opus, на Edge транскодинг AAC > Opus;
2.3.2. по H.264+AAC, на Edge нет транскодинга.

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

на Origin сервере

необходимо создать файл flash_handler_publish.sdp

v=0
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=42e01f;packetization-mode=1
a=sendonly
m=audio 0 RTP/AVP 108
a=rtpmap:108 mpeg4-generic/48000/1
a=sendonly

на Edge сервере

необходимо в файле flashphoner.properties указать

codecs_exclude_cdn=alaw,ulaw,g729,speex16,g722,telephone-event,flv

и создать файл flash_handler_play.sdp

v=0
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=42e01f;packetization-mode=1
a=recvonly
m=audio 0 RTP/AVP 108
a=rtpmap:108 mpeg4-generic/48000/1
a=recvonly

Использование только Opus

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

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

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

2.1. Origin принимает поток H.264 с RTMP стримера:
2.1.1 звук в AAC с транскодингом в Opus:
2.1.2 звук в Speex с транскодингом в Opus.
2.2. Edge забирает с Origin поток по WebRTС H.264+Opus.
2.3. Зритель забирает с Edge поток по H.264+Opus, на Edge нет транскодинга.

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

на Origin сервере

оставить настройки кодеков по умолчанию

на Edge сервере

необходимо в файле flashphoner.properties указать

codecs_exclude_cdn=alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,flv

Использование только AAC

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

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

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

2.1. Origin принимает поток H.264 с RTMP стримера:
2.1.1 звук в AAC без транскодинга:
2.1.2 звук в Speex с транскодингом в AAC.
2.2. Edge забирает с Origin поток по WebRTС H.264+AAC.
2.3. Зритель забирает с Edge поток по H.264+AAC, на Edge нет транскодинга.

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

на Origin сервере

необходимо создать файл flash_handler_publish.sdp

v=0
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=42e01f;packetization-mode=1
a=sendonly
m=audio 0 RTP/AVP 108
a=rtpmap:108 mpeg4-generic/48000/1
a=sendonly

на Edge сервере

необходимо в файле flashphoner.properties указать

codecs_exclude_cdn=opus,alaw,ulaw,g729,speex16,g722,telephone-event,flv

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

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

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