Skip to content

Параметр nodrStrategy ​

Описание ​

Параметр nodrStrategy определяет стратегию взаимодействия Teleport SDK со специализированными серверными узлами сети — NODR (Node Delivery Resource).

NODR — это выделенные кэширующие серверные узлы (edge nodes) в инфраструктуре Teleport Media, которые выступают в качестве промежуточного звена между пиринговой WebRTC-сетью (браузерными пирами) и CDN/Origin-сервером вещателя. Нодры могут работать как высокопроизводительные участники P2P-обмена, так и в качестве кэширующих HTTP-прокси перед обращением к CDN.

Параметр nodrStrategy представляет собой битовую маску (целое число), составленную из флагов перечисления teleport.NodrStrategy. Это позволяет гибко активировать отдельные механизмы или комбинировать их между собой.

Поведение по умолчанию

По умолчанию nodrStrategy равен teleport.NodrStrategy.NO (0). Взаимодействие с узлами NODR отключено, SDK обменивается сегментами только с обычными браузерными пирами по WebRTC и обращается напрямую к CDN/Origin при отсутствии данных в P2P.

Перечисление teleport.NodrStrategy ​

Перечисление teleport.NodrStrategy доступно в глобальном пространстве имен teleport и содержит следующие флаги:

Имя флагаЗначениеБитовый сдвигОписание
NO00Все механизмы работы с NODR отключены (по умолчанию).
NODR_LOW_PRIORITY11 << 0Пониженный приоритет NODR-пиров: сначала опрашиваются браузерные участники.
NODR_EXTRA_CYCLE21 << 1Дополнительный P2P-цикл загрузки с узла NODR, если обычный P2P-цикл не вернул данных.
NODR_PROXY41 << 2Использование NODR в качестве HTTP-прокси перед переходом к CDN.
NODR_BYTE_RANGE81 << 3Докачка недозагруженного сегмента по байтовому диапазону (range).
ALL15—Включение всех механизмов взаимодействия с NODR (1 | 2 | 4 | 8).

Подробное описание флагов ​

NODR_LOW_PRIORITY (1) ​

Управляет приоритетом выбора пиров при P2P-загрузке.

  • Включен: При подборе пира для очередного сегмента SDK сначала ищет среди обычных браузерных пользователей (meta.type === "browser"). Узлы NODR (meta.type === "nodr") выбираются только в том случае, если среди клиентских пиров не найдено источников сегмента. Это позволяет экономить трафик серверных нодров и максимально утилизировать P2P-емкость клиентских устройств.
  • Выключен: Выбор происходит на общих основаниях среди всех доступных пиров без разделения на клиентские и серверные.

NODR_EXTRA_CYCLE (2) ​

Активирует дополнительный раунд P2P-загрузки, нацеленный исключительно на нодры.

  • Если основной цикл обращения к браузерным пирам завершился неудачно и сегмент не был получен, SDK перед обращением к внешним источникам инициирует дополнительный цикл загрузки напрямую с узла NODR (по DataChannel или прямому URL нодра).

NODR_PROXY (4) ​

Включает режим HTTP-проксирования через нодры перед переходом на CDN.

  • Включает фоновое обновление пула доступных нодров (запрос /v1/nodr/search каждые 10 минут).
  • Если сегмент не удалось получить из P2P-сети, SDK не сразу обращается к CDN/Origin, а предпринимает попытку скачать сегмент по HTTP с одного из доступных узлов NODR.
  • В случае таймаута нодр с вероятностью 1/3 временно исключается из ротации; при ошибке 301 нодр отключается принудительно.

NODR_BYTE_RANGE (8) ​

Поддержка докачки частично загруженных сегментов.

  • Если соединение прервалось, но часть данных сегмента уже была скачана (payloadSize > 0), SDK не сбрасывает полученный буфер, а добавляет к запросу параметр range со смещением в байтах (url?range=<payloadSize>).
  • Нодр отдает только недостающую часть сегмента, что снижает нагрузку на сеть и исключает дублирование трафика.

ALL (15) ​

Удобная константа, объединяющая все флаги:

javascript
teleport.NodrStrategy.ALL = 
    teleport.NodrStrategy.NODR_LOW_PRIORITY |
    teleport.NodrStrategy.NODR_EXTRA_CYCLE |
    teleport.NodrStrategy.NODR_PROXY |
    teleport.NodrStrategy.NODR_BYTE_RANGE;

Способы настройки ​

1. При инициализации Teleport SDK ​

Стратегию можно передать в поле config параметров метода teleport.initialize():

javascript
let tlprt = await teleport.initialize({
    apiKey: "YOUR_API_KEY",
    config: {
        // Включение всех возможностей NODR
        nodrStrategy: teleport.NodrStrategy.ALL
    },
    loader: {
        type: "PLUGIN_ID",
        params: { /* ... */ }
    }
});

2. Комбинирование отдельных флагов ​

Флаги комбинируются с помощью оператора побитового ИЛИ (|):

javascript
// Активировать только HTTP-проксирование с поддержкой докачки
let tlprt = await teleport.initialize({
    apiKey: "YOUR_API_KEY",
    config: {
        nodrStrategy: teleport.NodrStrategy.NODR_PROXY
            | teleport.NodrStrategy.NODR_BYTE_RANGE
    },
    loader: {
        type: "PLUGIN_ID",
        params: { /* ... */ }
    }
});

3. Динамическое изменение в рантайме ​

Экземпляр Teleport предоставляет геттер и сеттер nodrStrategy:

javascript
// Чтение текущей стратегии
console.log("Текущая стратегия NODR:", tlprt.nodrStrategy);

// Проверка включения конкретного флага
let isProxyActive = (tlprt.nodrStrategy & teleport.NodrStrategy.NODR_PROXY) !== 0;

// Изменение стратегии на лету
tlprt.nodrStrategy = teleport.NodrStrategy.NODR_PROXY | teleport.NodrStrategy.NODR_BYTE_RANGE;

// Отключение работы с нодрами
tlprt.nodrStrategy = teleport.NodrStrategy.NO;

4. Управление через серверную конфигурацию ​

Teleport поддерживает централизованное управление параметром nodrStrategy через панель управления или бэкенд (код параметра 89). При получении обновленного конфига с сервера SDK автоматически применяет стратегию без необходимости перезагрузки страницы или изменения клиентского кода.