首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DesktopCapturer保存到电子文件中,因为Buffer()已弃用

将DesktopCapturer保存到电子文件中,因为Buffer()已弃用
EN

Stack Overflow用户
提问于 2019-11-29 10:19:05
回答 1查看 150关注 0票数 0

您好,我已经阅读并尝试了该线程:Saving desktopCapturer to video file in Electron

这就是我到目前为止所知道的:

代码语言:javascript
复制
const { desktopCapturer } = require('electron')
var fs = require('fs');

function startRecording(){
    desktopCapturer.getSources({ types: ['window', 'screen'] }).then(async sources => {
    for (const source of sources) {
        if (source.name === 'Entire Screen') {
            try {
                const stream = await navigator.mediaDevices.getUserMedia({
                audio: false,
                video: {
                    mandatory: {
                    chromeMediaSource: 'desktop',
                    chromeMediaSourceId: source.id,
                    minWidth: 1280,
                    maxWidth: 1280,
                    minHeight: 720,
                    maxHeight: 720
                    }
                }
                })
                handleStream(stream)
            } catch (e) {
                handleError(e)
            }
            return
        }
    }})
}

function handleStream(stream) {
    recorder = new MediaRecorder(stream);
    blobs = [];
    recorder.ondataavailable = function(event) {
        blobs.push(event.data);
    };
    recorder.start();
}

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

function handleUserMediaError(e) {
    console.error('handleUserMediaError', e);
}

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

function toBuffer(ab) {
    let buffer =  Buffer.alloc(ab.byteLength);
    let arr = new Uint8Array(ab);
    for (let i = 0; i < arr.byteLength; i++) {
        buffer[i] = arr[i];
    }
    return buffer;
}

// Record for 3.5 seconds and save to disk
startRecording();
setTimeout(function() { stopRecording() }, 3500)

我只想将录制的视频保存到一个文件中。保存文件时,该文件最终为空。我已经被困在这里有一段时间了,如果有任何建议,我将非常感激。谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-11-29 10:30:43

嗯,我偶然发现了这个帖子:Saving desktopCapturer to video file from Electron app

并将我的stopRecording()函数更改为:

代码语言:javascript
复制
function stopRecording() {
    const save = () =>{
        toArrayBuffer(new Blob(blobs, {type: 'video/webm'}), function(ab) {
            var buffer = toBuffer(ab);
            var file = `./videos/example.webm`;
            fs.writeFile(file, buffer, function(err) {
                if (err) {
                    console.error('Failed to save video ' + err);
                } else {
                    console.log('Saved video: ' + file);
                }
            });
        });
    }
    recorder.onstop = save;
    recorder.stop();

}

而且它似乎起作用了。凉爽的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59098021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档