@100mslive/react-native-hms 0.9.7 → 0.9.91
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 +63 -44
- 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/compiler.xml +6 -0
- package/android/.idea/gradle.xml +6 -1
- package/android/.idea/jarRepositories.xml +40 -0
- package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_69_1_debug_aar.xml +14 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_3.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_3.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_3_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_github_100mslive_android_sdk_lib_2_4_7_aar.xml +11 -0
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m97_hms_1_1_aar.xml +11 -0
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_0.xml +13 -0
- package/android/.idea/misc.xml +1 -1
- package/android/.idea/modules/android.androidTest.iml +201 -0
- package/android/.idea/modules/android.iml +28 -6
- package/android/.idea/modules/android.main.iml +196 -0
- package/android/.idea/modules/android.unitTest.iml +195 -0
- package/android/.idea/modules.xml +3 -0
- 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 +79 -10
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +130 -27
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +88 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +307 -82
- package/ios/HMSDecoder.swift +9 -8
- package/ios/HMSHelper.swift +18 -8
- package/ios/HMSManager.m +1 -1
- package/ios/HMSManager.swift +7 -6
- package/ios/HMSRNSDK.swift +198 -173
- 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/HMSRTMPConfig.js +3 -0
- package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSRtmpVideoResolution.js +23 -0
- package/lib/commonjs/classes/HMSRtmpVideoResolution.js.map +1 -0
- package/lib/commonjs/classes/HMSSDK.js +268 -48
- 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 +56 -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/HMSRTMPConfig.js +3 -0
- package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/module/classes/HMSRtmpVideoResolution.js +14 -0
- package/lib/module/classes/HMSRtmpVideoResolution.js.map +1 -0
- package/lib/module/classes/HMSSDK.js +267 -42
- 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 +4 -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/HMSRTMPConfig.d.ts +3 -0
- package/lib/typescript/classes/HMSRtmpVideoResolution.d.ts +8 -0
- package/lib/typescript/classes/HMSSDK.d.ts +109 -11
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
- package/lib/typescript/index.d.ts +4 -0
- package/package.json +1 -19
- package/react-native-hms.podspec +1 -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/HMSRTMPConfig.ts +5 -0
- package/src/classes/HMSRtmpVideoResolution.ts +9 -0
- package/src/classes/HMSSDK.tsx +341 -49
- package/src/classes/HMSUpdateListenerActions.ts +1 -0
- package/src/index.ts +4 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.reactnativehmssdk
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.*
|
|
4
|
+
import live.hms.video.connection.stats.*
|
|
4
5
|
import live.hms.video.connection.stats.quality.HMSNetworkQuality
|
|
5
6
|
import live.hms.video.error.HMSException
|
|
6
7
|
import live.hms.video.media.settings.HMSAudioTrackSettings
|
|
@@ -125,10 +126,10 @@ object HMSDecoder {
|
|
|
125
126
|
permissions.putBoolean("endRoom", hmsPermissions.endRoom)
|
|
126
127
|
permissions.putBoolean("removeOthers", hmsPermissions.removeOthers)
|
|
127
128
|
permissions.putBoolean("mute", hmsPermissions.mute)
|
|
128
|
-
permissions.putBoolean("
|
|
129
|
+
permissions.putBoolean("browserRecording", hmsPermissions.browserRecording)
|
|
129
130
|
permissions.putBoolean("unmute", hmsPermissions.unmute)
|
|
130
|
-
permissions.putBoolean("
|
|
131
|
-
permissions.putBoolean("
|
|
131
|
+
permissions.putBoolean("hlsStreaming", hmsPermissions.hlsStreaming)
|
|
132
|
+
permissions.putBoolean("rtmpStreaming", hmsPermissions.rtmpStreaming)
|
|
132
133
|
permissions.putBoolean("changeRole", hmsPermissions.changeRole)
|
|
133
134
|
}
|
|
134
135
|
return permissions
|
|
@@ -197,7 +198,7 @@ object HMSDecoder {
|
|
|
197
198
|
return peer
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
|
|
201
|
+
fun getHmsLocalAudioTrack(track: HMSLocalAudioTrack?): WritableMap {
|
|
201
202
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
202
203
|
if (track != null) {
|
|
203
204
|
hmsTrack.putDouble("volume", track.volume)
|
|
@@ -211,7 +212,7 @@ object HMSDecoder {
|
|
|
211
212
|
return hmsTrack
|
|
212
213
|
}
|
|
213
214
|
|
|
214
|
-
|
|
215
|
+
fun getHmsLocalVideoTrack(track: HMSLocalVideoTrack?): WritableMap {
|
|
215
216
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
216
217
|
if (track != null) {
|
|
217
218
|
hmsTrack.putBoolean("isDegraded", track.isDegraded)
|
|
@@ -263,7 +264,7 @@ object HMSDecoder {
|
|
|
263
264
|
return resolution
|
|
264
265
|
}
|
|
265
266
|
|
|
266
|
-
fun getHmsRemotePeers(remotePeers:
|
|
267
|
+
fun getHmsRemotePeers(remotePeers: List<HMSRemotePeer>?): WritableArray {
|
|
267
268
|
val peers: WritableArray = Arguments.createArray()
|
|
268
269
|
if (remotePeers != null) {
|
|
269
270
|
for (peer in remotePeers) {
|
|
@@ -292,7 +293,7 @@ object HMSDecoder {
|
|
|
292
293
|
return peer
|
|
293
294
|
}
|
|
294
295
|
|
|
295
|
-
|
|
296
|
+
fun getHmsRemoteAudioTrack(track: HMSRemoteAudioTrack?): WritableMap {
|
|
296
297
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
297
298
|
if (track != null) {
|
|
298
299
|
hmsTrack.putBoolean("isPlaybackAllowed", track.isPlaybackAllowed)
|
|
@@ -305,7 +306,7 @@ object HMSDecoder {
|
|
|
305
306
|
return hmsTrack
|
|
306
307
|
}
|
|
307
308
|
|
|
308
|
-
|
|
309
|
+
fun getHmsRemoteVideoTrack(track: HMSRemoteVideoTrack?): WritableMap {
|
|
309
310
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
310
311
|
if (track != null) {
|
|
311
312
|
hmsTrack.putBoolean("isDegraded", track.isDegraded)
|
|
@@ -360,11 +361,11 @@ object HMSDecoder {
|
|
|
360
361
|
if (error !== null) {
|
|
361
362
|
val decodedError: WritableMap = Arguments.createMap()
|
|
362
363
|
decodedError.putInt("code", error.code)
|
|
363
|
-
decodedError.putString("localizedDescription", error.localizedMessage)
|
|
364
364
|
decodedError.putString("description", error.description)
|
|
365
365
|
decodedError.putString("message", error.message)
|
|
366
366
|
decodedError.putString("name", error.name)
|
|
367
367
|
decodedError.putString("action", error.action)
|
|
368
|
+
decodedError.putBoolean("isTerminal", error.isTerminal)
|
|
368
369
|
return decodedError
|
|
369
370
|
}
|
|
370
371
|
return null
|
|
@@ -485,7 +486,7 @@ object HMSDecoder {
|
|
|
485
486
|
return subscribeDegradationParams
|
|
486
487
|
}
|
|
487
488
|
|
|
488
|
-
private fun getAllPeers(peers:
|
|
489
|
+
private fun getAllPeers(peers: List<HMSPeer>?): WritableArray {
|
|
489
490
|
val decodedPeers: WritableArray = Arguments.createArray()
|
|
490
491
|
if (peers != null) {
|
|
491
492
|
for (peer in peers) {
|
|
@@ -524,4 +525,72 @@ object HMSDecoder {
|
|
|
524
525
|
}
|
|
525
526
|
return hmsNetworkQuality
|
|
526
527
|
}
|
|
528
|
+
|
|
529
|
+
fun getHMSRTCStats(hmsRtcStats: HMSRTCStats?): WritableMap {
|
|
530
|
+
val rtcStats: WritableMap = Arguments.createMap()
|
|
531
|
+
if (hmsRtcStats != null) {
|
|
532
|
+
rtcStats.putDouble("bitrateReceived", hmsRtcStats.bitrateReceived)
|
|
533
|
+
rtcStats.putDouble("bitrateSent", hmsRtcStats.bitrateSent)
|
|
534
|
+
rtcStats.putString("bytesSent", hmsRtcStats.bytesSent.toString())
|
|
535
|
+
rtcStats.putString("bytesReceived", hmsRtcStats.bytesReceived.toString())
|
|
536
|
+
rtcStats.putString("packetsLost", hmsRtcStats.packetsLost.toString())
|
|
537
|
+
rtcStats.putString("packetsReceived", hmsRtcStats.packetsReceived.toString())
|
|
538
|
+
rtcStats.putDouble("roundTripTime", hmsRtcStats.roundTripTime)
|
|
539
|
+
}
|
|
540
|
+
return rtcStats
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
fun getLocalAudioStats(hmsLocalAudioStats: HMSLocalAudioStats?): WritableMap {
|
|
544
|
+
val localAudioStats: WritableMap = Arguments.createMap()
|
|
545
|
+
if (hmsLocalAudioStats != null) {
|
|
546
|
+
hmsLocalAudioStats.bitrate?.let { localAudioStats.putDouble("bitrate", it) }
|
|
547
|
+
localAudioStats.putString("bytesSent", hmsLocalAudioStats.bytesSent.toString())
|
|
548
|
+
hmsLocalAudioStats.roundTripTime?.let { localAudioStats.putDouble("roundTripTime", it) }
|
|
549
|
+
}
|
|
550
|
+
return localAudioStats
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
fun getLocalVideoStats(hmsLocalVideoStats: HMSLocalVideoStats?): WritableMap {
|
|
554
|
+
val localVideoStats: WritableMap = Arguments.createMap()
|
|
555
|
+
if (hmsLocalVideoStats != null) {
|
|
556
|
+
localVideoStats.putString("bytesSent", hmsLocalVideoStats.bytesSent.toString())
|
|
557
|
+
localVideoStats.putMap(
|
|
558
|
+
"resolution",
|
|
559
|
+
hmsLocalVideoStats.resolution?.let { this.getHmsVideoTrackResolution(it) }
|
|
560
|
+
)
|
|
561
|
+
hmsLocalVideoStats.bitrate?.let { localVideoStats.putDouble("bitrate", it) }
|
|
562
|
+
hmsLocalVideoStats.roundTripTime?.let { localVideoStats.putDouble("roundTripTime", it) }
|
|
563
|
+
hmsLocalVideoStats.frameRate?.let { localVideoStats.putDouble("frameRate", it) }
|
|
564
|
+
}
|
|
565
|
+
return localVideoStats
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
fun getRemoteAudioStats(hmsRemoteAudioStats: HMSRemoteAudioStats?): WritableMap {
|
|
569
|
+
val remoteAudioStats: WritableMap = Arguments.createMap()
|
|
570
|
+
if (hmsRemoteAudioStats != null) {
|
|
571
|
+
hmsRemoteAudioStats.bitrate?.let { remoteAudioStats.putDouble("bitrate", it) }
|
|
572
|
+
remoteAudioStats.putString("bytesReceived", hmsRemoteAudioStats.bytesReceived.toString())
|
|
573
|
+
hmsRemoteAudioStats.jitter?.let { remoteAudioStats.putDouble("jitter", it) }
|
|
574
|
+
hmsRemoteAudioStats.packetsLost?.let { remoteAudioStats.putInt("packetsLost", it) }
|
|
575
|
+
remoteAudioStats.putString("packetsReceived", hmsRemoteAudioStats.packetsReceived.toString())
|
|
576
|
+
}
|
|
577
|
+
return remoteAudioStats
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
fun getRemoteVideoStats(hmsRemoteVideoStats: HMSRemoteVideoStats?): WritableMap {
|
|
581
|
+
val remoteVideoStats: WritableMap = Arguments.createMap()
|
|
582
|
+
if (hmsRemoteVideoStats != null) {
|
|
583
|
+
remoteVideoStats.putString("bytesReceived", hmsRemoteVideoStats.bytesReceived.toString())
|
|
584
|
+
remoteVideoStats.putString("packetsReceived", hmsRemoteVideoStats.packetsReceived.toString())
|
|
585
|
+
hmsRemoteVideoStats.bitrate?.let { remoteVideoStats.putDouble("bitrate", it) }
|
|
586
|
+
remoteVideoStats.putMap(
|
|
587
|
+
"resolution",
|
|
588
|
+
hmsRemoteVideoStats.resolution?.let { this.getHmsVideoTrackResolution(it) }
|
|
589
|
+
)
|
|
590
|
+
hmsRemoteVideoStats.frameRate?.let { remoteVideoStats.putDouble("frameRate", it) }
|
|
591
|
+
hmsRemoteVideoStats.jitter?.let { remoteVideoStats.putDouble("jitter", it) }
|
|
592
|
+
hmsRemoteVideoStats.packetsLost?.let { remoteVideoStats.putInt("packetsLost", it) }
|
|
593
|
+
}
|
|
594
|
+
return remoteVideoStats
|
|
595
|
+
}
|
|
527
596
|
}
|
|
@@ -7,6 +7,7 @@ import android.os.Handler
|
|
|
7
7
|
import android.util.Base64
|
|
8
8
|
import android.util.Log
|
|
9
9
|
import android.view.PixelCopy
|
|
10
|
+
import android.webkit.URLUtil
|
|
10
11
|
import androidx.annotation.RequiresApi
|
|
11
12
|
import com.facebook.react.bridge.*
|
|
12
13
|
import com.facebook.react.bridge.ReadableArray
|
|
@@ -14,17 +15,16 @@ import com.facebook.react.bridge.ReadableMap
|
|
|
14
15
|
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
15
16
|
import java.io.ByteArrayOutputStream
|
|
16
17
|
import java.util.*
|
|
18
|
+
import live.hms.video.audio.HMSAudioManager
|
|
17
19
|
import live.hms.video.error.HMSException
|
|
18
20
|
import live.hms.video.media.codec.HMSAudioCodec
|
|
19
21
|
import live.hms.video.media.codec.HMSVideoCodec
|
|
20
|
-
import live.hms.video.media.settings
|
|
21
|
-
import live.hms.video.media.settings.HMSTrackSettings
|
|
22
|
-
import live.hms.video.media.settings.HMSVideoResolution
|
|
23
|
-
import live.hms.video.media.settings.HMSVideoTrackSettings
|
|
22
|
+
import live.hms.video.media.settings.*
|
|
24
23
|
import live.hms.video.media.tracks.HMSRemoteAudioTrack
|
|
25
24
|
import live.hms.video.media.tracks.HMSRemoteVideoTrack
|
|
26
25
|
import live.hms.video.media.tracks.HMSTrack
|
|
27
26
|
import live.hms.video.sdk.models.*
|
|
27
|
+
import live.hms.video.sdk.models.enums.AudioMixingMode
|
|
28
28
|
import live.hms.video.sdk.models.role.HMSRole
|
|
29
29
|
import live.hms.video.utils.HmsUtilities
|
|
30
30
|
import org.webrtc.SurfaceViewRenderer
|
|
@@ -250,6 +250,21 @@ object HMSHelper {
|
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
+
fun getAudioMixingMode(audioMixingMode: String?): AudioMixingMode {
|
|
254
|
+
when (audioMixingMode) {
|
|
255
|
+
"TALK_ONLY" -> {
|
|
256
|
+
return AudioMixingMode.TALK_ONLY
|
|
257
|
+
}
|
|
258
|
+
"MUSIC_ONLY" -> {
|
|
259
|
+
return AudioMixingMode.MUSIC_ONLY
|
|
260
|
+
}
|
|
261
|
+
"TALK_AND_MUSIC" -> {
|
|
262
|
+
return AudioMixingMode.TALK_AND_MUSIC
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return AudioMixingMode.TALK_AND_MUSIC
|
|
266
|
+
}
|
|
267
|
+
|
|
253
268
|
private fun getAudioCodec(codecString: String?): HMSAudioCodec {
|
|
254
269
|
when (codecString) {
|
|
255
270
|
"opus" -> {
|
|
@@ -296,7 +311,7 @@ object HMSHelper {
|
|
|
296
311
|
}
|
|
297
312
|
}
|
|
298
313
|
|
|
299
|
-
fun getRtmpUrls(rtmpURLsList: ReadableArray?): List<String> {
|
|
314
|
+
private fun getRtmpUrls(rtmpURLsList: ReadableArray?): List<String> {
|
|
300
315
|
val rtmpURLs = mutableListOf<String>()
|
|
301
316
|
if (rtmpURLsList !== null) {
|
|
302
317
|
for (rtmpURL in rtmpURLsList.toArrayList()) {
|
|
@@ -306,7 +321,25 @@ object HMSHelper {
|
|
|
306
321
|
return rtmpURLs
|
|
307
322
|
}
|
|
308
323
|
|
|
309
|
-
fun
|
|
324
|
+
fun getHLSConfig(data: ReadableMap?): HMSHLSConfig? {
|
|
325
|
+
if (data === null) {
|
|
326
|
+
return data
|
|
327
|
+
}
|
|
328
|
+
var hlsMeetingUrlVariant: List<HMSHLSMeetingURLVariant>? = null
|
|
329
|
+
if (areAllRequiredKeysAvailable(data, arrayOf(Pair("meetingURLVariants", "Array")))) {
|
|
330
|
+
val meetingURLVariants =
|
|
331
|
+
data.getArray("meetingURLVariants")?.toArrayList() as? ArrayList<HashMap<String, String>>
|
|
332
|
+
hlsMeetingUrlVariant = getHMSHLSMeetingURLVariants(meetingURLVariants)
|
|
333
|
+
}
|
|
334
|
+
var hlsRecordingConfig: HMSHlsRecordingConfig? = null
|
|
335
|
+
if (areAllRequiredKeysAvailable(data, arrayOf(Pair("hlsRecordingConfig", "Map")))) {
|
|
336
|
+
val recordingConfig = data.getMap("hlsRecordingConfig")
|
|
337
|
+
hlsRecordingConfig = getHlsRecordingConfig(recordingConfig)
|
|
338
|
+
}
|
|
339
|
+
return HMSHLSConfig(hlsMeetingUrlVariant, hlsRecordingConfig)
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
private fun getHMSHLSMeetingURLVariants(
|
|
310
343
|
hmsMeetingURLVariants: ArrayList<HashMap<String, String>>?
|
|
311
344
|
): List<HMSHLSMeetingURLVariant> {
|
|
312
345
|
val meetingURLVariants = mutableListOf<HMSHLSMeetingURLVariant>()
|
|
@@ -319,28 +352,25 @@ object HMSHelper {
|
|
|
319
352
|
return meetingURLVariants
|
|
320
353
|
}
|
|
321
354
|
|
|
322
|
-
fun getHlsRecordingConfig(
|
|
323
|
-
if (
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
) {
|
|
333
|
-
singleFilePerLayer = hmsHlsRecordingConfig.getBoolean("singleFilePerLayer")
|
|
334
|
-
}
|
|
335
|
-
if (areAllRequiredKeysAvailable(
|
|
336
|
-
hmsHlsRecordingConfig,
|
|
337
|
-
arrayOf(Pair("videoOnDemand", "Boolean"))
|
|
338
|
-
)
|
|
339
|
-
) {
|
|
340
|
-
videoOnDemand = hmsHlsRecordingConfig.getBoolean("videoOnDemand")
|
|
341
|
-
}
|
|
342
|
-
return HMSHlsRecordingConfig(singleFilePerLayer, videoOnDemand)
|
|
355
|
+
private fun getHlsRecordingConfig(hmsHlsRecordingConfig: ReadableMap?): HMSHlsRecordingConfig? {
|
|
356
|
+
if (hmsHlsRecordingConfig !== null) {
|
|
357
|
+
var singleFilePerLayer = false
|
|
358
|
+
var videoOnDemand = false
|
|
359
|
+
if (areAllRequiredKeysAvailable(
|
|
360
|
+
hmsHlsRecordingConfig,
|
|
361
|
+
arrayOf(Pair("singleFilePerLayer", "Boolean"))
|
|
362
|
+
)
|
|
363
|
+
) {
|
|
364
|
+
singleFilePerLayer = hmsHlsRecordingConfig.getBoolean("singleFilePerLayer")
|
|
343
365
|
}
|
|
366
|
+
if (areAllRequiredKeysAvailable(
|
|
367
|
+
hmsHlsRecordingConfig,
|
|
368
|
+
arrayOf(Pair("videoOnDemand", "Boolean"))
|
|
369
|
+
)
|
|
370
|
+
) {
|
|
371
|
+
videoOnDemand = hmsHlsRecordingConfig.getBoolean("videoOnDemand")
|
|
372
|
+
}
|
|
373
|
+
return HMSHlsRecordingConfig(singleFilePerLayer, videoOnDemand)
|
|
344
374
|
}
|
|
345
375
|
return null
|
|
346
376
|
}
|
|
@@ -357,6 +387,38 @@ object HMSHelper {
|
|
|
357
387
|
return meetingURLVariant
|
|
358
388
|
}
|
|
359
389
|
|
|
390
|
+
private fun getResolution(data: ReadableMap): HMSRtmpVideoResolution {
|
|
391
|
+
val height = data.getInt("height")
|
|
392
|
+
val width = data.getInt("width")
|
|
393
|
+
return HMSRtmpVideoResolution(width, height)
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
fun getRtmpConfig(data: ReadableMap): HMSRecordingConfig? {
|
|
397
|
+
val record = data.getBoolean("record")
|
|
398
|
+
var meetingURL = ""
|
|
399
|
+
var rtmpURLs = listOf<String>()
|
|
400
|
+
var resolution: HMSRtmpVideoResolution? = null
|
|
401
|
+
if (areAllRequiredKeysAvailable(data, arrayOf(Pair("meetingURL", "String")))) {
|
|
402
|
+
val meetingURLValid = data.getString("meetingURL") as String
|
|
403
|
+
if (URLUtil.isValidUrl(meetingURLValid)) {
|
|
404
|
+
meetingURL = meetingURLValid
|
|
405
|
+
} else {
|
|
406
|
+
return null
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (areAllRequiredKeysAvailable(data, arrayOf(Pair("rtmpURLs", "Array")))) {
|
|
411
|
+
val rtmpURLsValid = data.getArray("rtmpURLs")
|
|
412
|
+
rtmpURLs = this.getRtmpUrls(rtmpURLsValid)
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if (areAllRequiredKeysAvailable(data, arrayOf(Pair("resolution", "Map")))) {
|
|
416
|
+
val resolutionValid = data.getMap("resolution")
|
|
417
|
+
resolution = resolutionValid?.let { this.getResolution(it) }
|
|
418
|
+
}
|
|
419
|
+
return HMSRecordingConfig(meetingURL, rtmpURLs, record, resolution)
|
|
420
|
+
}
|
|
421
|
+
|
|
360
422
|
fun getHmsConfig(credentials: ReadableMap): HMSConfig {
|
|
361
423
|
var config =
|
|
362
424
|
HMSConfig(
|
|
@@ -512,4 +574,45 @@ object HMSHelper {
|
|
|
512
574
|
reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "captureFrame", output)
|
|
513
575
|
}
|
|
514
576
|
}
|
|
577
|
+
|
|
578
|
+
fun getAudioDevicesList(audioDevicesList: List<HMSAudioManager.AudioDevice>?): ReadableArray {
|
|
579
|
+
val hmsAudioDevicesList = Arguments.createArray()
|
|
580
|
+
if (audioDevicesList != null) {
|
|
581
|
+
for (audioDevice in audioDevicesList) {
|
|
582
|
+
hmsAudioDevicesList.pushString(audioDevice.name)
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
return hmsAudioDevicesList
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
fun getAudioDevicesSet(audioDevicesSet: Set<HMSAudioManager.AudioDevice>?): ReadableArray {
|
|
589
|
+
val hmsAudioDevicesSet = Arguments.createArray()
|
|
590
|
+
if (audioDevicesSet != null) {
|
|
591
|
+
for (audioDevice in audioDevicesSet) {
|
|
592
|
+
hmsAudioDevicesSet.pushString(audioDevice.name)
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
return hmsAudioDevicesSet
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
fun getAudioDevice(audioDevice: String?): HMSAudioManager.AudioDevice {
|
|
599
|
+
when (audioDevice) {
|
|
600
|
+
"AUTOMATIC" -> {
|
|
601
|
+
return HMSAudioManager.AudioDevice.AUTOMATIC
|
|
602
|
+
}
|
|
603
|
+
"BLUETOOTH" -> {
|
|
604
|
+
return HMSAudioManager.AudioDevice.BLUETOOTH
|
|
605
|
+
}
|
|
606
|
+
"EARPIECE" -> {
|
|
607
|
+
return HMSAudioManager.AudioDevice.EARPIECE
|
|
608
|
+
}
|
|
609
|
+
"SPEAKER_PHONE" -> {
|
|
610
|
+
return HMSAudioManager.AudioDevice.SPEAKER_PHONE
|
|
611
|
+
}
|
|
612
|
+
"WIRED_HEADSET" -> {
|
|
613
|
+
return HMSAudioManager.AudioDevice.WIRED_HEADSET
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
return HMSAudioManager.AudioDevice.SPEAKER_PHONE
|
|
617
|
+
}
|
|
515
618
|
}
|
|
@@ -202,10 +202,10 @@ class HMSManager(reactContext: ReactApplicationContext) :
|
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
@ReactMethod
|
|
205
|
-
fun remoteMuteAllAudio(data: ReadableMap) {
|
|
205
|
+
fun remoteMuteAllAudio(data: ReadableMap, callback: Promise?) {
|
|
206
206
|
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
207
207
|
|
|
208
|
-
hms?.remoteMuteAllAudio()
|
|
208
|
+
hms?.remoteMuteAllAudio(callback)
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
@ReactMethod
|
|
@@ -238,6 +238,43 @@ class HMSManager(reactContext: ReactApplicationContext) :
|
|
|
238
238
|
hms?.stopScreenshare(callback)
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
+
@ReactMethod
|
|
242
|
+
fun startAudioshare(data: ReadableMap, callback: Promise?) {
|
|
243
|
+
currentActivity?.application?.registerActivityLifecycleCallbacks(this)
|
|
244
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
245
|
+
|
|
246
|
+
hms?.startAudioshare(data, callback)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@ReactMethod
|
|
250
|
+
fun isAudioShared(data: ReadableMap, callback: Promise?) {
|
|
251
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
252
|
+
|
|
253
|
+
hms?.isAudioShared(callback)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@ReactMethod
|
|
257
|
+
fun stopAudioshare(data: ReadableMap, callback: Promise?) {
|
|
258
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
259
|
+
|
|
260
|
+
currentActivity?.application?.unregisterActivityLifecycleCallbacks(this)
|
|
261
|
+
hms?.stopAudioshare(callback)
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@ReactMethod
|
|
265
|
+
fun getAudioMixingMode(data: ReadableMap, callback: Promise?) {
|
|
266
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
267
|
+
|
|
268
|
+
callback?.resolve(hms?.getAudioMixingMode()?.name)
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
@ReactMethod
|
|
272
|
+
fun setAudioMixingMode(data: ReadableMap, callback: Promise?) {
|
|
273
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
274
|
+
|
|
275
|
+
hms?.setAudioMixingMode(data, callback)
|
|
276
|
+
}
|
|
277
|
+
|
|
241
278
|
@ReactMethod
|
|
242
279
|
fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
|
|
243
280
|
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
@@ -290,6 +327,55 @@ class HMSManager(reactContext: ReactApplicationContext) :
|
|
|
290
327
|
callback?.resolve(result)
|
|
291
328
|
}
|
|
292
329
|
|
|
330
|
+
@ReactMethod
|
|
331
|
+
fun enableRTCStats(data: ReadableMap) {
|
|
332
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
333
|
+
|
|
334
|
+
hms?.enableRTCStats()
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
@ReactMethod
|
|
338
|
+
fun disableRTCStats(data: ReadableMap) {
|
|
339
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
340
|
+
|
|
341
|
+
hms?.disableRTCStats()
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
@ReactMethod
|
|
345
|
+
fun getAudioDevicesList(data: ReadableMap, callback: Promise?) {
|
|
346
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
347
|
+
|
|
348
|
+
hms?.getAudioDevicesList(callback)
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
@ReactMethod
|
|
352
|
+
fun getAudioOutputRouteType(data: ReadableMap, callback: Promise?) {
|
|
353
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
354
|
+
|
|
355
|
+
hms?.getAudioOutputRouteType(callback)
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
@ReactMethod
|
|
359
|
+
fun switchAudioOutput(data: ReadableMap) {
|
|
360
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
361
|
+
|
|
362
|
+
hms?.switchAudioOutput(data)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
@ReactMethod
|
|
366
|
+
fun setAudioMode(data: ReadableMap) {
|
|
367
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
368
|
+
|
|
369
|
+
hms?.setAudioMode(data)
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
@ReactMethod
|
|
373
|
+
fun setAudioDeviceChangeListener(data: ReadableMap) {
|
|
374
|
+
val hms = HMSHelper.getHms(data, hmsCollection)
|
|
375
|
+
|
|
376
|
+
hms?.setAudioDeviceChangeListener()
|
|
377
|
+
}
|
|
378
|
+
|
|
293
379
|
fun emitEvent(event: String, data: WritableMap) {
|
|
294
380
|
reactApplicationContext
|
|
295
381
|
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|