Представим ситуацию: Олег — 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.
Для начала проверим, какие дистрибутивы доступны. Открываем командную строку от имени администратора и выполняем следующую команду:
1 | wsl --list --online |
По умолчанию устанавливается Ubuntu 20.04 и если вас это устраивает, то можете просто ввести:
1 | wsl -- install |
Мы же будем устанавливать Ubuntu 18.04:
1 | wsl -- install -d Ubuntu 18.04 |
В случае успешной установки, необходимо задать имя пользователя и пароль, а также перезагрузить систему:
После перезагрузки ПК, авторизируемся и обновляем установленные пакеты:
1 2 | sudo apt-get update sudo apt-get upgrade -y |
Установка JDK
Любую из поддерживаемых версии можно установить из репозиториев или вручную, в зависимости от того, доступны пакеты в используемом дистрибутиве или нет. Например, в Ubuntu 18.04 JDK 8 доступна в репозиториях:
1 | sudo apt-get install –y openjdk-8-jdk |
А вот с JDK 14 придется повозиться и установить вручную. Скачиваем:
1 2 3 | 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 |
Подготавливаем установочную папку:
1 2 | sudo mkdir -p /usr/java [ -d /usr/java/jdk-14 .0.1 ] && sudo rm -rf /usr/java/jdk-14 .0.1 |
Перемещаем файлы JDK в созданную папку:
1 2 | sudo mv -f jdk-14.0.1 /usr/java [ ! -d /usr/java/jdk-14 .0.1 /bin ] && exit 1 |
Создаем симлинк /usr/java/default:
1 2 | sudo rm -f /usr/java/default sudo ln -sf /usr/java/jdk-14 .0.1 /usr/java/default |
И все остальные:
1 2 3 4 5 6 7 8 | 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:
1 | wget https: //flashphoner .com /download-wcs5 .2-server. tar .gz -O- | tar -zx |
И запускаем установку:
1 2 | cd FlashphonerWebCallServer-* sudo . /install .sh |
Далее — знакомимся с пользовательским соглашением. Необходимо нажимать Enter, пока не появится следующее сообщение:
Затем активируем лицензию:
1 2 | cd /usr/local/FlashphonerWebCallServer/bin sudo . /activation .sh |
И ждем сообщение о завершении активации:
Перед началом работы, необходимо перезапустить WCS:
1 2 3 | cd /usr/local/FlashphonerWebCallServer/bin sudo . /webcallserver set -permissions sudo . /webcallserver start |
Проверяем статус:
1 | sudo . /webcallserver status |
Тестирование
Переходим по ссылке https://localhost:8444/admin/ и вводим имя пользователя: demo, пароль: demo
Далее переходим на вкладку «Player»:
И пробуем опубликовать поток, вставив ссылку в поле “Stream” и нажав на кнопку “Start”. В результате получаем:
Готово! Вы великолепны. Теперь вам не нужно устанавливать вторую ОС и мучаться с виртуальными машинами, чтобы использовать функционал Linux под Windows.