久久久久久久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 服務器時的歡迎消息)
主站蜘蛛池模板: 精品日韩一区二区三区 | 精品免费观看 | 日韩精品在线一区 | 国产精品免费看 | 日韩在线看片 | 日韩中文字幕高清 | 国产小视频在线看 | av免费看在线 | 欧美精品一区二区在线观看 | 米奇7777狠狠狠狠视频 | 妹子干综合 | 青青草这里只有精品 | 中文字幕乱码一区二区三区 | 欧美日韩电影一区二区 | 97成人精品| 久久久免费精品 | 精品一区av | 亚洲久草 | 国产精品日日做人人爱 | 91久久爽久久爽爽久久片 | 视频1区2区 | 久久精品国产一区 | 在线色| 日韩欧美在线不卡 | 成人a视频在线观看 | 欧美一级免费片 | 国产一区二区在线视频 | 日韩一区二区三区在线 | 99精品99| 国产综合久久久 | h在线| 欧美专区日韩 | 国产精品久久国产精品 | 亚洲欧美中文日韩在线v日本 | 亚洲精彩视频 | 久久精品a | 午夜性色a√在线视频观看9 | 美女国内精品自产拍在线播放 | 欧美日韩国产精品一区 | 午夜视频在线观看一区二区 | 人人爽日日躁夜夜躁尤物 |