Запись видео с веб-камеры в формате MP4 с MediaRecorder

Когда я использую JS MediaRecorder для записи веб-камеры в формате MP4 в браузере, поддерживающем MP4 и MediaRecorder (Firefox в Linux), веб-камера запускается, но не записывает.

Запись работает, когда mimeType MediaRecorder установлен на video/webm, но когда я устанавливаю mimeType на video/mp4, возникает проблема.

Я записываю с помощью следующего кода:

if (navigator.mediaDevices) {
        var constraints = {audio: true, video: true};
        navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
            mediaRecorder = new MediaRecorder(stream, {mimeType: "video/mp4"});
            mediaRecorder.start();
});
} else {
console.log("media recorder is not supported");
}

Я ожидаю, что веб-камера начнет запись, когда код будет выполнен в поддерживающем браузере, но console.log не выводится, а в консоли есть ошибка:

NotSupportedError: Operation is not supported

Я знаю, что мой браузер поддерживает как mp4, так и MediaRecorder:

MP4: https://caniuse.com/#search=mp4 MediaRecorder: https://caniuse.com/#search=mediarecorder

но работает только запись webm.


person Heng Ye    schedule 23.07.2019    source источник
comment
Вы проверили результат MediaRecorder.isTypeSupported({mimeType: "video/mp4"}), чтобы узнать, поддерживается ли он?   -  person Dean Taylor    schedule 23.07.2019
comment
это false В каком браузере поддерживается mp4?   -  person Heng Ye    schedule 23.07.2019
comment
Это не относится к браузеру, это также может зависеть от программного обеспечения, установленного на машине. Или возможности обработки устройства, то есть поддержка кодирования многопоточного ЦП или аппаратной графики. Попробуйте Chrome в Windows, чтобы проверить, работает ли он. Также подумайте о том, чтобы попытаться указать скорости кодирования в параметрах.   -  person Dean Taylor    schedule 23.07.2019


Ответы (1)


Я обнаружил, что Chromium также не поддерживает запись в формате mp4, поэтому решил выполнить преобразование на стороне сервера после загрузки видео.

Поскольку это GNU / Linux, для ускорения преобразования я использовал:

ffmpeg -i input.webm -preset superfast output.mp4

Если есть более быстрые подходы, я бы хотел их узнать.

person Heng Ye    schedule 23.07.2019