Как сделать совместное использование экрана в приложении Electron? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать два приложения для совместного использования экрана в среде LAN, используя Electron, React и TypeScript. Одно приложение будет захватывать экранный поток и выполнять широковещательную передачу UDP, а другое приложение, которое будет работать на нескольких устройствах, получит поток и отобразит его. Я изучил desktopCapturer API, предоставленный Electron, но при запуске этого примера кода произошла ошибка:

desktopCapturer
      .getSources({ types: ["window", "screen"] })
      .then(async (sources) => {
        for (const source of sources) {
          if (source.name === "Entire Screen") {
            const displayMediaOptions = {
              video: {
                cursor: "always",
                mandatory: {
                  chromeMediaSource: "desktop",
                  chromeMediaSourceId: source.id,
                  maxWidth: 800,
                  maxHeight: 700,
                },
              },
              audio: false,
            };

            try {
              const stream = await navigator.mediaDevices.getUserMedia(
                displayMediaOptions
              );
              handleStream(stream);
            } catch (e) {
              handleError(e);
            }
            return;
          }
        }
      });

Ошибка:

Argument of type '{ video: { cursor: string; mandatory: { chromeMediaSource: string; chromeMediaSourceId: string; maxWidth: number; maxHeight: number; }; }; audio: boolean; }' is not assignable to parameter of type 'MediaStreamConstraints'.
  Types of property 'video' are incompatible.
    Type '{ cursor: string; mandatory: { chromeMediaSource: string; chromeMediaSourceId: string; maxWidth: number; maxHeight: number; }; }' is not assignable to type 'boolean | MediaTrackConstraints'.
      Type '{ cursor: string; mandatory: { chromeMediaSource: string; chromeMediaSourceId: string; maxWidth: number; maxHeight: number; }; }' has no properties in common with type 'MediaTrackConstraints'.ts(2345)

Я посмотрел в MediaTrackConstraints и обнаружил, что он не поддерживает свойство mandatory. Я также обнаружил, что WebRT C может быть полезным, но не знаю, будет ли он работать в среде LAN без поддержки серверов?

Итак, мне интересно, есть ли какие-либо обходные пути для этой проблемы или какие другие технологии я могу использовать для совместного использования экрана в локальной сети?

...