Пограничный узел

Приём медиапотоков ближе к источнику

Этот сервер — один из узлов приёма Bluebird. Он забирает загрузки и потоки от устройств поблизости, складывает их в очередь и отдаёт в основное хранилище, когда канал позволяет. Публичного интерфейса у узла нет — только API.

принимает трафик узел ru-c1 API v2
Состояние узлаru-c1
Аптайм45 дней
Очередь на отправку0 сегментов
Задержка до хранилища38 мс
Принято за сутки214 ГБ
Сборкаrelay 2.4.1

Что делает узел

Три задачи, ничего сверх. Всё остальное — логика приложения — живёт в основном контуре и сюда не выносится.

Приём загрузок

Устройство отдаёт файл или сегмент ближайшему узлу и сразу освобождает канал — дальше узел разбирается сам.

Поток событий

Статус каждой загрузки — приняли, поставили в очередь, отдали, ошибка — приходит по веб-сокету без опроса.

Пакетная выгрузка

Для парка устройств — потоковый gRPC-канал: одно соединение, много объектов, обратное давление по месту.

Интерфейс узла

Аутентификация — bearer-токен устройства. Токен выдаётся в основном контуре и действует на всех узлах приёма.

POST/api/v2/uploadsПринять файл или сегмент
GET/api/v2/uploads/:idСтатус объекта в очереди
WS/api/v2/eventsПоток событий по загрузкам
gRPCmedia.v2.UploadServiceПотоковый приём для парка устройств
POST/api/v2/segmentsПриём сегментов с раздающего контура
GET/api/v2/statusСостояние узла и очереди

Пример

Загрузка сегмента с камеры на ближайший узел.

ingest.sh
# отправить сегмент на узел приёма
curl -X POST https://relay.bbird.ru/api/v2/uploads \
  -H "Authorization: Bearer $DEVICE_TOKEN" \
  -H "X-Device-Id: cam-ru-c1-014" \
  -F "file=@segment.mp4"

# → 202 Accepted
{
  "id": "seg_7Kd91mQ",
  "node": "ru-c1",
  "bytes": 4718592,
  "state": "queued"
}