|
@@ -83,6 +83,8 @@ const ScreenObtainer = {
|
83
|
83
|
};
|
84
|
84
|
} else if (browser.isElectron()) {
|
85
|
85
|
return this.obtainScreenOnElectron;
|
|
86
|
+ } else if (browser.isReactNative() && browser.supportsGetDisplayMedia()) {
|
|
87
|
+ return this.obtainScreenFromGetDisplayMediaRN;
|
86
|
88
|
} else if (browser.supportsGetDisplayMedia()) {
|
87
|
89
|
return this.obtainScreenFromGetDisplayMedia;
|
88
|
90
|
}
|
|
@@ -207,6 +209,27 @@ const ScreenObtainer = {
|
207
|
209
|
|
208
|
210
|
errorCallback(new JitsiTrackError(JitsiTrackErrors.SCREENSHARING_USER_CANCELED));
|
209
|
211
|
});
|
|
212
|
+ },
|
|
213
|
+
|
|
214
|
+ /**
|
|
215
|
+ * Obtains a screen capture stream using getDisplayMedia.
|
|
216
|
+ *
|
|
217
|
+ * @param callback - The success callback.
|
|
218
|
+ * @param errorCallback - The error callback.
|
|
219
|
+ */
|
|
220
|
+ obtainScreenFromGetDisplayMediaRN(options, callback, errorCallback) {
|
|
221
|
+ logger.info('Using getDisplayMedia for screen sharing');
|
|
222
|
+
|
|
223
|
+ navigator.mediaDevices.getDisplayMedia({ video: true })
|
|
224
|
+ .then(stream => {
|
|
225
|
+ callback({
|
|
226
|
+ stream,
|
|
227
|
+ sourceId: stream.id });
|
|
228
|
+ })
|
|
229
|
+ .catch(() => {
|
|
230
|
+ errorCallback(new JitsiTrackError(JitsiTrackErrors
|
|
231
|
+ .SCREENSHARING_USER_CANCELED));
|
|
232
|
+ });
|
210
|
233
|
}
|
211
|
234
|
};
|
212
|
235
|
|