Я работаю над приложением WebRT C, в котором ровно 2 музыканта совместно работают над живым выступлением и передают объединенный звук третьей стороне. Поскольку невозможно, чтобы оба музыканта услышали друг друга с идеальной синхронизацией, мой подход таков:
- Музыкант A - хост, и он работает так, как считает нужным
- Музыкант B - гость, который слышит звук хоста, а затем вовремя выполняет то, что слышит из удаленного потока
- Используя API Web Audio, A * Аудиопотоки 1013 * и B объединены , и этот объединенный звук передается слушателю в новом потоке C
A ----> B (host streams to guest over WebRTC)
\ /
\ /
┙ ┕
C ("host" and "guest" streams merged using Web Audio API)
Я считаю, что получение идеальной синхронизации звука для C должно быть возможным (как, например, не нарушает l aws физики). Для целей данного приложения «идеальная синхронизация» означает, что слушатель C должен слышать то, что B слышит в то время T
одновременно с тем, что B сыграно в то время T
.
Я пробовал два подхода к этому, ни один из них не был успешным:
B объединяет аудио. Поскольку исполнение уже отображается "in-syn c" для B , я подумал, что их объединенный поток может быть синхронизирован c как хорошо. Тем не менее, выход по-прежнему содержит задержку. Я предполагаю, что прошло время между B локальным MediaStream, принимающим данные, и этими данными, завершающими обработку для объединенного потока.
A объединяет аудио. В этом подходе хост A получает аудио равноправного B и пытается учесть разницу во времени между двумя потоками, передавая A локальное аудио через DelayNode перед объединением. Я использую WebRT C Статистика API, чтобы попробовать значения, такие как время выполнения STUN, задержка дрожания буфера и оценка задержки MediaStream, но ни одна комбинация не дает идеального смещения задержки.
Is существует известный способ для синхронизации аудио таким образом с WebRT C? Это вопрос получения правильной статистики WebRT C, или мой подход полностью отключен?