Конвертировать несколько видео-блобов в один и сохранить его - PullRequest
0 голосов
/ 28 октября 2018

Я записываю экран и помещаю большой двоичный объект в массив, когда он доступен.В конце я хочу сохранить его в файл webm или mp4.Я попытался преобразовать его в новый большой двоичный объект, а затем сохранить его как массив буферов, но это не сработало.

function recordScreen() {
        blobs = [];
        recorder = new MediaRecorder(localstream);
        recorder.ondataavailable = function(event) {
            blobs.push(event.data);
        }
        setTimeout(() => {
            stopRecording();
        }, 7000);
}

    function stopRecording() {
        recorder.stop();
        console.log(blobs);
        //But how to save it to a mp4 or a webm?
    }

// ОБНОВЛЕНИЕ Хорошо, теперь он записан в файл, но не воспроизводится.

function recordScreen() {
    recorder = new MediaRecorder(localstream);
    recorder.ondataavailable = function(event) {
        chunks.push(event.data);
    }
    recorder.start();
    setTimeout(() => {
        stopRecording();
    }, 7000);
}

function stopRecording() {
    recorder.stop();
    setTimeout(() => {
        toArrayBuffer(new Blob(chunks, {type: 'video/webm'}), function(ab) {
            var buffer = toBuffer(ab);
            var file = `example.webm`;
            fs.writeFile(file, buffer, function(err) {
                if (err) {
                    console.error('Failed to save video ' + err);
                } else {
                    console.log('Saved video: ' + file);
                }
            });
        });
    }, 1000);
}

function toArrayBuffer(blob, cb) {
    let fileReader = new FileReader();
    fileReader.onload = function() {
        let arrayBuffer = this.result;
        cb(arrayBuffer);
    };
    fileReader.readAsArrayBuffer(blob);
}

function toBuffer(ab) {
    return Buffer.from(ab);
}
...