Я пишу расширение Chrome, которое просто записывает звук с вкладки и отправляет на мой локальный сервер.
Насколько я понимаю, MediaRecorder в расширении Chrome такой же, как и в HTML.
chrome.tabCapture.capture({ audio: true }, stream => {
try {
const recorder = new MediaRecorder(stream, { mimeType: "audio/webm;codecs=opus" });
recorder.addEventListener('dataavailable', async (event) => {
const request = new Request("http://localhost:3000");
try {
await fetch(request, { method: "POST", body: event.data });
} catch (ex) {
console.error(ex);
}
});
const timeslice = 2 * 1000;
recorder.start(timeslice);
} catch (err) {
console.log(err.message);
return;
}
});
Локальный сервер предназначен только для сохранения его в виде файла. Я скачал файл и проиграл его, но он сказал, что файл разбился. Забыв об отправке / загрузке, я просто сохранил BLOB-объект из MediaRecorder в файл. Но это было разбито. Нужно ли делать что-то еще?
Действительно, сначала я пытался транслировать звук, захваченный на вкладке Chrome, на сервер, но потоковая передача, конечно, не удалась. Я думал, что объединение больших двоичных объектов в 'audio / webm; codecs = opus' не работает, потому что формат файла webm не позволяет этого. Есть ли какой-нибудь способ создать потоковый двоичный объект в блоке 'audio / webm; codecs = opus' из сегментов?