Я создаю кросс-платформенное веб-приложение, где звук генерируется "на лету" на сервере и транслируется потоковым потоком к клиенту браузера, возможно, через аудио-элемент HTML5. В браузере у меня будут анимации с поддержкой Javascript, которые должны точно синхронизироваться с воспроизводимым звуком. "Точный" означает, что звук и анимация должны быть в пределах секунды друг от друга, и, надеюсь, в течение 250 мс (подумайте о синхронизации губ). По разным причинам я не могу делать аудио и анимацию на сервере и воспроизводить видео в реальном времени.
В идеале между генерацией звука на сервере и воспроизведением звука в браузере будет мало или совсем нет, но я понимаю, что время задержки будет сложно контролировать и, вероятно, в диапазоне 3-7 секунд (браузер-, зависимость от окружающей среды, сети и фазы луны). Я могу справиться с этим, хотя, если я могу точно измерить фактическую задержку "на лету", чтобы мой браузер Javascript знал, когда представить соответствующий анимированный фрейм.
Итак, мне нужно точно измерить задержку между моим передающим звуком потоковым сервером (Icecast?) и звуком, выходящим из динамиков на компьютере, на котором размещен динамик. Некоторые возможности голубого неба:
-
Добавьте метаданные в аудиопоток и проанализируйте его с воспроизводимого звука (я понимаю, что это невозможно с использованием стандартного аудио-элемента)
-
Добавить короткие периоды чистой тишины в аудио, а затем обнаружить их в браузере (могут ли аудио-элементы выдавать фактические звуковые сэмплы?)
-
Запросить сервер и браузер относительно различных глубин буфера
-
Декодирование потокового аудио в Javascript, а затем захват метаданных
Любые мысли о том, как я могу это сделать?