Как конвертировать MIME-типы для blob / buffer? - PullRequest
0 голосов
/ 07 октября 2019

Проблема:

Я записываю аудио из браузера, который дает мне BLOB-объект после завершения записи:

let blob = new Blob(chunks, { 'type' : 'audio/webm;codecs=opus' });

Изменение типа пантомимыздесь не поможет, поскольку блоки уже поставляются с MIME-типом, который audio/webm;codecs=opus почти для всех браузеров. Поэтому ничего не могу сделать здесь.

Отправка этого большого двоичного объекта через XHR на сервер node.js приведет к получению буфера из этого большого двоичного объекта:

Клиент:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/audio', true);
xhr.send(blob);

Сервер:

app.post('/audio' , (req, res) =>{
    req.on('readable',()=>{
        let buffer = req.read();
        // sending this buffer to the external API results in error 
        // since it expects the mime-type audio/wav 
    });

    res.send({msg: 'success'}); 
});

Для большинства решений требуется записать файл на диск и преобразовать его ( ffmpeg ). Другие используют функции браузера, которые являются экспериментальными или несовместимыми с более старыми браузерами ... Я также пытался использовать пакет wavfile npm, но он создает поврежденный файл, если я пытаюсь записать его с помощью UInt8Array из этого webm-отформатированный буфер (воспроизводимый файл, но он содержит только шум и намного короче, чем должна быть фактическая запись)

Должно быть простое решение для преобразования стороны сервера двоичных данных, верно? Лучшее, что я мог бы пожелать, - это функция convertWebmBufferToWavBuffer.

...