Я хочу взять аудиовход из браузера и передать его нескольким слушателям. Предполагаемое использование - музыка, поэтому качество должно быть стандартным для mp3 или около того.
Я попробовал два способа, оба из которых дали безуспешные результаты:
WebRTC
- Потоковое аудио напрямую между браузерами работает нормально, но качество звука, похоже, не настраивается, что я видел. (Я видел, что он использует аудиокодек Opus, но, похоже, не предоставляет никаких элементов управления).
- Кто-нибудь знает, как повысить качество звука в потоках WebRTC?
Веб-сокеты
Проблема заключается в передаче от браузера к серверу. Аудиоданные PCM, которые я могу получить с помощью описанного ниже метода, оказались слишком большими для многократной потоковой передачи на сервер через веб-сокеты. Поток отлично работает в среде с высокоскоростным Интернетом, но на более медленном Wi-Fi его нельзя использовать.
var context = new webkitAudioContext() navigator.webkitGetUserMedia({audio:true}, gotStream) function gotStream (stream) { var source = context.createMediaStreamSource(stream) var proc = context.createScriptProcessor(2048, 2, 2) source.connect(proc) proc.connect(context.destination) proc.onaudioprocess = function(event) { var audio_data = event.inputBuffer.getChannelData(0)|| new Float32Array(2048) console.log(audio_data) // send audio_data to server } }
Итак, главный вопрос: есть ли способ сжать данные PCM, чтобы упростить потоковую передачу на сервер? Или, может быть, есть более простой способ сделать это?