@100mslive/react-native-hms 0.9.8 → 0.9.92
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 +50 -43
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.idea/libraries/{Gradle__com_github_100mslive_android_sdk_lib_2_4_2_aar.xml → Gradle__com_github_100mslive_android_sdk_lib_2_4_7_aar.xml} +4 -4
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m97_hms_1_1_aar.xml +11 -0
- package/android/.idea/modules/android.androidTest.iml +4 -4
- package/android/.idea/modules/android.main.iml +4 -4
- package/android/.idea/modules/android.unitTest.iml +4 -4
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +84 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +77 -8
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +95 -22
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +88 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +282 -49
- package/ios/HMSDecoder.swift +9 -8
- package/ios/HMSHelper.swift +5 -8
- package/ios/HMSManager.m +4 -1
- package/ios/HMSManager.swift +28 -6
- package/ios/HMSRNSDK.swift +146 -101
- package/lib/commonjs/classes/HMSAudioDevice.js +17 -0
- package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioMixingMode.js +15 -0
- package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioMode.js +17 -0
- package/lib/commonjs/classes/HMSAudioMode.js.map +1 -0
- package/lib/commonjs/classes/HMSEncoder.js +15 -0
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSException.js +18 -13
- package/lib/commonjs/classes/HMSException.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSLogger.js +2 -2
- package/lib/commonjs/classes/HMSLogger.js.map +1 -1
- package/lib/commonjs/classes/HMSPermissions.js +7 -4
- package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +267 -58
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSUpdateListenerActions.js +1 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/index.js +42 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/classes/HMSAudioDevice.js +10 -0
- package/lib/module/classes/HMSAudioDevice.js.map +1 -0
- package/lib/module/classes/HMSAudioMixingMode.js +8 -0
- package/lib/module/classes/HMSAudioMixingMode.js.map +1 -0
- package/lib/module/classes/HMSAudioMode.js +10 -0
- package/lib/module/classes/HMSAudioMode.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +14 -0
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSException.js +18 -13
- package/lib/module/classes/HMSException.js.map +1 -1
- package/lib/module/classes/HMSHLSConfig.js.map +1 -1
- package/lib/module/classes/HMSLogger.js +2 -2
- package/lib/module/classes/HMSLogger.js.map +1 -1
- package/lib/module/classes/HMSPermissions.js +7 -4
- package/lib/module/classes/HMSPermissions.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +267 -52
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/classes/HMSAudioDevice.d.ts +7 -0
- package/lib/typescript/classes/HMSAudioMixingMode.d.ts +5 -0
- package/lib/typescript/classes/HMSAudioMode.d.ts +7 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +2 -0
- package/lib/typescript/classes/HMSException.d.ts +8 -14
- package/lib/typescript/classes/HMSHLSConfig.d.ts +2 -2
- package/lib/typescript/classes/HMSLogger.d.ts +1 -1
- package/lib/typescript/classes/HMSPermissions.d.ts +6 -4
- package/lib/typescript/classes/HMSSDK.d.ts +112 -12
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
- package/lib/typescript/index.d.ts +3 -0
- package/package.json +1 -19
- package/react-native-hms.podspec +2 -1
- package/src/classes/HMSAudioDevice.ts +7 -0
- package/src/classes/HMSAudioMixingMode.ts +5 -0
- package/src/classes/HMSAudioMode.ts +7 -0
- package/src/classes/HMSEncoder.ts +12 -0
- package/src/classes/HMSException.ts +15 -24
- package/src/classes/HMSHLSConfig.ts +2 -2
- package/src/classes/HMSLogger.ts +2 -2
- package/src/classes/HMSPermissions.ts +9 -6
- package/src/classes/HMSSDK.tsx +352 -67
- package/src/classes/HMSUpdateListenerActions.ts +1 -0
- package/src/index.ts +3 -0
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m97_aar.xml +0 -11
|
@@ -6,12 +6,13 @@ import com.facebook.react.bridge.*
|
|
|
6
6
|
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
|
|
7
7
|
import java.util.*
|
|
8
8
|
import kotlinx.coroutines.launch
|
|
9
|
+
import live.hms.video.audio.HMSAudioManager
|
|
10
|
+
import live.hms.video.connection.stats.*
|
|
9
11
|
import live.hms.video.error.HMSException
|
|
10
|
-
import live.hms.video.media.tracks
|
|
11
|
-
import live.hms.video.media.tracks.HMSTrack
|
|
12
|
-
import live.hms.video.media.tracks.HMSTrackType
|
|
12
|
+
import live.hms.video.media.tracks.*
|
|
13
13
|
import live.hms.video.sdk.*
|
|
14
14
|
import live.hms.video.sdk.models.*
|
|
15
|
+
import live.hms.video.sdk.models.enums.AudioMixingMode
|
|
15
16
|
import live.hms.video.sdk.models.enums.HMSPeerUpdate
|
|
16
17
|
import live.hms.video.sdk.models.enums.HMSRoomUpdate
|
|
17
18
|
import live.hms.video.sdk.models.enums.HMSTrackUpdate
|
|
@@ -27,15 +28,20 @@ class HMSRNSDK(
|
|
|
27
28
|
) {
|
|
28
29
|
var hmsSDK: HMSSDK? = null
|
|
29
30
|
var screenshareCallback: Promise? = null
|
|
31
|
+
var audioshareCallback: Promise? = null
|
|
32
|
+
var isAudioSharing: Boolean = false
|
|
30
33
|
var delegate: HMSManager = HmsDelegate
|
|
31
34
|
private var recentRoleChangeRequest: HMSRoleChangeRequest? = null
|
|
32
35
|
private var context: ReactApplicationContext = reactApplicationContext
|
|
33
36
|
private var previewInProgress: Boolean = false
|
|
37
|
+
private var reconnectingStage: Boolean = false
|
|
38
|
+
private var rtcStatsAttached: Boolean = false
|
|
39
|
+
private var audioMixingMode: AudioMixingMode = AudioMixingMode.TALK_AND_MUSIC
|
|
34
40
|
private var id: String = sdkId
|
|
35
41
|
private var self = this
|
|
36
42
|
|
|
37
43
|
init {
|
|
38
|
-
val trackSettings = HMSHelper.getTrackSettings(data)
|
|
44
|
+
val trackSettings = HMSHelper.getTrackSettings(data?.getMap("trackSettings"))
|
|
39
45
|
if (trackSettings == null) {
|
|
40
46
|
this.hmsSDK = HMSSDK.Builder(reactApplicationContext).build()
|
|
41
47
|
} else {
|
|
@@ -45,8 +51,7 @@ class HMSRNSDK(
|
|
|
45
51
|
|
|
46
52
|
private fun emitCustomError(message: String) {
|
|
47
53
|
val data: WritableMap = Arguments.createMap()
|
|
48
|
-
val hmsError = HMSException(
|
|
49
|
-
data.putString("event", "ON_ERROR")
|
|
54
|
+
val hmsError = HMSException(6002, message, message, message, message, null, false)
|
|
50
55
|
data.putString("id", id)
|
|
51
56
|
data.putMap("error", HMSDecoder.getError(hmsError))
|
|
52
57
|
delegate.emitEvent("ON_ERROR", data)
|
|
@@ -55,20 +60,26 @@ class HMSRNSDK(
|
|
|
55
60
|
private fun emitRequiredKeysError(message: String) {
|
|
56
61
|
val data: WritableMap = Arguments.createMap()
|
|
57
62
|
val hmsError =
|
|
58
|
-
HMSException(
|
|
59
|
-
|
|
63
|
+
HMSException(
|
|
64
|
+
6002,
|
|
65
|
+
"REQUIRED_KEYS_NOT_FOUND",
|
|
66
|
+
"SEND_ALL_REQUIRED_KEYS",
|
|
67
|
+
message,
|
|
68
|
+
message,
|
|
69
|
+
null,
|
|
70
|
+
false
|
|
71
|
+
)
|
|
60
72
|
data.putString("id", id)
|
|
61
73
|
data.putMap("error", HMSDecoder.getError(hmsError))
|
|
62
74
|
delegate.emitEvent("ON_ERROR", data)
|
|
63
75
|
}
|
|
64
76
|
|
|
65
77
|
private fun rejectCallback(callback: Promise?, message: String) {
|
|
66
|
-
callback?.reject("
|
|
78
|
+
callback?.reject("6002", message)
|
|
67
79
|
}
|
|
68
80
|
|
|
69
81
|
fun emitHMSError(error: HMSException) {
|
|
70
82
|
val data: WritableMap = Arguments.createMap()
|
|
71
|
-
data.putString("event", "ON_ERROR")
|
|
72
83
|
data.putString("id", id)
|
|
73
84
|
data.putMap("error", HMSDecoder.getError(error))
|
|
74
85
|
delegate.emitEvent("ON_ERROR", data)
|
|
@@ -181,6 +192,7 @@ class HMSRNSDK(
|
|
|
181
192
|
arrayOf(Pair("username", "String"), Pair("authToken", "String"))
|
|
182
193
|
)
|
|
183
194
|
if (requiredKeys === null) {
|
|
195
|
+
reconnectingStage = false
|
|
184
196
|
val config = HMSHelper.getHmsConfig(credentials)
|
|
185
197
|
|
|
186
198
|
HMSCoroutineScope.launch {
|
|
@@ -312,6 +324,7 @@ class HMSRNSDK(
|
|
|
312
324
|
}
|
|
313
325
|
|
|
314
326
|
override fun onReconnected() {
|
|
327
|
+
reconnectingStage = false
|
|
315
328
|
val data: WritableMap = Arguments.createMap()
|
|
316
329
|
data.putString("event", "RECONNECTED")
|
|
317
330
|
data.putString("id", id)
|
|
@@ -319,7 +332,9 @@ class HMSRNSDK(
|
|
|
319
332
|
}
|
|
320
333
|
|
|
321
334
|
override fun onReconnecting(error: HMSException) {
|
|
335
|
+
reconnectingStage = true
|
|
322
336
|
val data: WritableMap = Arguments.createMap()
|
|
337
|
+
data.putMap("error", HMSDecoder.getError(error))
|
|
323
338
|
data.putString("event", "RECONNECTING")
|
|
324
339
|
data.putString("id", id)
|
|
325
340
|
delegate.emitEvent("RECONNECTING", data)
|
|
@@ -356,6 +371,109 @@ class HMSRNSDK(
|
|
|
356
371
|
}
|
|
357
372
|
}
|
|
358
373
|
)
|
|
374
|
+
|
|
375
|
+
hmsSDK?.addRtcStatsObserver(
|
|
376
|
+
object : HMSStatsObserver {
|
|
377
|
+
override fun onLocalAudioStats(
|
|
378
|
+
audioStats: HMSLocalAudioStats,
|
|
379
|
+
hmsTrack: HMSTrack?,
|
|
380
|
+
hmsPeer: HMSPeer?
|
|
381
|
+
) {
|
|
382
|
+
if (!rtcStatsAttached) {
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
val localAudioStats = HMSDecoder.getLocalAudioStats(audioStats)
|
|
386
|
+
val track = HMSDecoder.getHmsLocalAudioTrack(hmsTrack as HMSLocalAudioTrack)
|
|
387
|
+
val peer = HMSDecoder.getHmsPeer(hmsPeer)
|
|
388
|
+
|
|
389
|
+
val data: WritableMap = Arguments.createMap()
|
|
390
|
+
data.putMap("localAudioStats", localAudioStats)
|
|
391
|
+
data.putMap("track", track)
|
|
392
|
+
data.putMap("peer", peer)
|
|
393
|
+
data.putString("id", id)
|
|
394
|
+
delegate.emitEvent("ON_LOCAL_AUDIO_STATS", data)
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
override fun onLocalVideoStats(
|
|
398
|
+
videoStats: HMSLocalVideoStats,
|
|
399
|
+
hmsTrack: HMSTrack?,
|
|
400
|
+
hmsPeer: HMSPeer?
|
|
401
|
+
) {
|
|
402
|
+
if (!rtcStatsAttached) {
|
|
403
|
+
return
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
val localVideoStats = HMSDecoder.getLocalVideoStats(videoStats)
|
|
407
|
+
val track = HMSDecoder.getHmsLocalVideoTrack(hmsTrack as HMSLocalVideoTrack)
|
|
408
|
+
val peer = HMSDecoder.getHmsPeer(hmsPeer)
|
|
409
|
+
|
|
410
|
+
val data: WritableMap = Arguments.createMap()
|
|
411
|
+
data.putMap("localVideoStats", localVideoStats)
|
|
412
|
+
data.putMap("track", track)
|
|
413
|
+
data.putMap("peer", peer)
|
|
414
|
+
data.putString("id", id)
|
|
415
|
+
delegate.emitEvent("ON_LOCAL_VIDEO_STATS", data)
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
override fun onRTCStats(rtcStats: HMSRTCStatsReport) {
|
|
419
|
+
if (!rtcStatsAttached) {
|
|
420
|
+
return
|
|
421
|
+
}
|
|
422
|
+
val video = HMSDecoder.getHMSRTCStats(rtcStats.video)
|
|
423
|
+
val audio = HMSDecoder.getHMSRTCStats(rtcStats.audio)
|
|
424
|
+
val combined = HMSDecoder.getHMSRTCStats(rtcStats.combined)
|
|
425
|
+
|
|
426
|
+
val data: WritableMap = Arguments.createMap()
|
|
427
|
+
data.putMap("video", video)
|
|
428
|
+
data.putMap("audio", audio)
|
|
429
|
+
data.putMap("combined", combined)
|
|
430
|
+
data.putString("id", id)
|
|
431
|
+
delegate.emitEvent("ON_RTC_STATS", data)
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
override fun onRemoteAudioStats(
|
|
435
|
+
audioStats: HMSRemoteAudioStats,
|
|
436
|
+
hmsTrack: HMSTrack?,
|
|
437
|
+
hmsPeer: HMSPeer?
|
|
438
|
+
) {
|
|
439
|
+
if (!rtcStatsAttached) {
|
|
440
|
+
return
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
val remoteAudioStats = HMSDecoder.getRemoteAudioStats(audioStats)
|
|
444
|
+
val track = HMSDecoder.getHmsRemoteAudioTrack(hmsTrack as HMSRemoteAudioTrack)
|
|
445
|
+
val peer = HMSDecoder.getHmsPeer(hmsPeer)
|
|
446
|
+
|
|
447
|
+
val data: WritableMap = Arguments.createMap()
|
|
448
|
+
data.putMap("remoteAudioStats", remoteAudioStats)
|
|
449
|
+
data.putMap("track", track)
|
|
450
|
+
data.putMap("peer", peer)
|
|
451
|
+
data.putString("id", id)
|
|
452
|
+
delegate.emitEvent("ON_REMOTE_AUDIO_STATS", data)
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
override fun onRemoteVideoStats(
|
|
456
|
+
videoStats: HMSRemoteVideoStats,
|
|
457
|
+
hmsTrack: HMSTrack?,
|
|
458
|
+
hmsPeer: HMSPeer?
|
|
459
|
+
) {
|
|
460
|
+
if (!rtcStatsAttached) {
|
|
461
|
+
return
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
val remoteVideoStats = HMSDecoder.getRemoteVideoStats(videoStats)
|
|
465
|
+
val track = HMSDecoder.getHmsRemoteVideoTrack(hmsTrack as HMSRemoteVideoTrack)
|
|
466
|
+
val peer = HMSDecoder.getHmsPeer(hmsPeer)
|
|
467
|
+
|
|
468
|
+
val data: WritableMap = Arguments.createMap()
|
|
469
|
+
data.putMap("remoteVideoStats", remoteVideoStats)
|
|
470
|
+
data.putMap("track", track)
|
|
471
|
+
data.putMap("peer", peer)
|
|
472
|
+
data.putString("id", id)
|
|
473
|
+
delegate.emitEvent("ON_REMOTE_VIDEO_STATS", data)
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
)
|
|
359
477
|
}
|
|
360
478
|
} else {
|
|
361
479
|
val errorMessage = "join: $requiredKeys"
|
|
@@ -380,19 +498,25 @@ class HMSRNSDK(
|
|
|
380
498
|
}
|
|
381
499
|
|
|
382
500
|
fun leave(callback: Promise?) {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
501
|
+
if (reconnectingStage) {
|
|
502
|
+
callback?.reject("101", "Still in reconnecting stage")
|
|
503
|
+
} else {
|
|
504
|
+
hmsSDK?.leave(
|
|
505
|
+
object : HMSActionResultListener {
|
|
506
|
+
override fun onSuccess() {
|
|
507
|
+
isAudioSharing = false
|
|
508
|
+
screenshareCallback = null
|
|
509
|
+
audioshareCallback = null
|
|
510
|
+
callback?.resolve(emitHMSSuccess())
|
|
511
|
+
}
|
|
389
512
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
513
|
+
override fun onError(error: HMSException) {
|
|
514
|
+
callback?.reject(error.code.toString(), error.message)
|
|
515
|
+
self.emitHMSError(error)
|
|
516
|
+
}
|
|
393
517
|
}
|
|
394
|
-
|
|
395
|
-
|
|
518
|
+
)
|
|
519
|
+
}
|
|
396
520
|
}
|
|
397
521
|
|
|
398
522
|
fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
|
|
@@ -709,7 +833,7 @@ class HMSRNSDK(
|
|
|
709
833
|
}
|
|
710
834
|
}
|
|
711
835
|
|
|
712
|
-
fun remoteMuteAllAudio() {
|
|
836
|
+
fun remoteMuteAllAudio(callback: Promise?) {
|
|
713
837
|
val allAudioTracks = hmsSDK?.getRoom()?.let { HmsUtilities.getAllAudioTracks(it) }
|
|
714
838
|
if (allAudioTracks != null) {
|
|
715
839
|
var customError: HMSException? = null
|
|
@@ -725,10 +849,13 @@ class HMSRNSDK(
|
|
|
725
849
|
}
|
|
726
850
|
)
|
|
727
851
|
}
|
|
728
|
-
if (customError
|
|
729
|
-
|
|
852
|
+
if (customError === null) {
|
|
853
|
+
callback?.resolve(emitHMSSuccess())
|
|
854
|
+
} else {
|
|
855
|
+
rejectCallback(callback, customError!!.message)
|
|
730
856
|
}
|
|
731
857
|
}
|
|
858
|
+
rejectCallback(callback, "Audio tracks not found")
|
|
732
859
|
}
|
|
733
860
|
|
|
734
861
|
fun setPlaybackForAllAudio(data: ReadableMap) {
|
|
@@ -979,32 +1106,19 @@ class HMSRNSDK(
|
|
|
979
1106
|
}
|
|
980
1107
|
|
|
981
1108
|
fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
|
|
982
|
-
val
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
val hlsRecordingConfig = HMSHelper.getHlsRecordingConfig(data)
|
|
989
|
-
val config = HMSHLSConfig(hlsMeetingUrlVariant, hlsRecordingConfig)
|
|
990
|
-
|
|
991
|
-
hmsSDK?.startHLSStreaming(
|
|
992
|
-
config,
|
|
993
|
-
object : HMSActionResultListener {
|
|
994
|
-
override fun onSuccess() {
|
|
995
|
-
callback?.resolve(emitHMSSuccess())
|
|
996
|
-
}
|
|
997
|
-
override fun onError(error: HMSException) {
|
|
998
|
-
callback?.reject(error.code.toString(), error.message)
|
|
999
|
-
self.emitHMSError(error)
|
|
1000
|
-
}
|
|
1109
|
+
val hlsConfig = HMSHelper.getHLSConfig(data)
|
|
1110
|
+
hmsSDK?.startHLSStreaming(
|
|
1111
|
+
hlsConfig,
|
|
1112
|
+
object : HMSActionResultListener {
|
|
1113
|
+
override fun onSuccess() {
|
|
1114
|
+
callback?.resolve(emitHMSSuccess())
|
|
1001
1115
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1116
|
+
override fun onError(error: HMSException) {
|
|
1117
|
+
callback?.reject(error.code.toString(), error.message)
|
|
1118
|
+
self.emitHMSError(error)
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
)
|
|
1008
1122
|
}
|
|
1009
1123
|
|
|
1010
1124
|
fun stopHLSStreaming(callback: Promise?) {
|
|
@@ -1071,4 +1185,123 @@ class HMSRNSDK(
|
|
|
1071
1185
|
rejectCallback(callback, errorMessage)
|
|
1072
1186
|
}
|
|
1073
1187
|
}
|
|
1188
|
+
|
|
1189
|
+
fun enableRTCStats() {
|
|
1190
|
+
rtcStatsAttached = true
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
fun disableRTCStats() {
|
|
1194
|
+
rtcStatsAttached = false
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
fun getAudioDevicesList(callback: Promise?) {
|
|
1198
|
+
callback?.resolve(HMSHelper.getAudioDevicesList(hmsSDK?.getAudioDevicesList()))
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
fun getAudioOutputRouteType(callback: Promise?) {
|
|
1202
|
+
callback?.resolve(hmsSDK?.getAudioOutputRouteType()?.name)
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
fun switchAudioOutput(data: ReadableMap) {
|
|
1206
|
+
val requiredKeys =
|
|
1207
|
+
HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioDevice", "String")))
|
|
1208
|
+
if (requiredKeys === null) {
|
|
1209
|
+
val audioDevice = data.getString("audioDevice")
|
|
1210
|
+
hmsSDK?.switchAudioOutput(HMSHelper.getAudioDevice(audioDevice))
|
|
1211
|
+
} else {
|
|
1212
|
+
val errorMessage = "switchAudioOutput: $requiredKeys"
|
|
1213
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
fun setAudioMode(data: ReadableMap) {
|
|
1218
|
+
val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMode", "Int")))
|
|
1219
|
+
if (requiredKeys === null) {
|
|
1220
|
+
val audioMode = data.getInt("audioMode")
|
|
1221
|
+
hmsSDK?.setAudioMode(audioMode)
|
|
1222
|
+
} else {
|
|
1223
|
+
val errorMessage = "setAudioMode: $requiredKeys"
|
|
1224
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
fun setAudioDeviceChangeListener() {
|
|
1229
|
+
hmsSDK?.setAudioDeviceChangeListener(
|
|
1230
|
+
object : HMSAudioManager.AudioManagerDeviceChangeListener {
|
|
1231
|
+
override fun onAudioDeviceChanged(
|
|
1232
|
+
device: HMSAudioManager.AudioDevice?,
|
|
1233
|
+
audioDevicesList: Set<HMSAudioManager.AudioDevice>?
|
|
1234
|
+
) {
|
|
1235
|
+
val data: WritableMap = Arguments.createMap()
|
|
1236
|
+
data.putString("device", device?.name)
|
|
1237
|
+
data.putArray("audioDevicesList", HMSHelper.getAudioDevicesSet(audioDevicesList))
|
|
1238
|
+
data.putString("id", id)
|
|
1239
|
+
delegate.emitEvent("ON_AUDIO_DEVICE_CHANGED", data)
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
override fun onError(error: HMSException) {
|
|
1243
|
+
self.emitHMSError(error)
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
)
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
fun startAudioshare(data: ReadableMap, callback: Promise?) {
|
|
1250
|
+
val requiredKeys =
|
|
1251
|
+
HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
|
|
1252
|
+
if (requiredKeys === null) {
|
|
1253
|
+
audioshareCallback = callback
|
|
1254
|
+
runOnUiThread {
|
|
1255
|
+
val intent = Intent(context, HMSAudioshareActivity::class.java)
|
|
1256
|
+
intent.flags = FLAG_ACTIVITY_NEW_TASK
|
|
1257
|
+
intent.putExtra("id", id)
|
|
1258
|
+
intent.putExtra("audioMixingMode", data.getString("audioMixingMode"))
|
|
1259
|
+
context.startActivity(intent)
|
|
1260
|
+
}
|
|
1261
|
+
} else {
|
|
1262
|
+
val errorMessage = "startAudioshare: $requiredKeys"
|
|
1263
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1264
|
+
rejectCallback(callback, errorMessage)
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
fun isAudioShared(callback: Promise?) {
|
|
1269
|
+
callback?.resolve(isAudioSharing)
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
fun stopAudioshare(callback: Promise?) {
|
|
1273
|
+
hmsSDK?.stopAudioshare(
|
|
1274
|
+
object : HMSActionResultListener {
|
|
1275
|
+
override fun onError(error: HMSException) {
|
|
1276
|
+
audioshareCallback = null
|
|
1277
|
+
callback?.reject(error.code.toString(), error.message)
|
|
1278
|
+
self.emitHMSError(error)
|
|
1279
|
+
}
|
|
1280
|
+
override fun onSuccess() {
|
|
1281
|
+
isAudioSharing = false
|
|
1282
|
+
audioshareCallback = null
|
|
1283
|
+
callback?.resolve(emitHMSSuccess())
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
)
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
fun getAudioMixingMode(): AudioMixingMode {
|
|
1290
|
+
return audioMixingMode
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
fun setAudioMixingMode(data: ReadableMap, callback: Promise?) {
|
|
1294
|
+
val requiredKeys =
|
|
1295
|
+
HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
|
|
1296
|
+
if (requiredKeys === null) {
|
|
1297
|
+
val mode = HMSHelper.getAudioMixingMode(data.getString("audioMixingMode"))
|
|
1298
|
+
audioMixingMode = mode
|
|
1299
|
+
hmsSDK?.setAudioMixingMode(mode)
|
|
1300
|
+
callback?.resolve(emitHMSSuccess())
|
|
1301
|
+
} else {
|
|
1302
|
+
val errorMessage = "setAudioMixingMode: $requiredKeys"
|
|
1303
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1304
|
+
rejectCallback(callback, errorMessage)
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1074
1307
|
}
|
package/ios/HMSDecoder.swift
CHANGED
|
@@ -320,16 +320,18 @@ class HMSDecoder: NSObject {
|
|
|
320
320
|
|
|
321
321
|
let endRoom = permissions.endRoom ?? false
|
|
322
322
|
let removeOthers = permissions.removeOthers ?? false
|
|
323
|
-
let
|
|
324
|
-
let
|
|
323
|
+
let browserRecording = permissions.browserRecording ?? false
|
|
324
|
+
let hlsStreaming = permissions.hlsStreaming ?? false
|
|
325
|
+
let rtmpStreaming = permissions.rtmpStreaming ?? false
|
|
325
326
|
let mute = permissions.mute ?? false
|
|
326
327
|
let unmute = permissions.unmute ?? false
|
|
327
328
|
let changeRole = permissions.changeRole ?? false
|
|
328
329
|
|
|
329
330
|
return ["endRoom": endRoom,
|
|
330
331
|
"removeOthers": removeOthers,
|
|
331
|
-
"
|
|
332
|
-
"
|
|
332
|
+
"browserRecording": browserRecording,
|
|
333
|
+
"hlsStreaming": hlsStreaming,
|
|
334
|
+
"rtmpStreaming": rtmpStreaming,
|
|
333
335
|
"mute": mute,
|
|
334
336
|
"unmute": unmute,
|
|
335
337
|
"changeRole": changeRole]
|
|
@@ -478,16 +480,15 @@ class HMSDecoder: NSObject {
|
|
|
478
480
|
|
|
479
481
|
static func getError(_ errorObj: HMSError?) -> [String: Any]? {
|
|
480
482
|
if let error = errorObj {
|
|
481
|
-
let code = error.code
|
|
483
|
+
let code = error.code.rawValue
|
|
482
484
|
let description = error.description
|
|
483
|
-
let localizedDescription = error.localizedDescription
|
|
484
|
-
let debugDescription = error.debugDescription
|
|
485
485
|
let message = error.message
|
|
486
486
|
let name = error.id
|
|
487
487
|
let id = error.id
|
|
488
488
|
let action = error.action
|
|
489
|
+
let isTerminal = false
|
|
489
490
|
|
|
490
|
-
return ["code": code, "description": description, "
|
|
491
|
+
return ["code": code, "description": description, "message": message, "name": name, "action": action, "id": id, "isTerminal": isTerminal]
|
|
491
492
|
} else {
|
|
492
493
|
return nil
|
|
493
494
|
}
|
package/ios/HMSHelper.swift
CHANGED
|
@@ -228,18 +228,15 @@ class HMSHelper: NSObject {
|
|
|
228
228
|
return hlsVariants
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
static func getHlsRecordingConfig(_
|
|
232
|
-
guard let
|
|
233
|
-
else {
|
|
234
|
-
return nil
|
|
235
|
-
}
|
|
236
|
-
guard let singleFilePerLayer = meetingURLVariants.value(forKey: "singleFilePerLayer") as? Bool ,
|
|
237
|
-
let videoOnDemand = meetingURLVariants.value(forKey: "videoOnDemand") as? Bool
|
|
231
|
+
static func getHlsRecordingConfig(_ config: NSDictionary?) -> HMSHLSRecordingConfig? {
|
|
232
|
+
guard let hlsRecordingConfig = config
|
|
238
233
|
else {
|
|
239
234
|
return nil
|
|
240
235
|
}
|
|
236
|
+
let singleFilePerLayer = hlsRecordingConfig.value(forKey: "singleFilePerLayer") as? Bool
|
|
237
|
+
let videoOnDemand = hlsRecordingConfig.value(forKey: "videoOnDemand") as? Bool
|
|
241
238
|
|
|
242
|
-
return HMSHLSRecordingConfig(singleFilePerLayer: singleFilePerLayer, enableVOD: videoOnDemand)
|
|
239
|
+
return HMSHLSRecordingConfig(singleFilePerLayer: singleFilePerLayer ?? false, enableVOD: videoOnDemand ?? false)
|
|
243
240
|
}
|
|
244
241
|
|
|
245
242
|
static func getHMSHLSMeetingURLVariant(_ variant: [String: Any]) -> HMSHLSMeetingURLVariant? {
|
package/ios/HMSManager.m
CHANGED
|
@@ -26,7 +26,7 @@ RCT_EXTERN_METHOD(setVolume: (NSDictionary) data)
|
|
|
26
26
|
RCT_EXTERN_METHOD(build : (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
27
27
|
RCT_EXTERN_METHOD(leave: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
28
28
|
RCT_EXTERN_METHOD(setPlaybackForAllAudio: (NSDictionary) mute)
|
|
29
|
-
RCT_EXTERN_METHOD(remoteMuteAllAudio: (NSDictionary) data)
|
|
29
|
+
RCT_EXTERN_METHOD(remoteMuteAllAudio: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
30
30
|
RCT_EXTERN_METHOD(isPlaybackAllowed: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
31
31
|
RCT_EXTERN_METHOD(changeMetadata: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
32
32
|
RCT_EXTERN_METHOD(startRTMPOrRecording: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
@@ -37,4 +37,7 @@ RCT_EXTERN_METHOD(changeName: (NSDictionary) data :(RCTPromiseResolveBlock) reso
|
|
|
37
37
|
RCT_EXTERN_METHOD(enableRTCStats: (NSDictionary) data)
|
|
38
38
|
RCT_EXTERN_METHOD(disableRTCStats: (NSDictionary) data)
|
|
39
39
|
RCT_EXTERN_METHOD(destroy: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
40
|
+
RCT_EXTERN_METHOD(startScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
41
|
+
RCT_EXTERN_METHOD(stopScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
42
|
+
RCT_EXTERN_METHOD(isScreenShared: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
40
43
|
@end
|
package/ios/HMSManager.swift
CHANGED
|
@@ -23,6 +23,7 @@ class HMSManager: RCTEventEmitter {
|
|
|
23
23
|
let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
|
|
24
24
|
let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
|
|
25
25
|
let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
|
|
26
|
+
let ON_AUDIO_DEVICE_CHANGED = "ON_AUDIO_DEVICE_CHANGED"
|
|
26
27
|
|
|
27
28
|
// MARK: - Setup
|
|
28
29
|
|
|
@@ -30,12 +31,12 @@ class HMSManager: RCTEventEmitter {
|
|
|
30
31
|
super.init()
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
35
|
+
true
|
|
36
|
+
}
|
|
36
37
|
|
|
37
38
|
override func supportedEvents() -> [String]! {
|
|
38
|
-
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS]
|
|
39
|
+
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED]
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
// MARK: - HMS SDK Actions
|
|
@@ -225,10 +226,10 @@ class HMSManager: RCTEventEmitter {
|
|
|
225
226
|
}
|
|
226
227
|
|
|
227
228
|
@objc
|
|
228
|
-
func remoteMuteAllAudio(_ data: NSDictionary) {
|
|
229
|
+
func remoteMuteAllAudio(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
229
230
|
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
230
231
|
|
|
231
|
-
hms?.remoteMuteAllAudio()
|
|
232
|
+
hms?.remoteMuteAllAudio(resolve, reject)
|
|
232
233
|
}
|
|
233
234
|
|
|
234
235
|
@objc
|
|
@@ -301,6 +302,27 @@ class HMSManager: RCTEventEmitter {
|
|
|
301
302
|
resolve?(["success": id + " removed"])
|
|
302
303
|
}
|
|
303
304
|
|
|
305
|
+
@objc
|
|
306
|
+
func startScreenshare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
307
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
308
|
+
|
|
309
|
+
hms?.startScreenshare(resolve, reject)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
@objc
|
|
313
|
+
func stopScreenshare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
314
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
315
|
+
|
|
316
|
+
hms?.stopScreenshare(resolve, reject)
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
@objc
|
|
320
|
+
func isScreenShared(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
321
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
322
|
+
|
|
323
|
+
hms?.isScreenShared(resolve, reject)
|
|
324
|
+
}
|
|
325
|
+
|
|
304
326
|
// @objc
|
|
305
327
|
// func setLocalVideoSettings(_ data: NSDictionary) {
|
|
306
328
|
// let hms = HMSHelper.getHms(data, hmsCollection)
|