Облачный WebRTC стриминг на DigitalOcean


    Известный облачный хостинг DigitalOcean с недавних пор обзавелся собственным магазином с готовыми образами, из которых можно быстро развернуть какой-либо сервер приложений. Совсем, как AWS, только DO, для тех, кто уже пользуется услугами этого провайдера. Давайте посмотрим, как, имея аккаунт DO, развернуть простой сервер за 10$ в месяц для стриминга WebRTC на базе Flashphoner WebCallServer, и чем такой сервер может быть полезен.


    Развертывание


    Входим в аккаунт на DO, переходим по ссылке к образу Flashphoner WebCallServer и нажимаем кнопку "Create Flashphoner Web Call Server Droplet"



    Выбираем характеристики севера и тарифный план. По умолчанию, DO предложит нам что-нибудь из среднего сегмента, но нас интересует минимальная стоимость



    Выбираем регион размещения датацентра, например, Франкфурт



    Выбираем способ аутентификации, например, одноразовый пароль



    Указываем количество серверов (пока нас интересует один сервер) и даем нашему серверу имя. Это имя будет записано, в том числе, в /etc/hostname



    Нажимаем "Create droplet"



    После создания сервер автоматически запустится. Можно подключиться к нему по SSH и, если был в качестве способа аутентификации был выбран одноразовый пароль, сменить пароль. В консоль будет выведено краткое описание Flashphoner WebCallServer со ссылками на документацию



    "Это тест. Меня видно?"


    Flashphoner WebCallServer запускается полностью готовым к работе, 30-дневная ознакомительная лицензия активируется автоматически. Для тестирования всех основных функций есть веб-интерфейс, мы ограничимся проверкой публикации и проигрывания WebRTC потока.


    Открываем в браузере страницу https://droplet_ip:8444/admin/. По умолчанию с сервером поставляется self-signed сертификат, поэтому придется подтвердить исключение безопасности. В дальнейшем можно заменить сертификаты на собственные. Вводим имя и пароль (по умолчанию demo)



    Выбираем в боковой панели пример Two-Way Streaming, нажимаем кнопку "Connect", затем "Publish". Для проигрывания потока нажимаем "Play"



    За пригоршню долларов


    На что же способен сервер за 10$ в месяц в качестве аппаратной платформы для WebRTC стриминга? Посмотрим, что нам предлагает DigitalOcean по процессору


    lscpu


    и по памяти


    free -h


    Проверяя сервер нагрузочными тестами, видим, что сервер может не так уж и мало.


    Например, опубликуем один экземпляр потока и посмотрим, сколько подписчиков одновременно могут проиграть это поток, занимая не более 90% процессора:


    Разрешение Битрейт, кбит/с Количество публикаций Количество подписчиков
    360p 1300 1 70
    480p 1800 1 70
    720p 3000 1 50

    При нескольких одновременных публикациях максимальное количество обрабатываемых потоков остается на том же уровне: если опубликовать 7 потоков, на каждый могут подписаться до 10 зрителей.


    Допустим, нам нужно транскодировать поток на сервере, чтобы уменьшить разрешение или выровнять FPS. Для этого случая проверим максимальное количество публикаций:


    Разрешение Битрейт, кбит/с Количество потоков
    360p 1300 5
    480p 1800 3
    720p 3000 2

    Таким образом, сервер минимальной стоимости на DO с параметрами 1 CPU core, 2 Gb RAM, 2 TB трафика в месяц пригоден не только для тестирования WebRTC стриминга, но и для использования в небольших проектах. Например, можно:


    • раздавать по WebRTC поток с IP-камеры для простейшего внутрикорпоративного видеонаблюдения;
    • организовать вебинар для сотрудников небольшой компании
    • поднять свое интернет-радио (аудиопоток требует меньше ресурсов процессора)

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


    "Я достойна большего!"


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


    Количество подписчиков vCPUs RAM, Gb Трафик, TB Пример использования
    до 200 4 8 5 Система видеонаблюдения
    до 500 8 16 6 Вебинары
    до 1000 16 64 9 Видеочат
    до 2000 20 96 10 Стриминг HD видео

    Если планируется дальнейший рост, придется развернуть CDN из расчета 1 Edge сервер на 2000 подписчиков. Предположим, нам требуется раздавать HD видео, планируемое число зрителей 10000. В этом случае потребуется 2 Origin сервера для публикации и 5 Edge серверов для просмотра.



    Пример настройки:


    • Origin 1

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

    • Origin 2

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

    • Edge 1 — Edge 5 (здесь меняется только адрес сервера в параметре cdn_ip)

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

    CDN также может быть полезной, если подписчики распределены географически, например, наши потенциальные зрители проживают в Европе и Америке.



    Пример настройки:


    • Origin EU

    cdn_enabled=true
    cdn_ip=origin_eu.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=origin
    cdn_groups=EU

    • Origin US

    cdn_enabled=true
    cdn_ip=origin_us.flashponer.com
    cdn_point_of_entry=origin_eu.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=origin
    cdn_groups=US

    • Edge 1 EU

    cdn_enabled=true
    cdn_ip=edge1_eu.flashphoner.com
    cdn_point_of_entry=origin_eu.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=edge
    cdn_groups=EU

    • Edge 1 US

    cdn_enabled=true
    cdn_ip=edge1_us.flashphoner.com
    cdn_point_of_entry=origin_eu.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=edge
    cdn_groups=US

    Чем больше зрителей, тем больше разнообразие устройств для проигрывания и каналов до этих устройств. Чтобы обеспечить качество трансляции на различные устройства, скорее всего, потребуется транскодинг видео, который можно возложить на специальные Transcoder серверы CDN.



    Пример настройки:


    • Origin

    cdn_enabled=true
    cdn_ip=origin.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=origin
    cdn_groups=default

    • Transcoder EU

    cdn_enabled=true
    cdn_ip=transcoder_eu.flashponer.com
    cdn_point_of_entry=origin.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=transcoder
    cdn_groups=EU

    • Edge 1 EU

    cdn_enabled=true
    cdn_ip=edge1_eu.flashphoner.com
    cdn_point_of_entry=origin.flashponer.com
    cdn_nodes_resolve_ip=false
    cdn_role=edge
    cdn_groups=EU

    Для транскодирования, как мы выяснили во время теста, важно количество процессорных ядер. Из линейки конфигураций CPU-optimized больше всего подходит самая дорогая 32 vCPU, 64 Gb RAM. При этом в других линейках близкие по количеству CPU конфигурации с большим объемом памяти могут быть существенно дороже. К сожалению, сэкономить на транскодерах не получится: поскольку видео кодируется покадрово, памяти должно хватать под все картинки, а процессоров под обработку всех потоков.


    При развертывании CDN, пригодится одновременное создание нескольких серверов одной и той же конфигурации. Однако, для географически распределенной CDN однотипные Edge и Transcoder серверы нужно будет разместить в разных датацентрах.


    Заключение


    Итак, мы развернули и протестировали небольшой сервер для стриминга WebRTC видео с низкой задержкой на DigitalOcean, убедились, что сервер в минимальной конфигурации пригоден не только для тестирования, но и для использования в небольших проектах, получили данные для масштабирования в зависимости от предполагаемого числа зрителей, а также коснулись темы развертывания CDN, которая сама по себе заслуживает отдельной статьи. Оставайтесь с нами, продолжение следует...


    Ссылки


    Flashphoner WebCallServer на DigitalOcean Marketplace — готовый образ Web Call Server в DigitalOcean.


    CDN для стриминга WebRTC с низкой задержкой — сеть доставки контента на базе Web Call Server.

    • +10
    • 2,4k
    • 2
    Flashphoner
    64,12
    Компания
    Поделиться публикацией

    Комментарии 2

      0
      а каким боком здесь разработка под iOS?
        0
        статья про бэкенд, в общем-то, причем достаточно специализированный. мобильному приложению для публикации видео бэкенд, скорее всего, понадобится. поэтому размещение в мобильных хабах выглядит разумным.

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

      Самое читаемое