Наладить корректную запись с микрофона на Safari
Бьюсь над кроссплатформенным вариантом записи звука с микрофона на JS.
В общем для начала я использовал Media Stream Recording нативного js:
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
console.log('getUserMedia supported.');
let onSuccess = function(stream) {
const mediaRecorder = new MediaRecorder(stream, {mimeType: mimeType});
let chunks = [];
mediaRecorder.start();
// лишняя логика нажатий на кнопки опущена
mediaRecorder.onstop = function (e) {
const file = new File(chunks, "voice");
console.log(file);
// тут передаю файл на сервер, со стороны бекенда php
}
mediaRecorder.ondataavailable = function (e) {
chunks.push(e.data);
}
}
let onError = function(err) {
console.log('The following error occured: ' + err);
}
navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
} else {
console.log('getUserMedia not supported on your browser!');
}
Этот код идеально работает в хромоподобных браузерах, на сервер уходит файл audio/webm я его конвертирую с помощью ffmpeg в mp3 и ogg. Всё отлично.
Но есть проблема с Safari как на IOS так и на MACOS.
Код, который привёл выше, отправляет на сервер файл формата mp4a aac, который содержит всего 1 секунду "корректной записи", то есть запись 5 секунд, НО слышно только первую. Попробовал конвертировать в другие форматы, но безуспешно.
Тогда я обратился к RecordRTC, сделал всё как указано в примере:
var options = {
type: 'audio',
numberOfAudioChannels: isEdge ? 1 : 2,
checkForInactiveTracks: true,
bufferSize: 16384
};
if(isSafari || isEdge) {
options.recorderType = StereoAudioRecorder;
}
if(navigator.platform && navigator.platform.toString().toLowerCase().indexOf('win') === -1) {
options.sampleRate = 48000; // or 44100 or remove this line for default
}
if(isSafari) {
options.sampleRate = 44100;
options.bufferSize = 4096;
options.numberOfAudioChannels = 2;
}
if(recorder) {
recorder.destroy();
recorder = null;
}
recorder = RecordRTC(microphone, options);
recorder.startRecording();
В этом примере для Safari используется wav формат, но на сервер уходит запись с "треском" вместо голоса.
Собственно вопрос, кто-нибудь смог завести Media Recorder на Safari, с корректной работой?