Настоящее узкое место с 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