CDN на базе WCS-серверов может быть организована двумя способами:
В данном разделе рассмотрим динамическую CDN на базе Web Call Server 5.1.
Распределенная динамическая сеть доставки контента (CDN) на базе WCS 5.1 работает следующим образом:
Сервер может иметь одну из двух ролей
1. Origin: служит источником потоков для других серверов в CDN. Может раздавать как опубликованные на нем потоки, так и потоки, которые он забирает с других серверов.
2. Edge: может забирать потоки с Origin-серверов, при этом не раздает свои (локальные) потоки другим сереврам.
При этом потоки не раздаются принудительно, Edge-сервер забирает определенный поток с Origin только по запросу пользователя из браузера или мобильного приложения.
Имя потока уникально для каждого WCS-сервера (и однозначно идентифицирует поток), но не для CDN в целом. Таким образом, существует два ограничения:
Для настройки 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 |
Четыре сервера: 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 |
Получение информации о текущем состояниии CDN из командной строки WCS производится следующими командами:
Команда | Описание | Пример результата | |
---|---|---|---|
show cdn-nodes | Отображает список узловых серверов в CDN: ACTIVE - сервер запущен, отвечает на запросы и/или рассылает извещения PASSIVE - сервер остановлен или недоступен |
| |
show cdn-routes | Отображает список активных потоков в CDN |
|
Для того, чтобы избежать излишнего транскодирования при ретрансляции потоков, необходимо согласовывать настройку кодеков на 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. Для тестирования используем:
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 |
3. Откройте веб-приложение Two Way Streaming на Origin-сервере. Нажмите кнопку Connect и укажите имя транслируемого потока testCDN:
4. Нажмите кнопку Publish. Начнется трансляция потока с веб-камеры:
5. Откройте веб-приложение Player на Edge-сервере. Укажите имя потока, транслируемого на Origin-сервер, testCDN:
6. Нажмите кнопку Start. Начнется воспроизведение потока testCDN:
7. В интерфейсе командной строки Edge-сервера введите команду
show cdn-routes |
Результат выполнения команды будет следующим:
> show cdn-routes Route Stream -------------------------------- 0-origin.flashphoner.com-0 testCDN |
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 сервера