EnglishРусский Map

Pion Handoff

title
Pion Handoff
type
toolbox
summary
Запускает сессию WebRTC в браузере и переносит медиасоединение в Go-бэкенд
tags
golang, webrtc, networking
language
Go
license
MIT
created
2026-04-07
updated
2026-04-07
lang
ru
translation_of
pion-handoff
source_updated
2026-04-07
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Запускает сессию WebRTC в браузере, а затем передаёт само медиасоединение процессу бэкенда на Go. Браузер проходит аутентификацию и начинает сигналинг в штатном режиме, но WebRTC API перехватывается: сигналинг перенаправляется в Handoff, который устанавливает настоящее peer-to-peer соединение на стороне сервера через Pion.

Принцип работы

  1. Браузер открывает целевой сайт и штатно проходит аутентификацию
  2. Сайт начинает WebRTC-сигналинг (обмен offer/answer)
  3. Пользовательский скрипт (Greasemonkey) перехватывает RTCPeerConnection в браузере, подменяя API
  4. Данные сигналинга пересылаются в бэкенд Handoff
  5. Handoff поднимает реальную WebRTC-сессию с удалённым узлом через Go-стек WebRTC библиотеки Pion

Браузер считает, что идёт обычный WebRTC-звонок. Удалённый узел считает, что общается с браузером. Реальный же медиапоток идёт через ваш бэкенд.

Сценарии использования

Запись -> подключиться к видеозвонку и сохранять медиаданные на сервере в виде сырого RTP. Без записи экрана и браузерных ограничений: вы получаете потоки ровно в том виде, в каком они приходят.

Отправка -> подмешивать внешнее видео в звонок. Можно направить в соединение вывод FFmpeg, поток с камеры или сгенерированное видео. Удалённый узел видит его как обычное видео из браузера, но источник контролируете вы.

Реверс-инжиниринг -> перехват сырого трафика ICE, DTLS, RTP, RTCP и SCTP для анализа протоколов и отладки. Удобно для изучения того, как конкретный WebRTC-сервис ведёт себя на уровне сети.

Примеры

  • datachannel -> базовая страница с Data Channel и возможностью переопределения
  • media-save -> записывает видео VP8 на бэкенде, одновременно отображая его в браузере
  • media-send -> пересылает VP8 RTP с бэкенда в сессию браузера
  • greasemonkey -> автоматически генерирует пользовательские скрипты для перехвата RTCPeerConnection

Контекст

Проект создан Шоном Дюбуа (Sean DuBois), автором Pion (стека WebRTC на Go). Это тонкий слой оркестрации поверх библиотек Pion: фундамент WebRTC здесь давно отлажен, хотя сам Handoff находится на ранней стадии (15 коммитов, один автор). Go 59%, JavaScript 41%.

70 звёзд, лицензия MIT. Репозиторий: https://github.com/pion/handoff