Kaynağa Gözat

Merge pull request #538 from jitsi/remote_control

Remote control
dev1
virtuacoplenny 8 yıl önce
ebeveyn
işleme
cac41a6057

+ 3
- 1
modules/RTC/JitsiLocalTrack.js Dosyayı Görüntüle

@@ -73,7 +73,8 @@ export default class JitsiLocalTrack extends JitsiTrack {
73 73
             resolution,
74 74
             deviceId,
75 75
             facingMode,
76
-            sourceId
76
+            sourceId,
77
+            sourceType
77 78
         } = trackInfo;
78 79
 
79 80
         super(
@@ -97,6 +98,7 @@ export default class JitsiLocalTrack extends JitsiTrack {
97 98
         this.dontFireRemoveEvent = false;
98 99
         this.resolution = resolution;
99 100
         this.sourceId = sourceId;
101
+        this.sourceType = sourceType;
100 102
 
101 103
         // FIXME: currently firefox is ignoring our constraints about
102 104
         // resolutions so we do not store it, to avoid wrong reporting of local

+ 6
- 3
modules/RTC/RTCUtils.js Dosyayı Görüntüle

@@ -629,11 +629,12 @@ function handleLocalStream(streams, resolution) {
629 629
     }
630 630
 
631 631
     if (desktopStream) {
632
-        const { stream, sourceId } = desktopStream;
632
+        const { stream, sourceId, sourceType } = desktopStream;
633 633
 
634 634
         res.push({
635 635
             stream,
636 636
             sourceId,
637
+            sourceType,
637 638
             track: stream.getVideoTracks()[0],
638 639
             mediaType: MediaType.VIDEO,
639 640
             videoType: VideoType.DESKTOP
@@ -1061,8 +1062,10 @@ class RTCUtils extends Listenable {
1061 1062
     obtainAudioAndVideoPermissions(options = {}) {
1062 1063
         const self = this;
1063 1064
 
1064
-        const dsOptions = options.desktopSharingExtensionExternalInstallation;
1065
-
1065
+        const dsOptions = {
1066
+            ...options.desktopSharingExtensionExternalInstallation,
1067
+            desktopSharingSources: options.desktopSharingSources
1068
+        };
1066 1069
 
1067 1070
         return new Promise((resolve, reject) => {
1068 1071
             const successCallback = function(stream) {

+ 65
- 25
modules/RTC/ScreenObtainer.js Dosyayı Görüntüle

@@ -116,26 +116,7 @@ const ScreenObtainer = {
116 116
                     });
117 117
             };
118 118
         } else if (RTCBrowserType.isElectron()) {
119
-            obtainDesktopStream = (_, onSuccess, onFailure) => {
120
-                if (window.JitsiMeetScreenObtainer
121
-                    && window.JitsiMeetScreenObtainer.openDesktopPicker) {
122
-                    window.JitsiMeetScreenObtainer.openDesktopPicker(
123
-                        streamId =>
124
-                            onGetStreamResponse(
125
-                                { streamId },
126
-                                onSuccess,
127
-                                onFailure
128
-                            ),
129
-                        err => onFailure(new JitsiTrackError(
130
-                            JitsiTrackErrors.ELECTRON_DESKTOP_PICKER_ERROR,
131
-                            err
132
-                        ))
133
-                    );
134
-                } else {
135
-                    onFailure(new JitsiTrackError(
136
-                        JitsiTrackErrors.ELECTRON_DESKTOP_PICKER_NOT_FOUND));
137
-                }
138
-            };
119
+            obtainDesktopStream = this.obtainScreenOnElectron;
139 120
         } else if (RTCBrowserType.isTemasysPluginUsed()) {
140 121
             // XXX Don't require Temasys unless it's to be used because it
141 122
             // doesn't run on React Native, for example.
@@ -256,13 +237,66 @@ const ScreenObtainer = {
256 237
             new JitsiTrackError(JitsiTrackErrors.FIREFOX_EXTENSION_NEEDED));
257 238
     },
258 239
 
240
+    /**
241
+     * Obtains a screen capture stream on Electron.
242
+     *
243
+     * @param {Object} [options] - Screen sharing options.
244
+     * @param {Array<string>} [options.desktopSharingSources] - Array with the
245
+     * sources that have to be displayed in the desktop picker window ('screen',
246
+     * 'window', etc.).
247
+     * @param onSuccess - Success callback.
248
+     * @param onFailure - Failure callback.
249
+     */
250
+    obtainScreenOnElectron(options = {}, onSuccess, onFailure) {
251
+        if (window.JitsiMeetScreenObtainer
252
+            && window.JitsiMeetScreenObtainer.openDesktopPicker) {
253
+            window.JitsiMeetScreenObtainer.openDesktopPicker(
254
+                {
255
+                    desktopSharingSources:
256
+                        options.desktopSharingSources
257
+                            || this.options.desktopSharingChromeSources
258
+                },
259
+                (streamId, streamType) =>
260
+                    onGetStreamResponse(
261
+                        {
262
+                            streamId,
263
+                            streamType
264
+                        },
265
+                        onSuccess,
266
+                        onFailure
267
+                    ),
268
+                err => onFailure(new JitsiTrackError(
269
+                    JitsiTrackErrors.ELECTRON_DESKTOP_PICKER_ERROR,
270
+                    err
271
+                ))
272
+            );
273
+        } else {
274
+            onFailure(new JitsiTrackError(
275
+                JitsiTrackErrors.ELECTRON_DESKTOP_PICKER_NOT_FOUND));
276
+        }
277
+    },
278
+
259 279
     /**
260 280
      * Asks Chrome extension to call chooseDesktopMedia and gets chrome
261 281
      * 'desktop' stream for returned stream token.
262 282
      */
263 283
     obtainScreenFromExtension(options, streamCallback, failCallback) {
284
+        const {
285
+            desktopSharingChromeExtId,
286
+            desktopSharingChromeSources
287
+        } = this.options;
288
+
289
+        const gumOptions = {
290
+            desktopSharingChromeExtId,
291
+            desktopSharingChromeSources:
292
+                options.desktopSharingSources
293
+                    || desktopSharingChromeSources
294
+        };
295
+
264 296
         if (chromeExtInstalled) {
265
-            doGetStreamFromExtension(this.options, streamCallback,
297
+            doGetStreamFromExtension(
298
+                gumOptions,
299
+                streamCallback,
266 300
                 failCallback);
267 301
         } else {
268 302
             if (chromeExtUpdateRequired) {
@@ -285,8 +319,10 @@ const ScreenObtainer = {
285 319
                         // available.
286 320
                         waitForExtensionAfterInstall(this.options, 200, 10)
287 321
                             .then(() => {
288
-                                doGetStreamFromExtension(this.options,
289
-                                    streamCallback, failCallback);
322
+                                doGetStreamFromExtension(
323
+                                    gumOptions,
324
+                                    streamCallback,
325
+                                    failCallback);
290 326
                             })
291 327
                             .catch(() => {
292 328
                                 this.handleExtensionInstallationError(options,
@@ -570,13 +606,17 @@ function waitForExtensionAfterInstall(options, waitInterval, retries) {
570 606
  * @param {Function} onSuccess - callback for success.
571 607
  * @param {Function} onFailure - callback for failure.
572 608
  */
573
-function onGetStreamResponse({ streamId, error }, onSuccess, onFailure) {
609
+function onGetStreamResponse(
610
+        { streamId, streamType, error },
611
+        onSuccess,
612
+        onFailure) {
574 613
     if (streamId) {
575 614
         gumFunction(
576 615
             [ 'desktop' ],
577 616
             stream => onSuccess({
578 617
                 stream,
579
-                sourceId: streamId
618
+                sourceId: streamId,
619
+                sourceType: streamType
580 620
             }),
581 621
             onFailure,
582 622
             { desktopStream: streamId });

Loading…
İptal
Kaydet