Я работаю над проектом, который требует возможности потоковой передачи аудио с веб-страницы другим клиентам.Я уже использую websocket и хотел бы направить туда данные.
В моем текущем подходе используется Media Recorder, но существует проблема с выборкой, которая вызывает прерывания.Он регистрирует звук 1s и затем отправляет его на сервер, который передает его другим клиентам.Есть ли способ захватить непрерывный аудиопоток и преобразовать его в base64?
Может быть, если - это способ создать аудио base64 из MediaStream без задержки, это решит проблему.Как вы думаете?
Я хотел бы продолжать использовать веб-сокеты, я знаю, что есть webrtc.Вы когда-нибудь делали что-то подобное, это выполнимо?
Спасибо
--> Device 1
MediaStream -> MediaRecorder -> base64 -> WebSocket -> Server --> Device ..
--> Device 18
Вот демонстрация текущего подхода ... вы можете попробовать это здесь: https://jsfiddle.net/8qhvrcbz/
var sendAudio = function(b64) {
var message = 'var audio = document.createElement(\'audio\');';
message += 'audio.src = "' + b64 + '";';
message += 'audio.play().catch(console.error);';
eval(message);
console.log(b64);
}
navigator.mediaDevices.getUserMedia({
audio: true
}).then(function(stream) {
setInterval(function() {
var chunks = [];
var recorder = new MediaRecorder(stream);
recorder.ondataavailable = function(e) {
chunks.push(e.data);
};
recorder.onstop = function(e) {
var audioBlob = new Blob(chunks);
var reader = new FileReader();
reader.readAsDataURL(audioBlob);
reader.onloadend = function() {
var b64 = reader.result
b64 = b64.replace('application/octet-stream', 'audio/mpeg');
sendAudio(b64);
}
}
recorder.start();
setTimeout(function() {
recorder.stop();
}, 1050);
}, 1000);
});