久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

將 desktopCapturer 保存到 Electron 中的視頻文件

Saving desktopCapturer to video file in Electron(將 desktopCapturer 保存到 Electron 中的視頻文件)
本文介紹了將 desktopCapturer 保存到 Electron 中的視頻文件的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

desktopCapturer api 示例展示了如何將屏幕捕獲流寫入 <video> 元素.

The desktopCapturer api example shows how to write a screen capture stream to a <video> element.

// In the renderer process.
var desktopCapturer = require('electron').desktopCapturer;

desktopCapturer.getSources({types: ['window', 'screen']}, function(error, sources) {
  if (error) throw error;
  for (var i = 0; i < sources.length; ++i) {
    if (sources[i].name == "Electron") {
      navigator.webkitGetUserMedia({
        audio: false,
        video: {
          mandatory: {
            chromeMediaSource: 'desktop',
            chromeMediaSourceId: sources[i].id,
            minWidth: 1280,
            maxWidth: 1280,
            minHeight: 720,
            maxHeight: 720
          }
        }
      }, gotStream, getUserMediaError);
      return;
    }
  }
});

function gotStream(stream) {
  document.querySelector('video').src = URL.createObjectURL(stream);
}

function getUserMediaError(e) {
  console.log('getUserMediaError');
}

我嘗試將 gotStream 函數替換為以下內容:

I tried to replace the gotStream function with the following:

function gotStream(stream) {
  var fs = require('fs');
  fs.writeFileSync('vid.mp4', stream);
}

這將創建一個以 [object MediaStream] 作為內容的文本文件.

This creates a text file with [object MediaStream] as the contents.

如何記錄此流并保存到磁盤上的文件中?

How can I record this stream and save to a file on disk?

推薦答案

我在 Demian 的 MediaRecorder 鏈接以及其他相關問題的幫助下回答了我自己的問題.

I answered my own question with the help of Demian's link to MediaRecorder as well as other related questions.

以下是 magnemite 的摘錄簡化并從 TypeScript 轉換為 JavaScript ES5,以便大多數讀者更好地理解.

Below is an excerpt from magnemite with some minor simplifications and converted from TypeScript to JavaScript ES5 for better understanding to most readers.

var fs = require('fs');
var electron = require('electron');

var SECRET_KEY = 'Magnemite';

var recorder;
var blobs = [];

function startRecording() {
    var title = document.title;
    document.title = SECRET_KEY;

    electron.desktopCapturer.getSources({ types: ['window', 'screen'] }, function(error, sources) {
        if (error) throw error;
        for (let i = 0; i < sources.length; i++) {
            let src = sources[i];
            if (src.name === SECRET_KEY) {
                document.title = title;

                navigator.webkitGetUserMedia({
                    audio: false,
                    video: {
                        mandatory: {
                            chromeMediaSource: 'desktop',
                            chromeMediaSourceId: src.id,
                            minWidth: 800,
                            maxWidth: 1280,
                            minHeight: 600,
                            maxHeight: 720
                        }
                    }
                }, handleStream, handleUserMediaError);
                return;
            }
        }
    });
}

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

function stopRecording() {
    recorder.stop();
    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) {
    return Buffer.from(ab);
}

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

這將記錄當前電子窗口 7 秒并保存到磁盤.

This will record the current electron window for 7 seconds and save to disk.

這篇關于將 desktopCapturer 保存到 Electron 中的視頻文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

discord.js v12: How do I await for messages in a DM channel?(discord.js v12:我如何等待 DM 頻道中的消息?)
how to make my bot mention the person who gave that bot command(如何讓我的機器人提及發出該機器人命令的人)
How to fix Must use import to load ES Module discord.js(如何修復必須使用導入來加載 ES 模塊 discord.js)
How to list all members from a specific server?(如何列出來自特定服務器的所有成員?)
Discord bot: Fix ‘FFMPEG not found’(Discord bot:修復“找不到 FFMPEG)
Welcome message when joining discord Server using discord.js(使用 discord.js 加入 discord 服務器時的歡迎消息)
主站蜘蛛池模板: 亚洲精品二区 | 超碰在线97国产 | 日韩精品一区二区三区视频播放 | 久久精品91| 亚洲成人免费 | 欧美 日韩 亚洲91麻豆精品 | 久久久久中文字幕 | 久久伊 | 亚洲嫩草| 最新日韩在线视频 | 99av成人精品国语自产拍 | 综合自拍 | 五月天天丁香婷婷在线中 | 国产精品日韩 | 国产欧美一区二区久久性色99 | 日本天堂一区二区 | 99热在线播放 | 欧美一区二区三区国产精品 | 中文字幕1区 | 国产高清一区二区 | 欧美黄色免费网站 | 亚洲精品久 | 极品销魂美女一区二区 | 超碰精品在线观看 | www精品| 中文字幕亚洲区一区二 | 日韩精品在线看 | 国产一级片精品 | 天堂中文在线观看 | 99精品网| 中文字幕国产视频 | 人人99| 成人在线观看免费观看 | 91视频在线观看 | 欧美日韩成人在线 | 国产精品久久久久久久久免费樱桃 | 天天操网 | 免费在线观看成人 | 欧美日韩一区二区三区四区五区 | 亚洲人在线播放 | 欧美久久一区二区三区 |