Я записываю речь с помощью MediaRecorder API, почему куски меньше, чем фактический размер? - PullRequest
0 голосов
/ 26 декабря 2018

У меня проблема с MediaRecorder API (https://www.w3.org/TR/mediastream-recording/#mediarecorder-api).

. Я использую его для записи речи с веб-страницы с помощью Chrome и сохранения ее как фрагментов. Мне нужно иметь возможность воспроизводить еев то время как и после записи, поэтому важно сохранить эти фрагменты.

Вот код, который записывает данные:

navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(stream) {

  recorder = new MediaRecorder(stream, { mimeType: 'audio/webm; codecs="opus"' })

  var previous_timecode = null

  recorder.ondataavailable = function(e) {

    duration = previous_timecode ? e.timecode - previous_timecode : null
    previous_timecode = e.timecode

    // Read blob from `e.data`, decode64 and send to sever;
    // Additionally send the duration calculated from the events;
    // Duration of first chunk is calculated in a different way.
  }

  recorder.start(1000)

})

Проблема действительно произошла только один раз, но все же этодовольно страшный. Проблема заключалась в том, что за 7 минут записи я получил только 5 минут звука. Анализ фрагментов дал мне следующий вход - в какой-то момент фрагменты стали намного меньше, чем они ожидали - данные былииспускается каждую секунду, но длительность чанков составляет около 400-700 мс.

Звук был корректным, у него не было пробелов, он просто шел с растущей задержкой. В некоторых точках длительность чанка быланемного увеличивается - до 4,8 с в чанке, но общая задержка все же выросла до ~ 2 мин.

В приложении CSV https://transfer.sh/stgnW/1.csv вы можете увидеть продолжительность каждогочанк, рассчитанный с помощью ffmpeg (размер аудиофайла, содержащего первые n чанков, минус размер файла, содержащего первые n-1 чанков), а также длительности, рассчитанные по значениям e.timecode.

Похоже, возникла проблема с дросселированием.что-то подобное в хроме?Как я могу исправить свой код, чтобы убедиться, что он не регулируется таким образом?

1 Ответ

0 голосов
/ 29 января 2019

Это длинный снимок, но попробуйте удалить любую обработку на уровне браузера, которая может быть выполнена для аудио, со следующими ограничениями:

  • echoCancellation: false
  • autoGainControl: false
  • noiseSuppression: false
...