Spreed WebRTC бесплатный сервер для видеоконференций
В настоящее время возник бум web-конференций и различных вебинаров. В некоторых компаниях возникла потребность во внутрисетевых видеозвонках. И на первый план вышли не технологии видеозвонков через различные видеосервисы, а бесплатный проект от Google под названием WebRTC (Real-time communication). Вся прелесть этой технологии в том, что она поддерживается прямо из браузера. Все современные браузеры её поддерживают в той или иной форме. У меня она работает в браузерах: Firefox, Chrome, Opera и Safari. Теоретически должна работать в новой версии браузера Edge от Microsoft, но у меня до сих пор руки не дошли это проверить.
На этом фоне возникла мысль о том, что раз всё так просто, то должны быть бесплатные реализации как локальной, так и серверной части. Хотя данная технология имеет такую особенность, что трафик идет непосредственно между точками. Но сервер, всё-же, необходим, так как должен быть центр для инициализации звонков и координации трафика. А сам трафик идет по технологии точка-точка. Среди имеющихся реализаций мне понравились WCS (Web Call Server) и Spreed WebRTC. О втором я хочу рассказать подробнее.
Устанавливать его будем на Debian 10 (Buster). Сначала обновим систему и потом установим сопутствующие приложения.
su apt update apt upgrade apt install wget git build-essential golang-go nodejs autoconf -y
Далее скачиваем и устанавливаем сервер Spreed WebRTC.
git clone https://github.com/strukturag/spreed-webrtc.git cd spreed-webrtc ./autogen.sh ./configure --prefix=/usr time make make install
Странно, что установщик сам этого не делает, но нам не сложно. Создадим каталог для конфигурации, копируем шаблон конфигурации и переходим в каталог с конфигурацией. Путь источника отредактируйте в зависимости от имени вашего пользователя.
mkdir -p /etc/spreed-webrtc-server cp /home/user/spreed-webrtc/server.conf.in /etc/spreed-webrtc-server/server.conf cd /etc/spreed-webrtc-server
Теперь осталось сконфигурировать под наши нужды. А нужды у нас следующие:
- Порт для работы HTTPS: 8443
- Указываем место где лежит web-интерфейс
- Указываем место где хранится файл с сертификатами
Современные браузеры позволяют работать с WebRTC исключительно по шифрованному каналу, по этому обычный HTTP у нас не заведётся. Указываем порт для сервера TCP/8443. Многие шлюзы в корпоративных сетях его открывают, а домашние роутеры тем более его пропускают. Можно отредактировать руками, а можно и обычными командами из консоли.
sed -i 's|listen = 127.0.0.1:8080|;listen = 127.0.0.1:8080|g' "/etc/spreed-webrtc-server/server.conf" sed -i 's|;root =.*|root = /usr/share/spreed-webrtc-server/www|g' "/etc/spreed-webrtc-server/server.conf" sed -i 's|;certificate = server.crt|certificate = server.crt|g' "/etc/spreed-webrtc-server/server.conf" sed -i 's|;key = server.key|key = server.crt|g' "/etc/spreed-webrtc-server/server.conf"
Обратите внимание, что сертификат ключа и приватный ключ хранятся в одном файле. Если у вас нет сертификатов, то придется генерировать самоподписаные, либо воспользоваться бесплатным. Ну или просто купить сертификат подписанный в доверенном центре сертификации. Не забывайте, что скоро Google и Apple откажутся принимать сертификаты со временем жизни больше одного года. Сгенерировать сертификат можно самостоятельно, но замените моё доменное имя на то к которому будут обращаться ваши пользователи.
openssl req -new -x509 -days 1095 -nodes -subj "/C=RO/ST=Test/L=Tester/O=HQT/CN=test.orcinus.ru" -keyout server.crt -out server.crt chmod 400 server.crt
Незабудьте установить права на сертификат. И оповестите пользователей, что браузер ругается на самоподписаные сертификаты и
Скрипт для автоматической загрузки выглядит вот так:
cat >> /etc/init.d/webrtcserver << 'EOF' #!/bin/sh ### BEGIN INIT INFO # Provides: spreed-webrtc-server # Required-Start: $remote_fs $syslog $networking # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Spreed WebRTC # Description: WebRTC audio/video call and conferencing server and web client # More information at https://github.com/strukturag/spreed-webrtc # Author: TeHashX / contact@hqt.ro # Version: 1.1 ### END INIT INFO CONF="/etc/spreed-webrtc-server/server.conf" test -f "/usr/sbin/spreed-webrtc-server" || exit 0 spreed_running=`ps ax | grep "spreed-webrtc-server" | awk '{ print $1 }' | wc -l` case "$1" in start) if [ "$spreed_running" -gt 1 ]; then echo "Spreed Webrtc Server already running..." exit 0 fi echo -n "Starting Spreed Webrtc Server: " cd /etc/spreed-webrtc-server/ /usr/sbin/spreed-webrtc-server -c=$CONF & >/dev/null 2>&1 echo "done" sleep 5 exit 0 ;; stop) if [ "$spreed_running" -eq 1 ]; then echo "Spreed Webrtc Server is not running (no process found)..." exit 0 fi echo -n "Killing Spreed Webrtc Server: " # Trying to kill the Spreed Webrtc Server ps ax | grep "spreed-webrtc-server" | awk '{ print $1 }' | xargs kill >/dev/null 2>&1 sleep 1 echo "done" ;; restart) sh $0 stop sh $0 start ;; status) if [ "$spreed_running" -gt 1 ]; then echo "Spreed Webrtc Server running." else echo "It seems that Spreed Webrtc Server isn't running (no process found)." fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0 EOF
Теперь надо дать права на исполнение.
chmod +x /etc/init.d/webrtcserver
Положить этот скрипт можно куда угодно. Если потребуется положить в автозагрузку, то зарегайте в автозагрузке, я же его запускаю руками только в то время когда он нужен.
/etc/init.d/ ./webrtcserver start
Теперь можно запускать и использовать.
Тэги: ИТ
Отредактировано:2020-09-04 13:49:13