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.Завершение
При завершении клиент:
- шлёт
hangupв комнату, - закрывает PeerConnection,
- останавливает все локальные треки,
- возвращает 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" подключает и отключает вас от WS. Включение клиента подключает вас к WS и позволяет вашему собеседнику "найти" вас. Кнопка выключения - отключает вас от сервиса. Вам не смогут позвонить, но и вы не сможете совершать звонки.
Блок "Позвонить по коду"

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