December 20, 2022

Собственный рестрим сервис на базе Oracle Cloud Free Tier и Ant Media Server

Предыстория.

Как вы наверное знаете, на своих стримах я постоянно сетую на пинг до серверов GoodGame и скачущее соединение, посему, я решил основательно заняться этим вопросом и первым делом позвонил своему провайдеру, дабы поменять тариф. Но не тут-то было, ребята меня обломали, сказав, что в моём доме это максимум, а чтобы было лучше, надо менять все провода в доме. Что конечно странно, ведь предыдущий провайдер сам предлагал мне переход на новый тариф, правда совсем за другие деньги.

Учитывая, что каналов у меня в последнее время наплодилось много, встал вопрос о рестрим сервисе на 5+ исходящих потоков. Решения нашлось два. Первое - Aircast, рестриминговый сервис, захватывающий один из ваших потоков, например на твитч, и ретранслирующий его на остальные каналы. Здорово то, что ты можешь просто стримить на твитч через свой OBS, а сервис сам подхватит и отправит куда ты ему сказал, даже настройки в OBS менять не придётся. Стоит это удовольствие 5 британских фунтов в месяц(или 50 за год), что очень даже по-божески. Но мы не ищем лёгких путей, экономим как можем, и оставили данный вариант про запас.

Вторым вариантом, стал Ant Media Server, о котом сегодня и пойдет речь. Давайте сначала разберемся, что это за зверь такой и с чем его едят. Ant Media Server - это программное обеспечение с открытым исходным кодом, которое поддерживает публикацию прямых трансляций с помощью технологий WebRTC и RTMP. А если просто, то это внутренняя начинка рестрим сервиса, вы посылаете поток на сервер, а он его разделяет на другие сервера без потери качества, за счёт мощностей сервера увеличивая исходящий битрейт вашей трансляции. Как это выглядело у меня: я послал 6.5к битрейта на сервер, а он в свою очередь принял и разослал 6к на твитч, 15к на ютуб, 8 на трово, 9 на вк плей и сколько-то там еще на гудгейм. Неплохо правда? Но сами понимаете, что для этого нужна серверная часть, с приличным исходящим каналом, находящийся недалеко от вас, чтобы ваш исходящий битрейт не проседал. Но мне повезло, я очень вовремя наткнулся на на статейку о бесплатных облачных серверах от Oracle.

Oracle Cloud Free Tier - это облачное решение компании Oracle, в котором можно создавать бесплатные (Always Free) сервисы, в том числе и виртуальные машины VPS. Набор Always Free сервисов можно посмотреть на картинке, или тут более подробно.

Главное, что на бесплатном плане, вы можете создать облачный VPS-сервер Ampere с 4 ядрами ЦП и 24 ГБ оперативной памяти. Или несколько его аналогов(2 сервера с 2мя ядрами и 12ю гб оперативы или же 4 с одним ядром и 6ю гб оперативы каждый). Для наших нужд вполне хватит одноядерного сервера, а остальное можно оставить про запас, например повесить сервер тимспика на отдельную машину.

Заранее предупреждаю, что я не претендую на звание лучшего IT-шника всея стриминга и вообще довольно далёк от всего этого. Но попробовал разобраться в 4-х англоязычных гайдах, сделал это и теперь просто делюсь с вами. Если вы эксперт, и в командах есть какие-то ошибки, прошу сообщить об этом в комментариях.

Создание и подготовка сервера

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

Далее, вам предложат выбрать домашний регион сервера(его расположение). Чтобы понять, какой именно домашний регион вам выбрать, можно воспользоваться данным ресурсом. Лично мне больше всего подошел Франкфурт. Чем ниже значение Latency, тем лучше.

После регистрации в облаке Oracle войдите в панель управления. Для начала нажмите кнопку "Создаyние экземпляра ВМ", после чего вы будете перенаправлены на страницу настройки. При желании вы можете изменить имя экземпляра. Заполните пустые поля, выбрав любое имя.

Затем перейдите к разделу "Образ и шаблон конфигурации", нажмите кнопку "Изменить образ" и выберите Canonical Ubuntu 20.04 (ни в коем случае не выше).

Затем, чуть ниже тыкаем "Change Shape" и выбираем Armpere c 1им ядро и 6-ю ГБ оперативки(оперативка выберется сама).

В разделе "Сети" надо выбрать "Создайте новую виртуальную облачную сеть". Имя сети и подсети на ваш выбор. Общедоступный IPv4 нужен обязательно, ибо к серверу нам потом еще и подключаться надо будет.

В следующем разделе выбираем "Вставить открытые ключи".

Для того, чтобы получить ключ, вам потребуется программа PuTTy, скачать ее можно тут. Устанавливаем программу, и открываем PuTTYgen. Заходим во вкладку "Key" и выбираем SSH-2 DSA Key (это важно, на другие типы ключей Oracle может ругаться).

Далее тыкаем Generate и начинаем водить курсором мышки внутри окна программы(клавиши нажимать не надо). Ключ сгенерирован, сохраните оба варианта через кнопки "Save private key" и "Save public key".

Копируем получившийся ключ и вставляем в поле "Ключи SSH" на сайте. Далее, проверьте стоит ли галочка в поле "Использовать шифрование при пересылке" и нажимаем "Создать".

Может случиться так, что места на создание вашей виртуальной машины нет, и тогда придётся либо подождать, либо попробовать в самом первом поле "Размещение" поменять домен доступности. Попробуйте потыкать домены по очереди. Только каждый раз проверяйте галочку "Использовать шифрование при пересылке", так как она отваливается каждый раз при смене домена.

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

Общедоступный IP-адрес вам потребуется для подключения к вашему серверу, но сначала нужно будет открыть пару портов, для подключения к Ant Media, который мы установим чуть позже.

Нажимаем на вашу виртуальную облачную сеть.

Затем тыкаем на "Списки безопасности" и "Default Security List for названиевашейсети".

Нажимаем на кнопку "Добавить правила для входящего трафика" и поочерёдно добавляем 2 правила для IP 0.0.0.0/0.

Правило 1:

  • TCP: 1935
  • TCP: 5080
  • TCP: 5443
  • TCP: 5000-65000

Правило 2:

  • UDP: 50000-60000

Выглядеть это будет примерно так (это пример создания первого правила, второе сделайте по аналогии, только в диапазон пишите 50000-60000, а IP-протокол выбирайте UDP):

На этом создание и подготовка сервера завершены. Переходим к следующему пункту.

Установка и настройка Ant Media Server

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

Открываем PuTTy, во вкладке Session, в поле Host name вставляем скопированный Общедоступный IP-адрес(где его взять смотри выше).

Заходим в SSH > Auth > Credintials, нажимаем кнопку "Browse..." и выбираем сохранённый вами ранее ключ в формате .ppk.

Нажимаете "Open" и открывается SSH-клиент с командной строкой. Нажмите на кнопку "Connect once". Затем, в строке "login as:" введите ubuntu и нажмите клавишу Enter. Далее нам потребуется несколько команд, для расширения наших полномочий.

Получите доступ суперпользователя, введя эту команду:

sudo -i

Затем обновите все приложения, установленные на данный момент на сервере:

sudo apt update -y

Теперь вам нужно перейти на страницу Ant Media Server на GitHub. Скопируйте ссылку на ZIP-файл последней версии приложения. Вы должны загрузить его на сервер, используйте эту команду для загрузки файла.

Пример команды для загрузки версии 2.5.1.

wget https://github.com/ant-media/Ant-Media-Server/releases/download/ams-v2.5.1/ant-media-server-community-2.5.1.zip

Также необходимо скачать скрипт установки.

wget https://raw.githubusercontent.com/ant-media/Scripts/master/install_ant-media-server.sh

И дать права доступа 755 к файлу сценария.

chmod 755 install_ant-media-server.sh

Теперь вы можете запустить скрипт установки. Сначала найдите загруженный файл Ant Media с помощью этой команды. Она показывает вам файлы, доступные в рабочем каталоге.

ls

Скопируйте имя zip-файла и вставьте его в конце этой команды (вы должны заменить имя файла, если устанавливаете другую версию). Введем эту команду, чтобы начать установку. Процесс может занять несколько минут.

sudo ./install_ant-media-server.sh -i ant-media-server-community-2.5.1.zip

Установка завершена. Теперь нужно ввести команду, которая изменяет настройки IP. Дело в том, что Oracle настраивают таблицу IP-адресов внутри экземпляров ВМ(Внешний IP предоставляется через NAT, плюс ко всему имеется файрволл, который блокирует все порты кроме 22). Но так как порты мы уже пробросили, остается только "закрепить результат". Введите эту команду, чтобы с айпишниками всё было "ок".

iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F && sudo netfilter-persistent save

Вы изумительны! Осталось дело за малым, настроить установленный Ant Media Server.

Настройка Ant Media Server

Мы успешно завершили установку. Теперь войти в пользовательский интерфейс Ant Media, введя свой общедоступный IP-адрес (IP-адрес сервера) сервера через порт 5080. Смело открываем любимый браузер и вводим

http://serverip:5080

где serverip заменяем на общедоступный IP-адрес.

При первом входе на сервер Ant Media необходимо создать учетную запись администратора с учетными данными. Регистрируемся.

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

Насладившись сим эпохальным зрелищем и оглянувшись назад, вы поймёте, что уже совсем близко завершению. Нажимаем на APLICATIONS > LiveApp, тыкаем кнопку New Live Stream и затем Live Stream, переходим в панель создания прямой трансляции.

Называем стрим как вашей душеньке угодно и жмём кнопку "Create".

Тыкаем на значок справа и затем, в выпадающем меню на "Edit RTMP Endpoints".

Теперь нам нужно создать URL-адрес RTMP для каждой платформы. Они все примерно одного формата, я покажу вам примеры из Twich, Trovo и YouTube.

Twitch. Сначала вам нужно выбрать сервер в зависимости от вашего местоположения. Можно посетить данную страницу и получить ссылку на ближайший сервер, но как по мне лучше воспользоваться данной утилитой.

Открываем, нажимаем Get Key, в открывшейся странице настроек Твича копируем ключ трансляции и вставляем в программку. В поле TCP Window size выбираем Automatic(OBS), а в поле Test Duration - хотя бы Medium (30 sec) если очень лень ждать, но лучше больше. Ставим галочку Europe(если вы в Европе конечно) и жмём Test. ждём окончания проверки всех серверов и затем выбираем один из тех, что показывает маленький RTT, 10000+ Brandwith и Quality 100. Если таких серверов несколько, то выбираем с наименьшим RTT. У меня например пражский сервер 100 качества не выдаёт, а посему выбираем один из Франкфуртских(ведь мой сервер на который я шлю поток и откуда он будет раздаваться тоже стоит во Франкфурте).

Например вам понравился сервер Франкфурт 2, заходим на сайт https://twitchstatus.com, листаем вниз и находим там наш сервер. Копируем адрес сервера.

Возвращаемся в Ant Media Server и в открытом поле вводим наш сервер в виде RTMP ссылки.

Пример Twitch RTMP показан ниже, где {stream_key} - ключ вашей трансляции который вы можете получить на в своем твитч аккаунте в разделе Панель управления автора > Настройки > Трансляция (ну или открыть через утилиту)

rtmp://fra02.contribute.live-video.net/app/{stream_key}

Выглядеть это будет так. Жмём на кнопку "Add RTMP Endpoint".

Окошко не закрываем, а просто таким же способом добавляем остальные RTMP, например Trovo. Открываем Творческая студия > Трансляция, забираем ссылку на ретрансляцию и ключ трансляции.

И по аналогии добавляем в Ant Media(вставляем ссылку на ретрансляцию и затем без пробелов за ней ключ трансляции, жмём "Add RTMP Endpoint").

Ну и куда же без всеми любимого нами Ютубчика, но с ним есть один косяк, хотя наверное каждый ютубовский стример уже с этим сталкивался. На ютубе каждый раз надо создавать новую трансляцию, менять описание и т.д, но вместе с описанием и трансляцией меняется и ключ трансляции. Но мы можем создать ключ трансляции заранее. Для этого при создании новой трансляции или использовании шаблона старой в разделе "Ключ трансляции", выберете "Создать ключ трансляции".

Далее наводим лоск - называем трансляцию, ставим галочку "Выбрать частоту кадров", выбираем разрешение и галочку "Включить частоту кадров 60 кадров в секунду" и жмём "Создать".

После чего ключ автоматом выбирается и мы можем забирать из него данные для RTMP и по аналогии вставляем в Ant Media.

Обратите внимание, что при создании новой трансляции вам просто надо будет выбрать этот ключ трансляции из списка.

Добавляем все ключи в список, после чего он будет выглядеть примерно так.

Нажимаем "Close". Мои поздравления, настройка Ant media завершена.

Настройка OBS

Вот мы и подошли к самому главному - настройке стриминговой программы. Для этого нам необходимо в Ant Media получить ключ трансляции и адрес сервера. Нажимаем на крайний правый значок и выбираем "Copy Publish URL".

Открываем наш OBS, заходим в настройки, раздел "Трансляция" и в поле "Сервис" выбираем "Настраиваемый...". Вставляем в в поле "Сервер" наш Publish URL и получаем вот такую картину.

Далее выделяем и вырезаем из этой строки ключ трансляции(всё что находится после LiveApp/) и вставляем его в "Ключ потока".

Нажимаем кнопку "Применить". Остаётся только проверить настройки Вывода, т.к. после изменения сервиса они сбрасываются. Я стримлю через видеокарту, поэтому мои настройки выглядят так.

Кодировщик - NVIDEA NVVENC H.264

Управление битрейтом - CBR (постоянный)

Битрейт - 6500 kbps (потому что отдача у меня максимум 10 ммегабит)

Интервал ключевых кадров - 2 (2 ставится если вы играете во что-то активное, 0 - для героем меча и магии, цивилизации и прочих пошаговых игр).

Предустановка - P6: Медленнее (лучшее качество)(действительно по тестам лучшее, если у вам не карта 4000 серии, но там и кодек новый доступен так-то)

Регулировка - Высокое качество

Многопроходный режим - Двойной проход (четверть разрешения)

Профиль - Main (можете ставить и High, если не стримите на GoodGame и ресурсов не жалко)

Из галочек стоит только "Психовизуальная корректировка".

GPU - 0

Максимум B-кадров - 2

Вот собственно и всё, можно запускать стрим. Ant Media Server сделает всё остальное и раздаст максимум доступного битрейта на каждую из площадок. Единственное что хочу уточнить, ни в коем случае на стримьте всякий пиратский контент и не устанавливайте на сервер Oracle пиратское ПО, типа самопальных серверов майнкрафта, ибо так вы очень быстро потеряете свой восхитительный сервер. Зато, покопавшись в настройках вы сможете легко сделать 24/7 радио с No Copyright или с вашей собственной авторской музыкой, например.

Спасибо за внимание, надеюсь данный гайд будет кому-то полезен.