Запишите рабочий стол с помощью Electron - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю электрон, в котором мне нужен API desktopCapturer, но я не совсем понимаю, как его использовать.

С официальной страницы API (и пример приложения: https://github.com/hokein/electron-sample-apps/tree/master/desktop-capture) Я вижу, что desktopCapturer дает мне только идентификаторы источников, а не сами видеопотоки. Для этого я должен использовать navigator.mediaDevices.getUserMedia(). Но объект ограничений больше не имеет свойства mandatory, и потому яя использую машинопись Я получаю сообщение об ошибке, если пытаюсь его использовать.

Я пытался использовать свойство deviceId, но получаю эту ошибку: Uncaught (in promise) DOMException: Requested device not found (на устройстве свеб-камера Я получаю поток веб-камеры вместо этой ошибки). Вот мой код:

import { desktopCapturer, DesktopCapturerSource } from "electron";

function onLoad(){
    desktopCapturer.getSources({
        thumbnailSize: {
            width: 256,
            height: 256,
        },
        types: ["screen", "window"]
    }, (error: Error, srcs: DesktopCapturerSource[]) => {
        if (error)
            throw error;
        let video: HTMLVideoElement | null = document.querySelector("video");
        for (let src of srcs)
            navigator.mediaDevices.getUserMedia({
                video:{
                    deviceId : src.id
                }
            }).then((stream:MediaStream)=>{
                if(video){
                    video.srcObject = stream;
                    video.play();
                }
            })
    })
}

document.addEventListener("DOMContentLoaded", onLoad);

Я также пытался использовать navigator.getDisplayMedia(), но я не получил бы всплывающее окно с предложением выбрать источниккак я получу в Chrome. Что я должен сделать, чтобы это работало? Заранее спасибо!

1 Ответ

0 голосов
/ 02 декабря 2018

Я нашел решение, по крайней мере, для нового, поскольку WebRTC еще не стандартизирован.Копирование объекта навигатора в переменную и приведение к any позволяет использовать свойство mandatory для объекта ограничений, поскольку машинопись больше не проверяет совместимость типов

...