Представим ситуацию: Олег — fullstack разработчик, работающий на Windows, и его новая задача — разработать клиент-серверное приложение для стриминга. Если быть точнее, то для захвата RTSP-камер. Можно, конечно, поднять сервер в облаке, но тогда к дебагу возможных проблем с клиентским кодом или настройкам сервера добавляется дебаг проблем с каналом, поэтому тестирование в локальной сети удобнее, в том числе, потому что это бесплатно. Или можно использовать Docker, но тогда добавляются другие сложности: из-за проблем с сетью, Docker на Windows непригоден к использованию, а обходной путь — запуск Docker в виртуальной машине — слишком усложняет работу.
Что делать в таком случае? Оптимальный вариант — использовать WSL, а вот как именно, мы расскажем (и покажем) на примере Web Call Server (WCS), который поможет нам при конвертации RTSP-потоков в WebRTC.
WCS устанавливается только на Linux-систему и в случае, если бы мы тестировали на Linux, схема выглядела бы так:
Но в случае с Windows и WSL, схема будет выглядеть так:
Как Windows начал с Linux дружить
В 2016 году мир познакомился с подсистемой Windows для Linux, или просто — WSL. Первая версия не особо понравилась пользователям, т.к. принцип работы заключался в эмуляции вызовов ядра Linux путем включения специального слоя, который в режиме реального времени транслировал системные вызовы Linux в системные вызовы Windows, что приводило к некоторым сложностям (например, не работало все, что было завязано на POSIX-таймеры реального времени). Вторая версия понравилась публике больше: она является полноценной виртуальной машиной с ядром Linux. Именно ее мы будем использовать далее.
Установка WSL
Для установки WSL 2 вы должны работать под управлением Windows 10 версии 2004 и выше (сборка 19041 и выше) или Windows 11.
Для начала проверим, какие дистрибутивы доступны. Открываем командную строку от имени администратора и выполняем следующую команду:
wsl --list --online
По умолчанию устанавливается Ubuntu 20.04 и если вас это устраивает, то можете просто ввести:
wsl --install
Мы же будем устанавливать Ubuntu 18.04:
wsl --install -d Ubuntu 18.04
В случае успешной установки, необходимо задать имя пользователя и пароль, а также перезагрузить систему:
После перезагрузки ПК, авторизируемся и обновляем установленные пакеты:
sudo apt-get update sudo apt-get upgrade -y
Установка JDK
Любую из поддерживаемых версии можно установить из репозиториев или вручную, в зависимости от того, доступны пакеты в используемом дистрибутиве или нет. Например, в Ubuntu 18.04 JDK 8 доступна в репозиториях:
sudo apt-get install –y openjdk-8-jdk
А вот с JDK 14 придется повозиться и установить вручную. Скачиваем:
sudo rm -rf jdk* curl -s https://download.java.net/java/GA/jdk14.0.1/664493ef4a6946b186ff29eb326336a2/7/GPL/openjdk-14.0.1_linux-x64_bin.tar.gz | tar -zx [ ! -d jdk-14.0.1/bin ] && exit 1
Подготавливаем установочную папку:
sudo mkdir -p /usr/java [ -d /usr/java/jdk-14.0.1 ] && sudo rm -rf /usr/java/jdk-14.0.1
Перемещаем файлы JDK в созданную папку:
sudo mv -f jdk-14.0.1 /usr/java [ ! -d /usr/java/jdk-14.0.1/bin ] && exit 1
Создаем симлинк /usr/java/default:
sudo rm -f /usr/java/default sudo ln -sf /usr/java/jdk-14.0.1 /usr/java/default
И все остальные:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk-14.0.1/bin/java" 1 sudo update-alternatives --install "/usr/bin/jstack" "jstack" "/usr/java/jdk-14.0.1/bin/jstack" 1 sudo update-alternatives --install "/usr/bin/jcmd" "jcmd" "/usr/java/jdk-14.0.1/bin/jcmd" 1 sudo update-alternatives --install "/usr/bin/jmap" "jmap" "/usr/java/jdk-14.0.1/bin/jmap" 1 sudo update-alternatives --set "java" "/usr/java/jdk-14.0.1/bin/java" sudo update-alternatives --set "jstack" "/usr/java/jdk-14.0.1/bin/jstack" sudo update-alternatives --set "jcmd" "/usr/java/jdk-14.0.1/bin/jcmd" sudo update-alternatives --set "jmap" "/usr/java/jdk-14.0.1/bin/jmap"
Проверяем:
Установка и запуск WCS
Скачиваем WCS:
wget https://flashphoner.com/download-wcs5.2-server.tar.gz -O- | tar -zx
И запускаем установку:
cd FlashphonerWebCallServer-* sudo ./install.sh
Далее — знакомимся с пользовательским соглашением. Необходимо нажимать Enter, пока не появится следующее сообщение:
Затем активируем лицензию:
cd /usr/local/FlashphonerWebCallServer/bin sudo ./activation.sh
И ждем сообщение о завершении активации:
Перед началом работы, необходимо перезапустить WCS:
cd /usr/local/FlashphonerWebCallServer/bin sudo ./webcallserver set-permissions sudo ./webcallserver start
Проверяем статус:
sudo ./webcallserver status
Тестирование
Переходим по ссылке https://localhost:8444/admin/ и вводим имя пользователя: demo, пароль: demo
Далее переходим на вкладку «Player»:
И пробуем опубликовать поток, вставив ссылку в поле “Stream” и нажав на кнопку “Start”. В результате получаем:
Готово! Вы великолепны. Теперь вам не нужно устанавливать вторую ОС и мучаться с виртуальными машинами, чтобы использовать функционал Linux под Windows.