Может ли blob, записанный MediaRecorder в 'audio / webm; codecs = opus`, воспроизводиться напрямую? - PullRequest
0 голосов
/ 19 марта 2019

Я пишу расширение 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' из сегментов?

...