#javascript #audio #browser #html5-audio #web-audio-api
Вопрос:
Я пытаюсь реализовать функцию, в которой один клиент может записывать аудио (MediaRecorder) и отправлять его на сервер. Затем сервер создает ссылку, по которой другой клиент может загрузить прямую трансляцию.
И все это работает нормально, за исключением одной детали: поток задерживается примерно на 4 секунды. Я думаю, что это связано с буферизацией аудиоНода.
Вот что, я думаю, происходит: аудиорежим ждет, пока не будет доступно 4 секунды звука. Поскольку звук создается в реальном времени, он должен подождать 4 секунды, пока данные будут доступны.
Итак, мой вопрос: как я могу отключить или уменьшить размер буфера аудиоНода?
Я использую electron в качестве своего «браузера» или как он там называется.
HTTP-запрос (поток загрузки) выглядит следующим образом:
В коде javascript я просто прикрепляю ссылку на свой исходный код:
audioNode = document.getElementById("callAudio")
audioNode.volume = 1.0
const audioSourceNode = document.getElementById("callAudioSource")
const audioContext = new window.AudioContext()
const audioTrack = audioContext.createMediaElementSource(audioNode)
const audioGain = audioContext.createGain()
const audioDestination = audioContext.createMediaStreamDestination();
const audioTrack.connect(audioGain).connect(audioDestination)
audioSourceNode.setAttribute("src", "http://localhost:12347")
audioNode.load()
audioNode.play().then(() => {
console.debug("started playing after:", currentTime)
playing = true
})
Сам аудионод выглядит следующим образом:
<audio controls id="callAudio" class="audioControls" crossorigin="anonymous" preload="none">
<source src="" id="callAudioSource"></src>
</audio>
Отладка говорит мне, что для начала воспроизведения потребовалось примерно 4,2 секунды.
Когда я смотрю на этот поток с точки зрения моего сервера, я вижу, что у меня задержка менее 10 мс. Таким образом, это не может быть связано с тем, что сервер создает задержку.