Saya telah mencoba merekam audio dalam format OGG pada Chrome dan mengirimkannya kembali ke server, tetapi selalu mendapat format video / ogg. Inilah yang saya miliki:

Menangkap audio:

let chunks = [];
let recording = null;

let mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();

mediaRecorder.onstop = function() {
    recording = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
}

mediaRecorder.ondataavailable = function(e){
    chunks.push(e.data);
}

Mengirimnya ke server:

let data = new FormData();
data.append('audio', recording);

jQuery.ajax(...);

Gumpalan itu sampai ke backend, tetapi selalu dalam video / ogg!

1
Dewan159 3 April 2021, 10:33

2 jawaban

Jawaban Terbaik

Saya akhirnya menggunakan kbumsik / opus-media-recorder, memecahkan masalah bagi saya. Penggantian drop-in untuk mediarecorder.

0
Dewan159 5 April 2021, 09:24

Anda perlu mengatur mimeType dari MediaRecorder}. Jika tidak, browser akan memilih format apa pun yang disukai terbaik untuk menyandikan media.

let mediaRecorder = new MediaRecorder(stream, { mimeType: 'my/mimetype' });

Untuk memastikan bahwa browser sebenarnya dapat menyandikan format yang Anda inginkan, Anda dapat menggunakan isTypeSupported().

console.log(MediaRecorder.isTypeSupported('my/mimetype'));

Chrome misalnya tidak mendukung "audio/ogg; codecs=opus" tetapi mendukung "audio/webm; codecs=opus". Firefox mendukung keduanya. Safari tidak satupun dari mereka.

Setelah Anda mengkonfigurasi MediaRecorder Anda dapat menggunakan mimeType ketika membuat gumpalan.

recording = new Blob(chunks, { 'type' : mediaRecorder.mimeType });
1
chrisguttandin 3 April 2021, 09:59