Здравствуйте! Я не любитель задавать вопросы на каких-то сайтах, потому что привык находить всё с помощью гугления. Но тут у меня уже нет сил и терпения чтобы продолжать.
Существует
Mediarecorder в JS коде, который записывает аудио с микрофона в формате
audio/webm с кодировкой
opus. Каждые
n секунд при событии ondataavailable выбрасывается blob. Данный блоб необходимо
перекодировать в формат audio/ogg. Как это сделать?
var mediaRecorder = new MediaRecorder(mediaStream, {
mimeType: 'audio/webm; codecs="opus"'
});
mediaRecorder.ondataavailable = (event) => {
if (event.data.size > 0) {
console.log(event.data);
// тут мы получаем blob в формате audio/ogg
}
}
mediaRecorder.start(250); // 250 - интервал в мс, по которому вызывается ondataavailable
Я уже использовал библиотеку
libvorbis.js с её VorbisRecorder. Она превращает webm в ogg, но есть одна проблема - не реализована возможность ondataavailable по определённому интервалу времени.
Ответы на возможные вопросы:
Зачем тебе эти извращения? Почему не используешь сразу WebM?
Проблема в том, что Google Chrome не может записывать аудио в формате ogg. Только webm. Для работы API с другого сайта необходим именно формат audio/ogg.
Просто используй ffmpeg, этого будет достаточно!
Я не спорю, но, как? Начнём с того, что я пробовал реализовать данный путь. Каждое аудио отправлялось на Node.JS сервер, записывалось на сервере, преобразовывалось ffmpeg... стойте, нет, не преобразовывалось. FFmpeg выбивал ошибку, которая была связана с целостностью аудио. Может, у меня руки не из того места, поэтому я сделал что-то не так когда передавал аудио из браузера на сервер. Переданный файл был будто "повреждён". Если у Вас есть готовое решение в виде Node.JS - буду очень рад.
На деле неважно на каком языке будет решение, мне необходимо понять:
"как это сделать?". Благодарен всем, кто прочитал! Может найдётся тот, кто поможет решить данную проблему.