У меня есть веб-расширение для устройства записи экрана, которое генерирует записанное видео в качестве загрузки. В Chrome все хорошо, но ни одно из сгенерированных видео не воспроизводится в Firefox.
Я пробовал оба .webm (через кодек VP9) и .mp4 (через H264). Соответствующий код:
recorder.addEventListener('stop', evt => {
blob = new Blob(recorder.chunks, {'type': 'video/webm; codecs=vp9'});
blob_url = window.URL.createObjectURL(blob);
//...
Также пробовал
{'type': 'video/mp4; codecs=H264'}
В Firefox я просто вижу:
Что я делаю не так?
[EDIT]
После полезного ответа @ epistemex я сейчас указываю webm в момент создания MediaRecorder
, а не кодек.
MediaRecorder(master_stream, {mimeType: 'video/webm'});
Потом позже
blob = new Blob(recorder.chunks); //<-- not setting mime here now
... но Firefox по-прежнему говорит, что не может воспроизводить результирующие файлы, даже если
MediaRecorder.isTypeSupported("video/webm") //true
[РЕДАКТИРОВАТЬ 2 - включая больше кода]
if (rec_prefs.rec_vid == 'screen') listen_for_stop_screen_sharing();
recorder = new MediaRecorder(master_stream, {mimeType: 'video/webm'});
recorder.start();
recorder.chunks = [];
recorder.addEventListener('dataavailable', evt => {
recorder.chunks.push(evt.data);
}, false);
rec_stopped_dfd = new Promise((resolve) => {
recorder.addEventListener('stop', evt => {
blob = new Blob(recorder.chunks);
blob_url = window.URL.createObjectURL(blob);
resolve();
}, false);
});
Вызов recorder.stop()
находится в режиме обратного вызова в ответ на нажатие кнопки:
function stop_recording() {
master_stream.getTracks().forEach(track => track.stop());
if (recorder && recorder.state != 'inactive') {
recorder.stop();
Да, я могу подтвердить, что массив не пустой. Все отлично работает в Chrome - без ошибок, консоли и т. Д.