Голосовой чат в браузере или отдельное приложение
Опубликовано
«Установите наше приложение» — просьба, которая стоит части аудитории: половина людей не поставит ничего ради одного разговора. «Работает в браузере» — обещание, за которым скрывается несколько вполне реальных ограничений, о которых обычно узнают в неподходящий момент. Разберём, что именно браузер может и чего не может в голосовом чате, честно включая то, чего не можем мы сами.
Что браузер умеет наравне с приложением
Список длиннее, чем принято думать.
Сам голос. WebRTC — это тот же набор технологий, который используют настольные клиенты, включая построенные на Electron. Кодек Opus, передача по UDP, эхоподавление, шумоподавление, адаптивный буфер. Разницы в качестве звука между вкладкой и приложением при прочих равных нет.
Демонстрация экрана и камера. Захват экрана, окна или вкладки доступен через стандартный интерфейс браузера.
Обработка звука. Web Audio позволяет строить полноценные цепочки: усиление, шумовой гейт, нейросетевое шумоподавление в WebAssembly. Всё, что описано в статье про настройку микрофона, в браузере работает.
Уведомления. С разрешения пользователя — вполне.
Чего браузер не может
Здесь начинаются настоящие различия, и все они следуют из одного принципа: вкладка изолирована от системы намеренно.
Глобальные горячие клавиши. Страница получает события клавиатуры, только когда вкладка в фокусе. Свернули браузер, ушли в игру — push-to-talk не работает. Это не недоработка, а осознанное решение: сайт, слушающий вашу клавиатуру в фоне, был бы кейлоггером.
Захват звука отдельного приложения. Браузер может отдать звук вкладки, а на части платформ — звук всей системы. Звук конкретного постороннего процесса требует системного доступа, которого у вкладки нет. Почему это сложно даже для настольных приложений, разобрано в статье про демонстрацию экрана со звуком приложения.
Автозапуск и работа в трее. Вкладку надо открыть. Свёрнутое в трей приложение, которое подхватывает входящий вызов, — прерогатива настольного клиента.
Выживание при закрытии. Закрыли вкладку — вышли из комнаты. Приложение можно свернуть.
Полноэкранный захват игр. Эксклюзивный полноэкранный режим отдаёт видеокарту игре в обход композитора; браузерный захват такое окно часто не видит.
Чего не может и приложение тоже
Ради симметрии стоит сказать и об обратном.
Приложение не спасает от плохого канала. Задержка, джиттер и потери — свойства сети, а не оболочки. Настольный клиент на том же Wi-Fi будет рваться ровно так же.
Приложение не чинит акустику. Эхо создаётся колонками в комнате, и вкладка это или окно — безразлично.
Приложение надо обновлять. Веб-версия у всех всегда одной версии; у настольной образуется разброс, и часть проблем на созвоне оказывается разницей версий.
Приложение надо установить. Это и есть та самая цена, ради которой обсуждение вообще имеет смысл: гость, которого позвали на один разговор, до установки часто просто не доходит.
Про батарею и ресурсы
Распространённое мнение, что «браузер тяжелее», верно лишь отчасти.
Настольные клиенты на Electron — это тот же движок Chromium, только в собственном окне. Разница в потреблении между вкладкой и таким приложением невелика и обычно в пользу вкладки, потому что она делит процессы с уже запущенным браузером.
Настоящая разница возникает на мобильных, и там она в другую сторону. Мобильный браузер жёстче ограничивает фоновую работу, а тяжёлая обработка звука разряжает телефон быстро. Именно поэтому в Discourse мобильная веб-версия не запускает нейросетевое шумоподавление, а использует встроенное в браузер: экономия батареи здесь важнее нескольких процентов качества подавления.
Где проходит граница на практике
Простое правило по сценариям.
Браузер достаточен, если:
- вы зовёте людей со стороны и порог входа важнее всего;
- разговор рабочий, экран показывается из браузера или из окна приложения;
- вы за компьютером, вкладка открыта, глобальные горячие клавиши не нужны;
- вы с телефона.
Нужно приложение, если:
- вы играете — глобальный push-to-talk и захват звука игры;
- нужен совместный просмотр со звуком конкретной программы;
- хотите, чтобы чат стартовал с системой и жил в трее;
- играете в полноэкранном режиме.
Как это устроено у нас
Discourse работает в браузере: голосовые комнаты, текстовые каналы и демонстрация экрана открываются по ссылке, и гостю не нужен ни аккаунт, ни установка — регистрация требуется только тому, кто создаёт канал.
Настольный клиент для Windows существует и добавляет ровно то, чего браузер не даёт по устройству: глобальные горячие клавиши, работающие поверх игры, захват звука отдельного приложения отдельной дорожкой (требуется Windows 10 сборки 19041 или новее), запуск с системой и сворачивание в трей.
Чего нет ни там, ни там, и о чём честнее сказать сразу: своего хостинга — сервис работает только на нашей инфраструктуре, поставить его себе нельзя.
Как выбирать
Практический совет, который экономит время: не выбирайте по списку функций — проверьте два сценария, которые вам действительно нужны.
Первый: попросите человека со стороны присоединиться по ссылке и засеките, сколько шагов до момента, когда вы друг друга слышите. Второй: если важен совместный просмотр — включите музыку, поделитесь звуком и спросите, как это звучит на той стороне. Оба занимают пару минут и дают больше, чем любая таблица сравнения.