@100mslive/react-native-hms 0.9.91 → 0.9.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +1 -1
- package/ios/HMSDecoder.swift +21 -24
- package/ios/HMSHelper.swift +42 -8
- package/ios/HMSManager.m +11 -0
- package/ios/HMSManager.swift +87 -18
- package/ios/HMSRNSDK.swift +308 -119
- package/ios/HMSView.swift +3 -4
- package/lib/commonjs/classes/HMSAudioFilePlayerNode.js +87 -0
- package/lib/commonjs/classes/HMSAudioFilePlayerNode.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioMixerSource.js +26 -0
- package/lib/commonjs/classes/HMSAudioMixerSource.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioNode.js +26 -0
- package/lib/commonjs/classes/HMSAudioNode.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioTrackSettings.js +6 -0
- package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSEncoder.js +3 -2
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSException.js +7 -0
- package/lib/commonjs/classes/HMSException.js.map +1 -1
- package/lib/commonjs/classes/HMSMicNode.js +35 -0
- package/lib/commonjs/classes/HMSMicNode.js.map +1 -0
- package/lib/commonjs/classes/HMSSDK.js +22 -34
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSScreenBroadcastAudioReceiverNode.js +18 -0
- package/lib/commonjs/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -0
- package/lib/commonjs/index.js +70 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/classes/HMSAudioFilePlayerNode.js +75 -0
- package/lib/module/classes/HMSAudioFilePlayerNode.js.map +1 -0
- package/lib/module/classes/HMSAudioMixerSource.js +17 -0
- package/lib/module/classes/HMSAudioMixerSource.js.map +1 -0
- package/lib/module/classes/HMSAudioNode.js +17 -0
- package/lib/module/classes/HMSAudioNode.js.map +1 -0
- package/lib/module/classes/HMSAudioTrackSettings.js +6 -0
- package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSEncoder.js +3 -2
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSException.js +7 -0
- package/lib/module/classes/HMSException.js.map +1 -1
- package/lib/module/classes/HMSMicNode.js +23 -0
- package/lib/module/classes/HMSMicNode.js.map +1 -0
- package/lib/module/classes/HMSSDK.js +21 -33
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSScreenBroadcastAudioReceiverNode.js +8 -0
- package/lib/module/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/classes/HMSAudioFilePlayerNode.d.ts +12 -0
- package/lib/typescript/classes/HMSAudioMixerSource.d.ts +8 -0
- package/lib/typescript/classes/HMSAudioNode.d.ts +6 -0
- package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +4 -2
- package/lib/typescript/classes/HMSException.d.ts +8 -6
- package/lib/typescript/classes/HMSMicNode.d.ts +5 -0
- package/lib/typescript/classes/HMSSDK.d.ts +28 -26
- package/lib/typescript/classes/HMSScreenBroadcastAudioReceiverNode.d.ts +4 -0
- package/lib/typescript/index.d.ts +5 -0
- package/package.json +1 -1
- package/react-native-hms.podspec +2 -1
- package/src/classes/HMSAudioFilePlayerNode.ts +75 -0
- package/src/classes/HMSAudioMixerSource.ts +15 -0
- package/src/classes/HMSAudioNode.ts +12 -0
- package/src/classes/HMSAudioTrackSettings.ts +7 -4
- package/src/classes/HMSEncoder.ts +1 -0
- package/src/classes/HMSException.ts +9 -6
- package/src/classes/HMSMicNode.ts +23 -0
- package/src/classes/HMSSDK.tsx +47 -58
- package/src/classes/HMSScreenBroadcastAudioReceiverNode.ts +7 -0
- package/src/index.ts +5 -0
package/ios/HMSRNSDK.swift
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
9
|
import HMSSDK
|
|
10
|
+
import ReplayKit
|
|
10
11
|
|
|
11
12
|
class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
12
13
|
|
|
@@ -18,6 +19,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
18
19
|
var rtcStatsAttached = false
|
|
19
20
|
var recentPreviewTracks: [HMSTrack]? = []
|
|
20
21
|
private var reconnectingStage: Bool = false
|
|
22
|
+
private var preferredExtension: String?
|
|
23
|
+
private var systemBroadcastPicker: RPSystemBroadcastPickerView?
|
|
24
|
+
private var startScreenshareResolve: RCTPromiseResolveBlock?
|
|
25
|
+
private var stopScreenshareResolve: RCTPromiseResolveBlock?
|
|
26
|
+
private var isScreenShared: Bool? = false
|
|
27
|
+
private var previewInProgress = false
|
|
21
28
|
|
|
22
29
|
let ON_PREVIEW = "ON_PREVIEW"
|
|
23
30
|
let ON_JOIN = "ON_JOIN"
|
|
@@ -38,14 +45,16 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
38
45
|
let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
|
|
39
46
|
|
|
40
47
|
// MARK: - Setup
|
|
41
|
-
|
|
42
48
|
init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
preferredExtension = data?.value(forKey: "preferredExtension") as? String
|
|
50
|
+
|
|
45
51
|
DispatchQueue.main.async { [weak self] in
|
|
46
|
-
let hmsTrackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
|
|
47
52
|
self?.hms = HMSSDK.build { sdk in
|
|
48
|
-
sdk.
|
|
53
|
+
sdk.appGroup = data?.value(forKey: "appGroup") as? String
|
|
54
|
+
let trackSettings = data?.value(forKey: "trackSettings") as? NSDictionary
|
|
55
|
+
let videoSettings = HMSHelper.getLocalVideoSettings(trackSettings?.value(forKey: "video") as? NSDictionary)
|
|
56
|
+
let audioSettings = HMSHelper.getLocalAudioSettings(trackSettings?.value(forKey: "audio") as? NSDictionary, sdk, self?.delegate, id)
|
|
57
|
+
sdk.trackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
self.delegate = manager
|
|
@@ -53,18 +62,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
// MARK: - HMS SDK Actions
|
|
56
|
-
|
|
57
|
-
private var previewInProgress = false
|
|
58
|
-
|
|
59
|
-
func emitRequiredKeysError(_ error: String) {
|
|
60
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": HMSErrorCode.genericErrorUnknown.rawValue, "description": error, "message": error, "name": "REQUIRED_KEYS_NOT_FOUND", "action": "SEND_ALL_REQUIRED_KEYS", "id": 102, "isTerminal": false], "id": id])
|
|
61
|
-
}
|
|
62
|
-
|
|
63
65
|
func preview(_ credentials: NSDictionary) {
|
|
64
66
|
|
|
65
67
|
guard !previewInProgress else {
|
|
66
|
-
|
|
67
|
-
on(error: error)
|
|
68
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
68
69
|
return
|
|
69
70
|
}
|
|
70
71
|
|
|
@@ -78,7 +79,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
78
79
|
|
|
79
80
|
let metadata = credentials.value(forKey: "metadata") as? String
|
|
80
81
|
let captureNetworkQualityInPreview = credentials.value(forKey: "captureNetworkQualityInPreview") as? Bool ?? false
|
|
81
|
-
|
|
82
|
+
|
|
82
83
|
DispatchQueue.main.async { [weak self] in
|
|
83
84
|
guard let strongSelf = self else { return }
|
|
84
85
|
if let endpoint = credentials.value(forKey: "endpoint") as? String {
|
|
@@ -91,7 +92,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
91
92
|
strongSelf.previewInProgress = true
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
|
|
95
96
|
func previewForRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
96
97
|
guard let role = data.value(forKey: "role") as? String
|
|
97
98
|
else {
|
|
@@ -100,26 +101,26 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
100
101
|
reject?(errorMessage, errorMessage, nil)
|
|
101
102
|
return
|
|
102
103
|
}
|
|
103
|
-
|
|
104
|
+
|
|
104
105
|
let roleObj = HMSHelper.getRoleFromRoleName(role, roles: hms?.roles)
|
|
105
|
-
|
|
106
|
+
|
|
106
107
|
if let extractedRole = roleObj {
|
|
107
108
|
hms?.preview(role: extractedRole, completion: { tracks, error in
|
|
108
|
-
if
|
|
109
|
+
if error != nil {
|
|
109
110
|
delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
110
|
-
reject?(error?.
|
|
111
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
111
112
|
return
|
|
112
113
|
}
|
|
113
114
|
self.recentPreviewTracks = tracks
|
|
114
|
-
|
|
115
|
+
|
|
115
116
|
let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
|
|
116
|
-
|
|
117
|
+
|
|
117
118
|
resolve?(["success": true, "tracks": decodedTracks])
|
|
118
119
|
return
|
|
119
120
|
})
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
|
-
|
|
123
|
+
|
|
123
124
|
func cancelPreview() {
|
|
124
125
|
self.recentPreviewTracks = []
|
|
125
126
|
hms?.cancelPreview()
|
|
@@ -128,8 +129,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
128
129
|
func join(_ credentials: NSDictionary) {
|
|
129
130
|
|
|
130
131
|
guard !previewInProgress else {
|
|
131
|
-
|
|
132
|
-
on(error: error)
|
|
132
|
+
delegate?.emitEvent("ON_ERROR", ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
133
133
|
return
|
|
134
134
|
}
|
|
135
135
|
|
|
@@ -193,19 +193,24 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
196
|
-
if
|
|
197
|
-
reject?("
|
|
196
|
+
if reconnectingStage {
|
|
197
|
+
reject?("Still in reconnecting stage", "Still in reconnecting stage", nil)
|
|
198
198
|
} else {
|
|
199
199
|
DispatchQueue.main.async { [weak self] in
|
|
200
200
|
guard let strongSelf = self else { return }
|
|
201
201
|
self?.config = nil
|
|
202
202
|
self?.recentRoleChangeRequest = nil
|
|
203
|
+
self?.systemBroadcastPicker = nil
|
|
204
|
+
self?.preferredExtension = nil
|
|
205
|
+
self?.stopScreenshareResolve = nil
|
|
206
|
+
self?.startScreenshareResolve = nil
|
|
207
|
+
self?.isScreenShared = false
|
|
203
208
|
self?.hms?.leave({ success, error in
|
|
204
209
|
if success {
|
|
205
210
|
resolve?(["success": success])
|
|
206
211
|
} else {
|
|
207
212
|
strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
|
|
208
|
-
reject?(
|
|
213
|
+
reject?("error in leave", "error in leave", nil)
|
|
209
214
|
}
|
|
210
215
|
})
|
|
211
216
|
}
|
|
@@ -230,7 +235,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
230
235
|
return
|
|
231
236
|
} else {
|
|
232
237
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
233
|
-
reject?(error?.
|
|
238
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
234
239
|
return
|
|
235
240
|
}
|
|
236
241
|
})
|
|
@@ -256,7 +261,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
256
261
|
return
|
|
257
262
|
} else {
|
|
258
263
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
259
|
-
reject?(error?.
|
|
264
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
260
265
|
return
|
|
261
266
|
}
|
|
262
267
|
})
|
|
@@ -282,7 +287,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
282
287
|
return
|
|
283
288
|
} else {
|
|
284
289
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
285
|
-
reject?(error?.
|
|
290
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
286
291
|
return
|
|
287
292
|
}
|
|
288
293
|
})
|
|
@@ -306,7 +311,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
306
311
|
resolve?(["success": success])
|
|
307
312
|
} else {
|
|
308
313
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
309
|
-
reject?(error?.
|
|
314
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
310
315
|
}
|
|
311
316
|
})
|
|
312
317
|
self?.recentPreviewTracks = []
|
|
@@ -337,7 +342,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
337
342
|
resolve?(["success": success])
|
|
338
343
|
} else {
|
|
339
344
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
340
|
-
reject?(error?.
|
|
345
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
341
346
|
}
|
|
342
347
|
})
|
|
343
348
|
}
|
|
@@ -358,9 +363,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
358
363
|
DispatchQueue.main.async { [weak self] in
|
|
359
364
|
guard let remotePeers = self?.hms?.remotePeers,
|
|
360
365
|
let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
|
|
361
|
-
else {
|
|
362
|
-
reject?(
|
|
363
|
-
return
|
|
366
|
+
else {
|
|
367
|
+
reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
|
|
368
|
+
return
|
|
364
369
|
}
|
|
365
370
|
|
|
366
371
|
self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
|
|
@@ -368,7 +373,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
368
373
|
resolve?(["success": success])
|
|
369
374
|
} else {
|
|
370
375
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
371
|
-
reject?(error?.
|
|
376
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
372
377
|
}
|
|
373
378
|
})
|
|
374
379
|
}
|
|
@@ -403,7 +408,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
403
408
|
resolve?(["success": success])
|
|
404
409
|
} else {
|
|
405
410
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
406
|
-
reject?(error?.
|
|
411
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
407
412
|
}
|
|
408
413
|
})
|
|
409
414
|
}
|
|
@@ -426,9 +431,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
426
431
|
guard let remotePeers = self?.hms?.remotePeers,
|
|
427
432
|
let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
|
|
428
433
|
else {
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
reject?(nil, "TRACK_NOT_FOUND", nil)
|
|
434
|
+
strongSelf.delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": strongSelf.id])
|
|
435
|
+
reject?("Track not found", "Track not found", nil)
|
|
432
436
|
return
|
|
433
437
|
}
|
|
434
438
|
let mute = track.isMute()
|
|
@@ -456,9 +460,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
456
460
|
|
|
457
461
|
guard let remotePeers = self?.hms?.remotePeers,
|
|
458
462
|
let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
|
|
459
|
-
else {
|
|
460
|
-
reject?(
|
|
461
|
-
return
|
|
463
|
+
else {
|
|
464
|
+
reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
|
|
465
|
+
return
|
|
462
466
|
}
|
|
463
467
|
|
|
464
468
|
self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
|
|
@@ -466,7 +470,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
466
470
|
resolve?(["success": success])
|
|
467
471
|
} else {
|
|
468
472
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
469
|
-
reject?(error?.
|
|
473
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
470
474
|
}
|
|
471
475
|
})
|
|
472
476
|
}
|
|
@@ -489,7 +493,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
489
493
|
resolve?(["success": success])
|
|
490
494
|
} else {
|
|
491
495
|
self?.delegate?.emitEvent("ON_ERROR", ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
492
|
-
reject?(error?.
|
|
496
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
493
497
|
}
|
|
494
498
|
})
|
|
495
499
|
}
|
|
@@ -506,7 +510,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
506
510
|
DispatchQueue.main.async { [weak self] in
|
|
507
511
|
guard let remotePeers = self?.hms?.remotePeers
|
|
508
512
|
else {
|
|
509
|
-
reject?(
|
|
513
|
+
reject?("REMOTE_PEERS_NOT_FOUND", "REMOTE_PEERS_NOT_FOUND", nil)
|
|
510
514
|
return
|
|
511
515
|
}
|
|
512
516
|
let remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
|
|
@@ -520,7 +524,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
520
524
|
resolve?(isPlaybackAllowed)
|
|
521
525
|
return
|
|
522
526
|
} else {
|
|
523
|
-
reject?(
|
|
527
|
+
reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
|
|
524
528
|
return
|
|
525
529
|
}
|
|
526
530
|
}
|
|
@@ -574,7 +578,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
574
578
|
return
|
|
575
579
|
} else {
|
|
576
580
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
577
|
-
reject?(error?.
|
|
581
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
578
582
|
return
|
|
579
583
|
}
|
|
580
584
|
})
|
|
@@ -598,8 +602,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
598
602
|
if remoteAudioTrack != nil {
|
|
599
603
|
remoteAudioTrack?.setVolume(volume)
|
|
600
604
|
} else {
|
|
601
|
-
|
|
602
|
-
strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
|
|
605
|
+
strongSelf.delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": strongSelf.id])
|
|
603
606
|
}
|
|
604
607
|
}
|
|
605
608
|
}
|
|
@@ -620,9 +623,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
620
623
|
if let meetLink = URL(string: meetingString) {
|
|
621
624
|
meetingUrl = meetLink
|
|
622
625
|
} else {
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
reject?("INVALID_MEETING_URL_PASSED", "INVALID_MEETING_URL_PASSED", nil)
|
|
626
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Invalid meeting url passed", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
627
|
+
reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
|
|
626
628
|
}
|
|
627
629
|
|
|
628
630
|
let URLs = HMSHelper.getRtmpUrls(rtmpStrings)
|
|
@@ -640,7 +642,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
640
642
|
return
|
|
641
643
|
} else {
|
|
642
644
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
643
|
-
reject?(error?.
|
|
645
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
644
646
|
return
|
|
645
647
|
}
|
|
646
648
|
})
|
|
@@ -659,7 +661,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
659
661
|
return
|
|
660
662
|
} else {
|
|
661
663
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
662
|
-
reject?(error?.
|
|
664
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
663
665
|
return
|
|
664
666
|
}
|
|
665
667
|
})
|
|
@@ -667,9 +669,9 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
667
669
|
|
|
668
670
|
func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
669
671
|
let recordConfig = HMSHelper.getHlsRecordingConfig(data.value(forKey: "hlsRecordingConfig") as? NSDictionary)
|
|
670
|
-
let hlsMeetingUrlVariant = HMSHelper.getHMSHLSMeetingURLVariants(data.value(forKey: "meetingURLVariants") as? [[String
|
|
671
|
-
var config: HMSHLSConfig?
|
|
672
|
-
if
|
|
672
|
+
let hlsMeetingUrlVariant = HMSHelper.getHMSHLSMeetingURLVariants(data.value(forKey: "meetingURLVariants") as? [[String: Any]])
|
|
673
|
+
var config: HMSHLSConfig?
|
|
674
|
+
if !hlsMeetingUrlVariant.isEmpty || recordConfig !== nil {
|
|
673
675
|
config = HMSHLSConfig(variants: hlsMeetingUrlVariant, recording: recordConfig)
|
|
674
676
|
}
|
|
675
677
|
|
|
@@ -685,7 +687,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
685
687
|
return
|
|
686
688
|
} else {
|
|
687
689
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
688
|
-
reject?(error?.
|
|
690
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
689
691
|
return
|
|
690
692
|
}
|
|
691
693
|
})
|
|
@@ -704,12 +706,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
704
706
|
return
|
|
705
707
|
} else {
|
|
706
708
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
707
|
-
reject?(error?.
|
|
709
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
708
710
|
return
|
|
709
711
|
}
|
|
710
712
|
})
|
|
711
713
|
}
|
|
712
|
-
|
|
714
|
+
|
|
713
715
|
func changeName(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
714
716
|
guard let name = data.value(forKey: "name") as? String
|
|
715
717
|
else {
|
|
@@ -724,14 +726,14 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
724
726
|
resolve?(["success": success])
|
|
725
727
|
} else {
|
|
726
728
|
self.delegate?.emitEvent(self.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
727
|
-
reject?(error?.
|
|
729
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
728
730
|
}
|
|
729
731
|
}
|
|
730
732
|
}
|
|
731
|
-
|
|
733
|
+
|
|
732
734
|
func remoteMuteAllAudio(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
733
735
|
let allAudioTracks = HMSUtilities.getAllAudioTracks(in: (self.hms?.room)!!)
|
|
734
|
-
var customError:
|
|
736
|
+
var customError: Error?
|
|
735
737
|
for audioTrack in allAudioTracks {
|
|
736
738
|
self.hms?.changeTrackState(for: audioTrack, mute: true, completion: { success, error in
|
|
737
739
|
if success {
|
|
@@ -740,10 +742,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
740
742
|
}
|
|
741
743
|
})
|
|
742
744
|
}
|
|
743
|
-
if
|
|
745
|
+
if customError == nil {
|
|
744
746
|
resolve?(["success": true])
|
|
745
747
|
} else {
|
|
746
|
-
reject?(customError?.
|
|
748
|
+
reject?(customError?.localizedDescription, customError?.localizedDescription, nil)
|
|
747
749
|
}
|
|
748
750
|
}
|
|
749
751
|
|
|
@@ -767,43 +769,220 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
767
769
|
|
|
768
770
|
self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
|
|
769
771
|
}
|
|
770
|
-
|
|
772
|
+
|
|
771
773
|
func enableRTCStats() {
|
|
772
774
|
rtcStatsAttached = true
|
|
773
775
|
}
|
|
774
|
-
|
|
776
|
+
|
|
775
777
|
func disableRTCStats() {
|
|
776
778
|
rtcStatsAttached = false
|
|
777
779
|
}
|
|
778
780
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
// }
|
|
792
|
-
// }
|
|
781
|
+
func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
782
|
+
guard let preferredExtension = preferredExtension else {
|
|
783
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
784
|
+
reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
|
|
785
|
+
return
|
|
786
|
+
}
|
|
787
|
+
DispatchQueue.main.async { [weak self] in
|
|
788
|
+
if self?.systemBroadcastPicker == nil {
|
|
789
|
+
self?.systemBroadcastPicker = RPSystemBroadcastPickerView()
|
|
790
|
+
self?.systemBroadcastPicker!.preferredExtension = preferredExtension
|
|
791
|
+
self?.systemBroadcastPicker!.showsMicrophoneButton = false
|
|
792
|
+
}
|
|
793
793
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
794
|
+
for view in self!.systemBroadcastPicker!.subviews {
|
|
795
|
+
if let button = view as? UIButton {
|
|
796
|
+
button.sendActions(for: .allEvents)
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
self?.startScreenshareResolve = resolve
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
804
|
+
guard let preferredExtension = preferredExtension else {
|
|
805
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
806
|
+
reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
|
|
807
|
+
return
|
|
808
|
+
}
|
|
809
|
+
DispatchQueue.main.async { [weak self] in
|
|
810
|
+
if self?.systemBroadcastPicker == nil {
|
|
811
|
+
self?.systemBroadcastPicker = RPSystemBroadcastPickerView()
|
|
812
|
+
self?.systemBroadcastPicker!.preferredExtension = preferredExtension
|
|
813
|
+
self?.systemBroadcastPicker!.showsMicrophoneButton = false
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
for view in self!.systemBroadcastPicker!.subviews {
|
|
817
|
+
if let button = view as? UIButton {
|
|
818
|
+
button.sendActions(for: .allEvents)
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
self?.stopScreenshareResolve = resolve
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
func isScreenShared(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
826
|
+
resolve?(isScreenShared)
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
func playAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
830
|
+
guard let fileUrl = data.value(forKey: "fileUrl") as? String,
|
|
831
|
+
let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
832
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
833
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
834
|
+
else {
|
|
835
|
+
let errorMessage = "playAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "fileUrl"])
|
|
836
|
+
emitRequiredKeysError(errorMessage)
|
|
837
|
+
reject?(errorMessage, errorMessage, nil)
|
|
838
|
+
return
|
|
839
|
+
}
|
|
840
|
+
let loops = data.value(forKey: "loops") as? Bool ?? false
|
|
841
|
+
let interrupts = data.value(forKey: "interrupts") as? Bool ?? false
|
|
842
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
843
|
+
if let url = URL(string: fileUrl) {
|
|
844
|
+
do {
|
|
845
|
+
try audioFilePlayerNode.play(fileUrl: url, loops: loops, interrupts: interrupts)
|
|
846
|
+
resolve?(["success": true])
|
|
847
|
+
} catch {
|
|
848
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
849
|
+
reject?(error.localizedDescription, error.localizedDescription, nil)
|
|
850
|
+
}
|
|
851
|
+
} else {
|
|
852
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Incorrect url", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
853
|
+
reject?("Incorrect URL", "Incorrect URL", nil)
|
|
854
|
+
}
|
|
855
|
+
} else {
|
|
856
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
857
|
+
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
func setAudioShareVolume(_ data: NSDictionary) {
|
|
862
|
+
guard let volume = data.value(forKey: "volume") as? NSNumber,
|
|
863
|
+
let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
864
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
865
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
866
|
+
else {
|
|
867
|
+
let errorMessage = "setAudioShareVolume: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode", "volume"])
|
|
868
|
+
emitRequiredKeysError(errorMessage)
|
|
869
|
+
return
|
|
870
|
+
}
|
|
871
|
+
if let audioMicNode = playerNode as? HMSMicNode {
|
|
872
|
+
audioMicNode.volume = volume.floatValue
|
|
873
|
+
}
|
|
874
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
875
|
+
audioFilePlayerNode.volume = volume.floatValue
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
func stopAudioShare(_ data: NSDictionary) {
|
|
880
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
881
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
882
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
883
|
+
else {
|
|
884
|
+
let errorMessage = "stopAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
885
|
+
emitRequiredKeysError(errorMessage)
|
|
886
|
+
return
|
|
887
|
+
}
|
|
888
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
889
|
+
audioFilePlayerNode.stop()
|
|
890
|
+
} else {
|
|
891
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
func resumeAudioShare(_ data: NSDictionary) {
|
|
896
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
897
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
898
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
899
|
+
else {
|
|
900
|
+
let errorMessage = "resumeAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
901
|
+
emitRequiredKeysError(errorMessage)
|
|
902
|
+
return
|
|
903
|
+
}
|
|
904
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
905
|
+
do {
|
|
906
|
+
try audioFilePlayerNode.resume()
|
|
907
|
+
} catch {
|
|
908
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
909
|
+
}
|
|
910
|
+
} else {
|
|
911
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
func pauseAudioShare(_ data: NSDictionary) {
|
|
916
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
917
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
918
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
919
|
+
else {
|
|
920
|
+
let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
921
|
+
emitRequiredKeysError(errorMessage)
|
|
922
|
+
return
|
|
923
|
+
}
|
|
924
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
925
|
+
audioFilePlayerNode.pause()
|
|
926
|
+
} else {
|
|
927
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
func audioShareIsPlaying(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
932
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
933
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
934
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
935
|
+
else {
|
|
936
|
+
let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
937
|
+
emitRequiredKeysError(errorMessage)
|
|
938
|
+
reject?(errorMessage, errorMessage, nil)
|
|
939
|
+
return
|
|
940
|
+
}
|
|
941
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
942
|
+
resolve?(audioFilePlayerNode.isPlaying)
|
|
943
|
+
} else {
|
|
944
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
945
|
+
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
func audioShareCurrentTime(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
950
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
951
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
952
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
953
|
+
else {
|
|
954
|
+
let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
955
|
+
emitRequiredKeysError(errorMessage)
|
|
956
|
+
reject?(errorMessage, errorMessage, nil)
|
|
957
|
+
return
|
|
958
|
+
}
|
|
959
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
960
|
+
resolve?(audioFilePlayerNode.currentTime)
|
|
961
|
+
} else {
|
|
962
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
963
|
+
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
func audioShareDuration(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
968
|
+
guard let audioNodeName = data.value(forKey: "audioNode") as? String,
|
|
969
|
+
let audioMixerSourceMap = HMSHelper.getAudioMixerSourceMap(),
|
|
970
|
+
let playerNode = audioMixerSourceMap[audioNodeName]
|
|
971
|
+
else {
|
|
972
|
+
let errorMessage = "pauseAudioShare: " + HMSHelper.getUnavailableRequiredKey(data, ["audioNode"])
|
|
973
|
+
emitRequiredKeysError(errorMessage)
|
|
974
|
+
reject?(errorMessage, errorMessage, nil)
|
|
975
|
+
return
|
|
976
|
+
}
|
|
977
|
+
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
978
|
+
resolve?(audioFilePlayerNode.duration)
|
|
979
|
+
} else {
|
|
980
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
981
|
+
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
// MARK: - HMS SDK Delegate Callbacks
|
|
807
986
|
func on(join room: HMSRoom) {
|
|
808
987
|
let roomData = HMSDecoder.getHmsRoom(room)
|
|
809
988
|
let localPeerData = HMSDecoder.getHmsLocalPeer(hms?.localPeer)
|
|
@@ -856,10 +1035,22 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
856
1035
|
let hmsPeer = HMSDecoder.getHmsPeer(peer)
|
|
857
1036
|
let hmsTrack = HMSDecoder.getHmsTrack(track)
|
|
858
1037
|
|
|
1038
|
+
if peer.isLocal && track.source.uppercased() == "SCREEN" && track.kind == HMSTrackKind.video {
|
|
1039
|
+
if update == .trackAdded {
|
|
1040
|
+
isScreenShared = true
|
|
1041
|
+
startScreenshareResolve?(["success": true])
|
|
1042
|
+
startScreenshareResolve = nil
|
|
1043
|
+
} else if update == .trackRemoved {
|
|
1044
|
+
isScreenShared = false
|
|
1045
|
+
stopScreenshareResolve?(["success": true])
|
|
1046
|
+
stopScreenshareResolve = nil
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
859
1050
|
self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer, "track": hmsTrack])
|
|
860
1051
|
}
|
|
861
1052
|
|
|
862
|
-
func on(error:
|
|
1053
|
+
func on(error: Error) {
|
|
863
1054
|
if previewInProgress { previewInProgress = false }
|
|
864
1055
|
self.delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
865
1056
|
}
|
|
@@ -878,7 +1069,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
878
1069
|
|
|
879
1070
|
func onReconnecting() {
|
|
880
1071
|
reconnectingStage = true
|
|
881
|
-
self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "error": ["code":
|
|
1072
|
+
self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "error": ["code": 1003, "description": "Network connection lost ", "isTerminal": false, "canRetry": true], "id": self.id ])
|
|
882
1073
|
}
|
|
883
1074
|
|
|
884
1075
|
func onReconnected() {
|
|
@@ -907,59 +1098,59 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
907
1098
|
let roomEnded = notification.roomEnded
|
|
908
1099
|
self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
|
|
909
1100
|
}
|
|
910
|
-
|
|
1101
|
+
|
|
911
1102
|
func on(rtcStats: HMSRTCStatsReport) {
|
|
912
|
-
if
|
|
1103
|
+
if !rtcStatsAttached {
|
|
913
1104
|
return
|
|
914
1105
|
}
|
|
915
1106
|
let video = HMSDecoder.getHMSRTCStats(rtcStats.video)
|
|
916
1107
|
let audio = HMSDecoder.getHMSRTCStats(rtcStats.audio)
|
|
917
1108
|
let combined = HMSDecoder.getHMSRTCStats(rtcStats.combined)
|
|
918
|
-
|
|
1109
|
+
|
|
919
1110
|
self.delegate?.emitEvent(ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
|
|
920
1111
|
}
|
|
921
|
-
|
|
1112
|
+
|
|
922
1113
|
func on(localAudioStats: HMSLocalAudioStats, track: HMSLocalAudioTrack, peer: HMSPeer) {
|
|
923
|
-
if
|
|
1114
|
+
if !rtcStatsAttached {
|
|
924
1115
|
return
|
|
925
1116
|
}
|
|
926
1117
|
let localStats = HMSDecoder.getLocalAudioStats(localAudioStats)
|
|
927
1118
|
let localTrack = HMSDecoder.getHmsLocalAudioTrack(track)
|
|
928
1119
|
let decodedPeer = HMSDecoder.getHmsPeer(peer)
|
|
929
|
-
|
|
1120
|
+
|
|
930
1121
|
self.delegate?.emitEvent(ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
931
1122
|
}
|
|
932
|
-
|
|
1123
|
+
|
|
933
1124
|
func on(localVideoStats: HMSLocalVideoStats, track: HMSLocalVideoTrack, peer: HMSPeer) {
|
|
934
|
-
if
|
|
1125
|
+
if !rtcStatsAttached {
|
|
935
1126
|
return
|
|
936
1127
|
}
|
|
937
1128
|
let localStats = HMSDecoder.getLocalVideoStats(localVideoStats)
|
|
938
1129
|
let decodedPeer = HMSDecoder.getHmsPeer(peer)
|
|
939
1130
|
let localTrack = HMSDecoder.getHmsLocalVideoTrack(track)
|
|
940
|
-
|
|
1131
|
+
|
|
941
1132
|
self.delegate?.emitEvent(ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
942
1133
|
}
|
|
943
|
-
|
|
1134
|
+
|
|
944
1135
|
func on(remoteAudioStats: HMSRemoteAudioStats, track: HMSRemoteAudioTrack, peer: HMSPeer) {
|
|
945
|
-
if
|
|
1136
|
+
if !rtcStatsAttached {
|
|
946
1137
|
return
|
|
947
1138
|
}
|
|
948
1139
|
let remoteStats = HMSDecoder.getRemoteAudioStats(remoteAudioStats)
|
|
949
1140
|
let remoteTrack = HMSDecoder.getHMSRemoteAudioTrack(track)
|
|
950
1141
|
let decodedPeer = HMSDecoder.getHmsPeer(peer)
|
|
951
|
-
|
|
1142
|
+
|
|
952
1143
|
self.delegate?.emitEvent(ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
953
1144
|
}
|
|
954
|
-
|
|
1145
|
+
|
|
955
1146
|
func on(remoteVideoStats: HMSRemoteVideoStats, track: HMSRemoteVideoTrack, peer: HMSPeer) {
|
|
956
|
-
if
|
|
1147
|
+
if !rtcStatsAttached {
|
|
957
1148
|
return
|
|
958
1149
|
}
|
|
959
1150
|
let remoteStats = HMSDecoder.getRemoteVideoStats(remoteVideoStats)
|
|
960
1151
|
let decodedPeer = HMSDecoder.getHmsPeer(peer)
|
|
961
1152
|
let remoteTrack = HMSDecoder.getHMSRemoteVideoTrack(track)
|
|
962
|
-
|
|
1153
|
+
|
|
963
1154
|
self.delegate?.emitEvent(ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
964
1155
|
}
|
|
965
1156
|
|
|
@@ -1024,10 +1215,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1024
1215
|
return ""
|
|
1025
1216
|
}
|
|
1026
1217
|
}
|
|
1027
|
-
}
|
|
1028
1218
|
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
// }
|
|
1219
|
+
func emitRequiredKeysError(_ error: String) {
|
|
1220
|
+
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error, "isTerminal": false, "canRetry": true], "id": id])
|
|
1221
|
+
}
|
|
1222
|
+
}
|