Squeak.ru - шаблоны программирования

Многосторонний WebRTC без SFU

На основании этой статьи, когда реализация решения WebRTC без сервера, я полагаю, это означает SFU, узкое место в том, что могут работать только 4-6 участников.

Есть ли решение, которое может обойти это? Например, я просто хочу использовать Firebase как единственный бэкэнд, в основном сигнализацию и без SFU. Какова общая стратегия внедрения для достижения как минимум 25-50 участников в WebRTC?

Обновление. Этот проект Github использует другое заявление. В нем говорится: «Полная сетка отлично подходит для ~ 100 подключений».

27.05.2020

  • с webrtc вам всегда нужен сервер. Обычный webrtc отправляет одноранговое видео одноранговому узлу и нуждается в сервере для сигнализации. С SFU вся отправка мультимедиа обрабатывается сервером. То же самое для MCU 28.05.2020
  • Кстати, 100 подключений не означают 100 участников. В сетке каждый человек связан со всеми остальными. если пользователей N, то количество подключений примерно N ^ 2. Итак, 100 подключений на самом деле означают 10 участников. 28.05.2020

Ответы:


1

Настоящее узкое место с MESH заключается в том, что каждое соединение RTCPeerConnection будет выполнять собственное кодирование видео в браузере.

Концепция p2p, естественно, включает в себя требование, чтобы оба одноранговых узла настраивали качество кодирования в зависимости от состояния сети. Итак, когда ваш браузер отправляет два потока одноранговым узлам X (хорошая скорость загрузки) и Y (плохая скорость загрузки), кодировки для X и Y будут разными - Y получит меньшую частоту кадров и битрейт, чем X.

Звучит разумно, правда? Но, к сожалению, требует отдельного кодирования видео для каждого однорангового соединения.

Если бы несколько одноранговых соединений могли повторно использовать одно и то же кодирование видео, тогда MESH был бы намного более жизнеспособным. Но Google не предоставил такую ​​возможность в браузере. Simulcast требует SFU, так что это не ваш случай.

Итак, сколько одновременных кодировок видео может выполнять браузер на типичной машине для видео 720p при 30 кадрах в секунду? 5-6, не более. Для 640х480 15 кадров в секунду? Может 20 кодировок.

На мой взгляд, уровень кодирования и сетевой уровень можно разделить в дизайне WebRTC, и даже getUserMedia можно расширить до getEncodedUserMedia, чтобы вы могли отправлять один и тот же закодированный контент нескольким партнерам.

Это настоящая практическая причина, по которой люди используют SFU для многопользовательской сети WebRTC.

28.05.2020
  • Таким образом, решение состоит в том, чтобы уменьшить размер кадра кодирования, чтобы привлечь больше участников. 28.05.2020
  • да. И я полагаю, что если вы делаете только аудио, MESH вполне подойдет даже для 200 участников. 28.05.2020
  • Я сделал 50 одновременных живых кодировок Opus один раз, и это заняло всего 30% ЦП, поэтому, я думаю, 200 должно быть выполнено на сильной машине 28.05.2020
  • @ user1390208 Когда ты делал свои 50 кодировок опусов. Означает ли это, что на аудиоконференции участвуют 7 человек? Так как у каждого человека 1 исходящий и 6 принимающий, то есть 7 * 7 подключений. Это конфигурация? 28.05.2020
  • @ user1390208 когда вы сказали 200 участников, имели ли вы в виду буквально 200 участников? Итак, N ^ 2 из них - это 40 000 подключений, верно? 28.05.2020
  • @ user1390208 действительно многообещающе, если мы сможем привлечь 200 участников, даже 100 уже очень хорошо для аудио. 28.05.2020
  • @quarks Да я имел ввиду двести участников. Вы отправите 200 потоков (199, если быть точным), так что вы проведете 199 кодировок Opus. И вы получите 199 потоков от других пиров, и ваш браузер выполнит 199 декодирований Opus. Должно быть нормально на 8-ядерной машине I7. 29.05.2020
  • @ user1390208 вы тестировали на нормальном ПК, обычно у людей, которые присоединяются к конференциям, нет такой 8-ядерной машины 29.05.2020

  • 2

    Если вы хотите провести конференцию с 25 людьми, которые все отправят свое видео, обычная установка webrtc не подойдет. За исключением случаев, когда вы значительно снижаете качество видео. Причина этого в том, что каждому участнику потребуется отправить 24 отдельных потока каждому другому клиенту. Итак, допустим, ваш поток составляет 128 КБ / с, тогда вам понадобится скорость загрузки 3 МБ / с. Что не всегда доступно. Затем также загрузите ту же сумму.

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

    Например, вы можете использовать шлюз Janus или mediasoup. Вот уже настроенное приложение для видеоконференций mediasoup, которое является масштабируемым репозиторием github

    28.05.2020
  • Это попробует интересное демонстрационное приложение. Вопрос, если только аудио, то 200 участников или хотя бы 100 можно с полной сеткой? Нет сервера? Как насчет того, чтобы одно видео от ведущего и все просто смотрели, тогда для конференции с 50 участниками это будет около 25 Мбит / с для загрузки на хост для потока 500 Кбит / с? 29.05.2020
  • @quarks также прочитал комментарий, который я поставил под ваш первоначальный вопрос. С аудио только полной сеткой, заявив, что он имеет 40 Кбит / с с кодеком opus с 200 участниками, у него будет загрузка 8 Мбит / с на человека. Затем 4 Мбит / с на 100 участников. Я думаю, что обычно все еще возможно при хорошем соединении. 29.05.2020
  • @quarks И да, действительно, загрузка будет 25 Мбит / с с трансляцией одного ведущего. 29.05.2020
  • @Dirk V Ваш единственный аргумент - пропускная способность. Если у каждого участника достаточно полосы пропускания, то с сеткой все в порядке. Ресурсы кодирования на машине обычно ограничивают вас быстрее, чем пропускная способность. 29.05.2020
  • @ user1390208 Нет ничего плохого в том, что пропускная способность может быть проблемой, и я не согласен с вашим утверждением о том, что ресурсы кодирования обычно являются первыми проблемами. Причина, по которой существует ограничение для видеозвонков webrtc в 4-6 человек, не из-за кодирования, а просто из-за пропускной способности, я думаю, мы можем согласиться с этим. Теперь предположим, что у вас неограниченная пропускная способность, тогда вы можете добавить кодировку, которая также может стать проблемой. Но с суперкомпьютером у вас больше не будет проблем. Так что да, вы можете просто добавить, что кодировка также может быть проблемой, не ошибается 29.05.2020
  • @ user1390208 И т. е. то же самое относится и к принимающей стороне. И могут помочь потоки более низкого качества 29.05.2020
  • Люди, которые присоединяются к конференциям, обычно не имеют 8-ядерной машины, тем более суперкомпьютера :-) Двухъядерный процессор с оперативной памятью 4G может быть средним. 29.05.2020
  • ... в любом случае, каковы будут общие требования к докладчику, чтобы иметь возможность размещать видео и аудио для 50 участников, пока участники просто слушают, и что потребуется для участников, у которых есть только аудио webrtc, чтобы иметь возможность работать в полная сетка без сервера? 29.05.2020
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...