Skip to content

Commit 0f0e1ad

Browse files
committed
feat(): getDisplayMedia support
1 parent b9d46b7 commit 0f0e1ad

File tree

11 files changed

+94
-2
lines changed

11 files changed

+94
-2
lines changed

demo/app/standard/standard-vm.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ export class StandardViewModel extends Observable {
140140
});
141141
}
142142

143+
public shareScreen(event) {
144+
TNSRTCMediaDevices.getDisplayMedia(new TNSRTCMediaStreamConstraints(true, true))
145+
.then(mediaStream => {
146+
this.localStream = mediaStream;
147+
this.localView.srcObject = mediaStream;
148+
this.localView.mirror = false;
149+
})
150+
.catch(error => {
151+
console.log(error);
152+
});
153+
}
154+
143155
public switchCamera(event) {
144156
if (this.localStream) {
145157
for (let track of this.localStream.videoTracks) {

demo/app/standard/standard.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,7 @@ export function endCall(event) {
4040
export function switchCamera(event) {
4141
vm.switchCamera(event.object);
4242
}
43+
44+
export function shareScreen(event) {
45+
vm.shareScreen(event.object);
46+
}

demo/app/standard/standard.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
xmlns:ui="nativescript-webrtc-plugin">
33
<GridLayout rows="*,*,*">
44
<ui:WebRTCView loaded="videoLoaded" row="0" id="remoteVideoView"/>
5-
<GridLayout verticalAlignment="center" horizontalAlignment="center" row="1" rows="auto,auto,auto" columns="auto,auto,auto">
5+
<GridLayout verticalAlignment="center" horizontalAlignment="center" row="1" rows="auto,auto,auto,auto" columns="auto,auto,auto">
66
<Button tap="makeCall" row="0" col="1" text="Call"/>
77
<Button row="1" col="0" text="Switch" tap="switchCamera"/>
88
<Button row="1" col="2" text="Mute"/>
99
<Button row="2" col="1" text="End"/>
10+
<Button row="3" col="2" text="ShareScreen" tap="shareScreen"/>
1011
</GridLayout>
1112
<ui:WebRTCView row="2" id="localVideoView" loaded="videoLoaded"/>
1213
</GridLayout>

src/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nativescript-webrtc-plugin",
3-
"version": "2.0.0-alpha.12",
3+
"version": "2.0.0-alpha.13",
44
"description": "WebRTC for NativeScript",
55
"main": "webrtc",
66
"typings": "index.d.ts",
6.96 KB
Binary file not shown.

src/src/android/TNSRTCMediaDevices.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,16 @@ export class TNSRTCMediaDevices {
1414
}));
1515
});
1616
}
17+
18+
public static getDisplayMedia(constraints: TNSRTCMediaStreamConstraints): Promise<TNSRTCMediaStream> {
19+
return new Promise((resolve, reject) => {
20+
co.fitcom.fancywebrtc.FancyRTCMediaDevices.getDisplayMedia(app.android.foregroundActivity, constraints.instance, new co.fitcom.fancywebrtc.FancyRTCMediaDevices.GetUserMediaListener({
21+
onError(error: string): void {
22+
reject(error);
23+
}, onSuccess(stream: co.fitcom.fancywebrtc.FancyRTCMediaStream): void {
24+
resolve(TNSRTCMediaStream.fromNative(stream));
25+
}
26+
}));
27+
});
28+
}
1729
}

src/src/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ export declare class TNSRTCIceServer extends TNSRTCIceServerBase {
295295

296296
export declare class TNSRTCMediaDevices {
297297
static getUserMedia(constraints: TNSRTCMediaStreamConstraints): Promise<TNSRTCMediaStream>;
298+
static getDisplayMedia(constraints: TNSRTCMediaStreamConstraints): Promise<TNSRTCMediaStream>;
298299
}
299300

300301
export declare class TNSRTCMediaStream extends TNSRTCMediaStreamBase {

src/src/ios/TNSRTCMediaDevices.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,16 @@ export class TNSRTCMediaDevices {
1313
});
1414
});
1515
}
16+
17+
public static getDisplayMedia(constraints: TNSRTCMediaStreamConstraints): Promise<TNSRTCMediaStream> {
18+
return new Promise((resolve, reject) => {
19+
FancyRTCMediaDevices.getDisplayMediaWithConstraintsListener(constraints.instance, (stream: FancyRTCMediaStream, error) => {
20+
if (error) {
21+
reject(error);
22+
} else {
23+
resolve(TNSRTCMediaStream.fromNative(stream));
24+
}
25+
});
26+
});
27+
}
1628
}

src/typings/android.d.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/// <reference path="android-declarations.d.ts"/>
2+
13
declare module co {
24
export module fitcom {
35
export module fancywebrtc {
@@ -15,6 +17,38 @@ declare module co {
1517
}
1618
}
1719

20+
declare module co {
21+
export module fitcom {
22+
export module fancywebrtc {
23+
export class FancyRTCApplicationHelper {
24+
public static class: java.lang.Class<co.fitcom.fancywebrtc.FancyRTCApplicationHelper>;
25+
public requestPermissions(param0: globalAndroid.content.Context, param1: native.Array<string>, param2: number, param3: co.fitcom.fancywebrtc.FancyRTCApplicationHelper.Callback): void;
26+
public handlePermissionResult(param0: number, param1: native.Array<string>, param2: native.Array<number>): void;
27+
public handleResult(param0: number, param1: number, param2: globalAndroid.content.Intent): void;
28+
public static getInstance(): co.fitcom.fancywebrtc.FancyRTCApplicationHelper;
29+
public requestPermission(param0: globalAndroid.content.Context, param1: string, param2: number, param3: co.fitcom.fancywebrtc.FancyRTCApplicationHelper.Callback): void;
30+
public constructor();
31+
public onResult(param0: number, param1: co.fitcom.fancywebrtc.FancyRTCApplicationHelper.Callback): void;
32+
}
33+
export module FancyRTCApplicationHelper {
34+
export class Callback {
35+
public static class: java.lang.Class<co.fitcom.fancywebrtc.FancyRTCApplicationHelper.Callback>;
36+
/**
37+
* Constructs a new instance of the co.fitcom.fancywebrtc.FancyRTCApplicationHelper$Callback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
38+
*/
39+
public constructor(implementation: {
40+
onPermissionResult(param0: number, param1: native.Array<string>, param2: native.Array<number>): void;
41+
onResult(param0: number, param1: number, param2: globalAndroid.content.Intent): void;
42+
});
43+
public constructor();
44+
public onResult(param0: number, param1: number, param2: globalAndroid.content.Intent): void;
45+
public onPermissionResult(param0: number, param1: native.Array<string>, param2: native.Array<number>): void;
46+
}
47+
}
48+
}
49+
}
50+
}
51+
1852
declare module co {
1953
export module fitcom {
2054
export module fancywebrtc {
@@ -234,7 +268,9 @@ declare module co {
234268
export module fancywebrtc {
235269
export class FancyRTCMediaDevices {
236270
public static class: java.lang.Class<co.fitcom.fancywebrtc.FancyRTCMediaDevices>;
271+
public static WEBRTC_SCREEN_PERMISSIONS_REQUEST_CODE: number;
237272
public static getUserMedia(param0: globalAndroid.content.Context, param1: co.fitcom.fancywebrtc.FancyRTCMediaStreamConstraints, param2: co.fitcom.fancywebrtc.FancyRTCMediaDevices.GetUserMediaListener): void;
273+
public static getDisplayMedia(param0: globalAndroid.content.Context, param1: co.fitcom.fancywebrtc.FancyRTCMediaStreamConstraints, param2: co.fitcom.fancywebrtc.FancyRTCMediaDevices.GetUserMediaListener): void;
238274
public constructor();
239275
}
240276
export module FancyRTCMediaDevices {

src/typings/objc!FancyWebRTC.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ declare class FancyRTCMediaDevices extends NSObject {
245245

246246
static alloc(): FancyRTCMediaDevices; // inherited from NSObject
247247

248+
static getDisplayMediaWithConstraintsListener(constraints: FancyRTCMediaStreamConstraints, listener: (p1: FancyRTCMediaStream, p2: string) => void): void;
249+
248250
static getUserMediaWithConstraintsListener(constraints: FancyRTCMediaStreamConstraints, listener: (p1: FancyRTCMediaStream, p2: string) => void): void;
249251

250252
static new(): FancyRTCMediaDevices; // inherited from NSObject

0 commit comments

Comments
 (0)