PeerRing.ru

PeerRing.ru

Сансетов Егор
Данная документация актуальна для бета версии PeerRing. Со временем может меняться только интерфейс и могут добавляться новые функции. Основной принцип работы и протоколы меняться не будут.


Веб-приложение PeerRing создано для совершения аудио- и видеозвонков по протоколу WebRTC.

WebRTC — это набор технологий, протоколов и API, позволяющий приложениям и браузерам обмениваться аудио-, видео- и другими данными в реальном времени без необходимости установки плагинов или стороннего ПО. Он обеспечивает прямую связь между пользователями (peer-to-peer), что позволяет создавать такие приложения, как видеочаты, вебинары и телефонные звонки.

Теперь подробнее.


PeerRing - это лёгкое веб-приложение для звонков "по коду", без аккаунтов и базы пользователей. Работает целиком в браузере, а серверная часть нужна только как "сводник" (сигналинг) и как релей для медиа (TURN).

Принцип работы следующий:

1.Генерация кода комнаты

При открытии страницы браузер генерирует случайный код формата AAA000A.

Этот код - имя "комнаты" в сигналинг-сервере.

Пользователь может скопировать код или ссылку с peerring.ru?code=....

2.Режим приёма звонков

Кнопка "Включить/Выключить ClientPeerRing" включает или выключает подключение клиента к сигналинг-WebSocket.

Когда приём включён, клиент подключается к wss://peerring.ru/ws/ (с авто-фолбэком на :8443) и отправляет:

{ "type": "join", "room": "<roomCode>" }

Это делает пользователя "в онлайне" и доступным для входящих.

3.Сигналинг через WebSocket

Для установления WebRTC соединения браузерам нужно обменяться служебными данными: offer/answer и ICE-кандидатами. Это делается через Node-сигналинг.

Сервер не передаёт медиа — он только пересылает JSON-сообщения между двумя участниками одной комнаты.

4.Начало звонка

Звонящий вводит код собеседника и жмёт "Позвонить".

У клиент в фоне происходит join в комнату с кодом собеседника, создаётся RTCPeerConnection и генерирует offer.

offer отправляется через WS в эту комнату.

5.Принятие звонка

У принимающего уже открыт WS и он “слушает” свою комнату.

Когда приходит offer, он:

  • создаёт RTCPeerConnection
  • ставит RemoteDescription
  • делает answer
  • шлёт answer обратно в ту же комнату.

6.ICE / поиск пути для медиа

После offer/answer оба браузера начинают искать реальный сетевой путь (ICE).

Они собирают кандидаты:

  • host (локальные IP),
  • srflx через STUN,
  • relay через TURN.

7.Автопереход на TURN relay-only

В глобальной сети некоторые NAT/операторы режут p2p, поэтому ICE может "упасть".

Клиент это ловит (iceConnectionState === "failed") и пересоздаёт PeerConnection в режиме

iceTransportPolicy: "relay"

и делает offer с iceRestart:true.

То есть браузеры сразу используют TURN-релэй, минуя p2p.

8.Передача медиа

Браузер берёт камеру/микрофон через getUserMedia.

Треки добавляются в PeerConnection:

pc.addTrack(track, localStream);

Когда приходит удалённый поток (ontrack), он ставится в <video id="remote"> и в отдельный <audio id="remoteAudio">.

Отдельный audio элемент нужен, чтобы звук стабильно запускался на телефонах и не "терялся" из-за autoplay-политик.

9.Завершение

При завершении клиент:

  1. шлёт hangup в комнату,
  2. закрывает PeerConnection,
  3. останавливает все локальные треки,
  4. возвращает UI в исходное состояние.

Вторая сторона, получив hangup, делает то же самое и пишет "Remote hangup".

Подведем итоги. PeerRing - это "одноразовое" P2P-приложение звонков по коду, где:

  • WS сервер = только сигналинг (обмен offer/answer/ice/hangup),
  • coturn = гарантирует связь в глобальных сетях (relay),
  • медиа всегда шифруется самим WebRTC (SRTP/DTLS), а WS идёт по WSS.

Как пользоваться

Откройте сайт https://peerring.ru или, если он не доступен, https://peerring.ru:8443

Перед вами откроется простой веб-интерфейс:

Интерфейс десктопной версии веб-приложения

На ней имеются:

  • Блок "Ваш код"
  • Кнопки "Скопировать" (код), "Поделиться ссылкой" и "Включить/Выключить ClientPeerRing"
  • И блок "Позвонить по коду" с областью ввода кода и кнопками "Позвонить" и "Сбросить"


Блок "Ваш код" отображает уникальный код вашей сессии. Он меняется при каждом обновлении страницы.

Блок "Ваш код"

По данному коду ваш собеседник сможет вам позвонить.


Кнопки "Скопировать" (код), "Поделиться ссылкой" и "Включить/Отключить ClientPeerRing"

Кнопки "Скопировать" (код), "Поделиться ссылкой" и "Включить/Отключить ClientPeerRing"

Кнопки "Скопировать" и "Поделиться ссылкой" позволяют вам быстро поделиться вашим кодом с собеседником. В частности кнопка "Поделиться ссылкой" копирует сразу ссылку с вашим кодом, перейдя по которой, ваш собеседник сможет почти сразу подключиться к вам. Ему останется только включить ClientPeerRing и нажать позвонить.

Кнопка "Включить/Выключить ClientPeerRing" подключает и отключает вас от WS. Включение клиента подключает вас к WS и позволяет вашему собеседнику "найти" вас. Кнопка выключения - отключает вас от сервиса. Вам не смогут позвонить, но и вы не сможете совершать звонки.


Блок "Позвонить по коду"

Блок "Позвонить по коду"

Данный блок имеет область ввода кода и 2 кнопки: "Позвонить" и "Сбросить".

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


Правила ОБТ(Открытого Бета Тестирования)

  • Вы можете делиться сервисом.
  • Сервис может работать не стабильно, с перебоями. Разработчики не несут ответственности за качество связи и ошибки, которые могут возникать в процессе пользования сервисом.
  • Просьба обо всех багах, глюках, недочетах и предложениях по улучшению работы сервиса или взаимодействия с ним сообщать в обсуждения группы в телеграм - t.me/nontecstudio (t.me/nontec_chat) или по почте cbt@peerring.ru

Report Page