Бондинг: Wi-Fi и мобильная сеть в одном стриме за пять минут

Настройте бондинг srtla в LOLS IRL, читайте индикаторы по каждому каналу во время стрима и узнайте, чего ждать, когда сеть впервые умрёт.

Бондинг отправляет стрим сразу по всем сетям, которые есть у телефона. Это разница между стримом, который заканчивается, когда пропадает Wi-Fi, и стримом, который идёт дальше по мобильной сети без вашего участия. Настроили один раз, и это просто ваш обычный способ выходить в эфир.

Что нужно сначала

Настройка

  1. Возьмите данные приёмника. Для бесплатного релея это ключ с relay-auth.lols.gg, который приходит уже в виде stream id. Для своей машины это имя хоста, UDP-порт и тот stream id, который ждёт ваш сервер.
  2. Откройте Streams и добавьте пункт назначения. В приложении зайдите в Streams, нажмите + и выберите SRTLA из трёх чипов протоколов. SRT это одно соединение с вашим приёмником, RTMP идёт прямо на платформу, SRTLA это тот, что с бондингом.
  3. Заполните хост и порт. С релеем нажмите чип своего региона, и хост, порт и название заполнятся сами. Ближайший регион для страны вашей SIM-карты помечен звёздочкой. Со своим приёмником впишите публичное имя хоста и UDP-порт, на котором он слушает.
  4. Вставьте ключ в Stream id. Именно тут чаще всего ошибаются. Ключ релея уже содержит префикс publish:, так что вставляйте его целиком в Stream id, а не в название и не в конец хоста.
  5. Для начала оставьте задержку 2000 ms. Это значение по умолчанию, и оно разумное. Больше переживает слабый сигнал, меньше режет задержку, но оставляет меньше времени на повторную отправку потерянного пакета. Когда вы в эфире, приложение показывает время прохождения туда и обратно, которое оно реально измеряет, и предлагает подходящее значение, так что подстраивайте потом по реальным цифрам, а не гадайте сейчас.
  6. Сохраните и проверьте, что пункт назначения включён. Сохранённый, но не включённый пункт назначения это самый тихий способ не стримить.
  7. Выходите в эфир и разверните статистику. Тапните по оверлею статистики на экране эфира, чтобы раскрыть его. Вам нужно увидеть по одной строке на канал: wifi и cell, у каждой свой битрейт и своё время прохождения туда и обратно. Две строки значит, что бондинг работает. Одна строка значит, что нет, и ошибки ниже подскажут почему.

Как читать индикаторы

В свёрнутом виде оверлей это индикатор состояния, ваш битрейт, частота кадров энкодера, время прохождения туда и обратно и сколько вы уже в эфире. Нажатие открывает подробности:

ПоказательО чём он говорит
send bufferОпережающий показатель, и именно за ним надо следить. Буфер заполняется раньше, чем картинка начинает заикаться, поэтому растущее значение это предупреждение, что канал выбивается из сил, а не отчёт о том, что он уже отказал.
targetБитрейт, к которому сейчас стремится адаптивный битрейт; он сам снижается и снова растёт по мере изменения условий.
dropped и retransmitПотерянные и отправленные повторно пакеты. Немного повторных пакетов в мобильной сети это нормально, а растущий счётчик потерь нет.
Одна строка на каналПодписаны wifi, cell или eth, у каждой свой битрейт и своё время прохождения туда и обратно, так что видно, какая сеть что несёт.
Точка в строке каналаЗелёная: канал активен и несёт трафик, жёлтая: подключается или завис, красная: мёртв. Красная строка при живом стриме это бондинг, делающий свою работу.
Одна строка на пункт назначенияС названиями, так что если вы шлёте в несколько мест, видно, какое из них отвалилось, пока остальные в порядке.

Что происходит, когда канал падает

Ничего драматичного, в этом и смысл. Строка упавшего канала краснеет, остальные каналы подхватывают трафик, и стрим остаётся на связи. Когда сеть возвращается, этот канал заново регистрируется на приёмнике и сам входит в группу. Останавливать, перезапускать или трогать что-либо не нужно.

Два момента, о которых стоит договориться заранее. Во-первых, оставшийся канал должен тянуть весь стрим, так что если ваш битрейт рассчитан только на хороший Wi-Fi, адаптивный битрейт снизится, пока работает мобильная сеть, и вернётся потом. Во-вторых, бондинг это устойчивость, а не дополнительная скорость: каналы никогда не складываются в одну большую трубу. Поставьте битрейт по тому, что тянет один хороший канал, и переключения вы почти не заметите.

Проверьте это нарочно, пока не припёрло. Выйдите в эфир с бондингом из дома, дождитесь, когда статистика станет ровной, потом выключите Wi-Fi на минуту и смотрите. Вы увидите, как строка wifi краснеет, строка cell берёт всё на себя, и как всё возвращается, когда вы включаете Wi-Fi обратно. Десять минут такой проверки дороже любого количества чтения, и гораздо лучше узнать это у себя на кухне, чем посреди стрима.

Ошибки, из-за которых первая попытка не удаётся

Указан адрес из вашей собственной сети

Это главная. Приёмник по адресу 192.168.1.50 доступен через ваш Wi-Fi и больше ниоткуда, поэтому мобильный канал не может зарегистрироваться, и бондинга нет: вы на Wi-Fi, только с лишними шагами. Пункт назначения должен быть публичным именем хоста или адресом, то есть релей, арендованная машина или проброс UDP-порта на роутере к вашей машине с обращением по публичному адресу роутера. То же правило для ноутбука у вас на столе.

Пустой или не до конца вставленный stream id

Приёмники проверяют тех, кто публикует, поэтому пустой или обрезанный stream id даёт соединение, которое никуда не ведёт. Вставляйте ключ целиком, вместе с префиксом publish:, в поле Stream id.

Ожидание большего битрейта

Два канала не складываются. Если вы поставили битрейт, который тянет только ваш Wi-Fi, стрим будет выглядеть хуже, как только работу возьмёт мобильная сеть, и вы будете винить бондинг в обратном тому, что он делал. Бондинг держит вас в эфире. Битрейт это отдельное решение.

VPN на телефоне

VPN перехватывает все сокеты на устройстве, поэтому приложение не может открыть по одному на сеть, и объединять нечего. Статистика говорит об этом прямо, когда так случается. Выключите VPN или исключите LOLS IRL в настройках самого VPN-приложения.

Отправка srtla на обычный SRT-сервер

Для SRTLA нужен приёмник с srtla_rec, который и собирает каналы обратно. Обычный SRT-listener не понимает регистрацию группы. Используйте релей или запустите srtla_rec перед своим SRT-сервером, как описано в руководстве по самостоятельному хостингу.

Релей на другом конце света

Расстояние стоит задержки, которую уже не вернуть, а достаточно большое время прохождения туда и обратно может вообще не дать соединению установиться. Выбирайте ближайший регион: приложение отмечает звёздочкой тот, что совпадает со страной вашей SIM-карты.

Когда всё заработало

Дальше: бесплатные релеи