Часть 2: Как реализовать WebRTC с помощью JavaScript и Node.js в Backend
Учебники из этой серии
- Понимание WebRTC
- Реализация WebRTC в коде (это руководство)
В предыдущем руководстве мы узнали об основах WebRTC.
Эта статья изначально была опубликована на сайте Simple Coding
В этом руководстве мы узнаем, как реализовать эти концепции в коде и создать веб-сайт для онлайн-видеоконференций.
Живая демонстрация
Вы можете увидеть и использовать веб-сайт в действии по указанной ниже ссылке. Вам просто нужно ввести название комнаты, чтобы создать комнату или присоединиться к ней.
Примечание:-
- В настоящее время веб-сайт поддерживает только 2 человек в комнате.
видео
Вы также можете посмотреть следующее видео, чтобы узнать, как пользоваться этим сайтом.
Требования
Если вы не читали предыдущее руководство, настоятельно рекомендуется прочитать его перед тем, как приступить к этому руководству.
Мы будем использовать следующее: -
- Node.Js (версия 12.14.1) - среда выполнения для JS
- Socket.IO (версия 1.2.0) - для сигнализации в WebRTC
- Express.Js: (версия 4.17.1) - BackEnd Framework
- Редактор кода (рекомендуется Microsoft Visual Studio Code)
- Хороший браузер (рекомендуется Google Chrome)
Мы будем использовать Node.Js с Express.Js Framework для бэкэнда. Если вы не знакомы с Node.Js и Express.Js, но знаете любую другую платформу MVC, НЕ БОЛЬШЕ. Мы постарались объяснить так, чтобы вы могли понять, даже если вы никогда не работали с Node.Js и Express.Js
Шаг 1. Настройка проекта
Начнем с настройки проекта.
Шаг 1.1. Скачать Node.Js
- Вы можете скачать Node.Js для своей платформы, щелкнув ссылку это. При загрузке Node.Js на ваш компьютер автоматически устанавливается NPM (Диспетчер пакетов узлов). NPM - это менеджер пакетов по умолчанию для Node.Js
Шаг 1.2. Создайте проект узла
- Создать новую папку. Эта папка будет корневым каталогом для нашего проекта.
- Откройте в этой папке терминал / CMD и выполните команду
npm init
. - Непрерывно нажимайте
Enter Key
, чтобы пропустить дополнительные конфигурации для проекта, и напишитеYES
при появлении запроса. - Это создаст файл
package.json
в корневом каталоге проекта. Этот файл будет содержать всю необходимую информацию о нашем проекте, такую как зависимости проекта.
Шаг 1.3. Установка зависимостей
- В терминале выполните следующую команду. Он установит зависимости - Express.JS и socket.IO в наш проект.
npm install [email protected] [email protected] --save
- Флаг
--save
сохранит имя и версии этих зависимостей вpackage.json
для дальнейшего использования. - После завершения выполнения указанной выше команды вы увидите папку
node_modules
, созданную в корневом каталоге проекта. Эта папка содержит только что установленные зависимости.
На этом мы закончили настройку проекта. Ниже представлена структура проекта на данном этапе.
Шаг 2. Создание BackEnd
Давайте теперь приступим к написанию кода для бэкэнда. Прежде чем мы начнем, давайте пересмотрим несколько моментов из предыдущего урока.
- Нам нужен бэкэнд-сервер для сигнализации.
- Определенная информация - информация о кандидате (сетевая) и медиакодеки должны быть обменены между двумя одноранговыми узлами, прежде чем между ними может быть установлено прямое соединение с помощью WebRTC.
- Сигнализация относится к механизму, с помощью которого два одноранговых узла обмениваются этой информацией.
Вышеупомянутые моменты говорят нам, что мы должны реализовать механизм, с помощью которого два клиента (браузера) могут отправлять сообщения друг другу. Для этого воспользуемся Socket.IO. Socket.IO подходит для изучения сигналов WebRTC благодаря встроенной концепции «комнат». Давайте сначала обсудим, что такое Socket.IO
Socket.IO
- Socket.IO состоит из двух частей -
client Library
&server Library
. Очевидно, чтоclient library
используется на стороне клиента, аserver library
используется на стороне сервера. - Socket.IO помогает реализовать следующее. Допустим, к серверу подключены четыре клиента. Когда сервер получает новое сообщение от одного клиента, он должен уведомить всех остальных клиентов, а также переслать это сообщение другому клиенту. Это похоже на групповой чат.
- В Socket.IO каждое сообщение, отправленное на сервер или полученное с сервера, связано с событием. Итак, если клиент отправляет сообщение на сервер о конкретном событии, сервер пересылает это сообщение только тем клиентам, которые прослушивают это соответствующее событие.
- Есть несколько зарезервированных мероприятий. Однако мы также можем определять пользовательские события. Чтобы узнать о зарезервированных мероприятиях, вы можете перейти по ссылке эта.
- Кроме того, клиенты могут присоединиться к комнате и попросить сервер отправить сообщение только тем клиентам, которые присоединились к определенной комнате.
Теперь, когда мы обсудили Socket.IO, мы можем приступить к реализации внутреннего сервера.
Шаг 2.1. Создайте файл index.js
- В платформе Express
index.js
по умолчанию является отправной точкой для нашего сервера. Итак, создайте файл index.js на корневом уровне нашего проекта.
Шаг 2.2. Создайте общую папку и папку просмотров
- Создайте следующие папки на корневом уровне нашего проекта
*public
- содержит статические файлы, такие как файлы CSS и JS для внешнего интерфейса
*views
- содержит представления для внешнего интерфейса - Наш сайт будет содержать только одну страницу. Внутри папки
views
создайте файлindex.ejs
, который будет содержать HTML-код для внешнего интерфейса. Экспресс используетejs
в качестве механизма создания шаблонов. - Структура проекта теперь будет выглядеть следующим образом
Шаг 2.3. Инициализировать Express и HTTP-сервер
- Теперь мы должны инициализировать Express, HTTP-сервер и Socket.IO для нашего бэкэнда. Для этого вставьте следующий код в
index.js
, расположенный на корневом уровне проекта.
Шаг 2.3. Реализуйте Socket.IO
- Пришло время внедрить Socket.IO в бэкэнд.
- Вставьте следующий код в
index.js
файл
Итак, теперь мы внедрили бэкэнд нашего сайта. Ниже приведен полный код index.js
.
Шаг 3. Создание FrontEnd нашего сайта
Теперь давайте создадим интерфейс нашего веб-сайта.
Шаг 3.1. Создайте файл HTML
- Давайте создадим HTML-файл для нашего интерфейса.
- Мы определим CSS и Javascript для интерфейса в
public/css/styles.css
иpublic/js/main.js
соответственно. Следовательно, мы должны импортировать эти файлы. В бэкэнде мы явно устанавливаемpublic
в качестве каталога по умолчанию для обслуживания статических файлов. Следовательно, мы будем импортировать файлы изcss/styles.css
&js/main.js
в HTML. - Мы также импортируем клиентскую библиотеку для
socket.io
- Мы также импортируем
adapter.js
для WebRTC, потому что реализации WebRTC все еще развиваются, и потому что каждый браузер имеет разные уровни поддержки кодеков и функций WebRTC. Адаптер представляет собой прокладку JavaScript, которая позволяет записать ваш код в соответствии со спецификацией, чтобы он просто работал во всех браузерах с поддержкой WebRTC. - Мы обсуждали серверы STURN / TURN в предыдущих руководствах. Мы импортируем URL-адреса TURN / STUN из
public/js/config.js
. Мы создадим этот файл позже в этом руководстве. - Вставьте следующий код в
views/index.ejs
Шаг 3.2. Добавьте код CSS
- Мы не объясняем код CSS.
- Вставьте следующий код в
public/css/styles.css
Шаг 3.3. Добавьте файл JS
- Теперь давайте добавим JavaScript в наш интерфейс. У нас уже был файл
public/js/main.js
вindex.ejs
. Именно в этом файле мы реализуем различные методы использованияWebRTC
иclient library of Socket.IO
. - Между двумя клиентами будет осуществляться обмен множеством сообщений, прежде чем между ними будет установлено прямое соединение. Мы видели это в деталях в предыдущем уроке, когда приводили пример Эми и Бернадетт. Настоятельно рекомендуется прочитать этот пример. Мы просто реализовали каждый шаг, упомянутый в этой статье, с помощью Socket.IO.
- Вставьте следующий код в
public/js/main.js
Шаг 3.4. Добавьте URL-адреса STUN / TURN в config.js
- Чтобы сделать этот веб-сайт в реальном мире, мы должны указать конфигурацию TURN / STUN на
RTCPeerConnection()
. Есть много компаний, которые предоставляют бесплатные серверы STUN / TURN. Мы будем использовать серверы, предлагаемые XirSys. - Шаги по получению URL-адресов TURN / STUN от XirSys упомянуты в этом файле README.
- Вставьте полученные конфигурации в
public/js/config.js
- Вот как будет выглядеть
config.js
. (URL-адреса будут разными
Поздравляю!
Вы создали веб-сайт для проведения веб-конференций. Чтобы развернуть свой сайт на localhost и протестировать его, выполните следующие действия.
- Откройте терминал в корневом каталоге нашего проекта.
- Выполните следующую команду -
node index.js
. - Откройте Google Chrome и посетите
localhost:8000
. Введите название комнаты (скажем, foo). Вы должны увидеть свое видео. - Откройте новую вкладку и посетите
localhost:8000
. Введите то же название комнаты (foo). Теперь вы должны увидеть два видеоэлемента.
Вы можете найти полный код в этом репозитории GitHub.