@100mslive/react-native-hms 1.6.1 → 1.7.0
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/android/build.gradle +15 -7
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +14 -15
- package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +248 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +101 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +10 -5
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +0 -14
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +90 -106
- package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -1
- package/android/src/main/res/layout/player_view.xml +9 -0
- package/ios/HMSDecoder.swift +4 -4
- package/ios/HMSHLSPlayerManager.m +22 -0
- package/ios/HMSHLSPlayerManager.swift +368 -0
- package/ios/HMSManager.m +1 -2
- package/ios/HMSManager.swift +22 -16
- package/ios/HMSRNSDK.swift +34 -85
- package/lib/commonjs/classes/HMSEncoder.js +12 -4
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSMessage.js +2 -1
- package/lib/commonjs/classes/HMSMessage.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js +55 -20
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPeerUpdate.js +1 -1
- package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSPeersCache.js +30 -38
- package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
- package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +36 -33
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +147 -0
- package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +12 -0
- package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/hooks.js +71 -0
- package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/index.js +63 -0
- package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -0
- package/lib/commonjs/index.js +38 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/stores/hls-player-playback-slice.js +23 -0
- package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -0
- package/lib/commonjs/stores/hls-player-stats-store.js +36 -0
- package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -0
- package/lib/commonjs/stores/hms-store.js +16 -0
- package/lib/commonjs/stores/hms-store.js.map +1 -0
- package/lib/commonjs/stores/types.js +6 -0
- package/lib/commonjs/stores/types.js.map +1 -0
- package/lib/commonjs/types.js +36 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +12 -4
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSLocalPeer.js.map +1 -1
- package/lib/module/classes/HMSMessage.js +2 -1
- package/lib/module/classes/HMSMessage.js.map +1 -1
- package/lib/module/classes/HMSPeer.js +55 -20
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPeerUpdate.js +1 -1
- package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/module/classes/HMSPeersCache.js +30 -38
- package/lib/module/classes/HMSPeersCache.js.map +1 -1
- package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/module/classes/HMSRemotePeer.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +36 -33
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +138 -0
- package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +4 -0
- package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/hooks.js +56 -0
- package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/index.js +3 -0
- package/lib/module/components/HMSHLSPlayer/index.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/stores/hls-player-playback-slice.js +16 -0
- package/lib/module/stores/hls-player-playback-slice.js.map +1 -0
- package/lib/module/stores/hls-player-stats-store.js +29 -0
- package/lib/module/stores/hls-player-stats-store.js.map +1 -0
- package/lib/module/stores/hms-store.js +9 -0
- package/lib/module/stores/hms-store.js.map +1 -0
- package/lib/module/stores/types.js +2 -0
- package/lib/module/stores/types.js.map +1 -0
- package/lib/module/types.js +32 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
- package/lib/typescript/classes/HMSLocalPeer.d.ts +0 -1
- package/lib/typescript/classes/HMSMessage.d.ts +2 -0
- package/lib/typescript/classes/HMSPeer.d.ts +10 -5
- package/lib/typescript/classes/HMSPeersCache.d.ts +17 -2
- package/lib/typescript/classes/HMSRTMPConfig.d.ts +2 -2
- package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
- package/lib/typescript/classes/HMSSDK.d.ts +12 -17
- package/lib/typescript/components/HMSHLSPlayer/HMSHLSPlayer.d.ts +21 -0
- package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +19 -0
- package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +17 -0
- package/lib/typescript/components/HMSHLSPlayer/index.d.ts +2 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/stores/hls-player-playback-slice.d.ts +5 -0
- package/lib/typescript/stores/hls-player-stats-store.d.ts +9 -0
- package/lib/typescript/stores/hms-store.d.ts +9 -0
- package/lib/typescript/stores/types.d.ts +25 -0
- package/lib/typescript/types.d.ts +63 -0
- package/package.json +10 -5
- package/react-native-hms.podspec +1 -0
- package/sdk-versions.json +3 -2
- package/src/classes/HMSEncoder.ts +15 -3
- package/src/classes/HMSLocalPeer.ts +0 -1
- package/src/classes/HMSMessage.ts +3 -1
- package/src/classes/HMSPeer.ts +96 -48
- package/src/classes/HMSPeerUpdate.ts +4 -4
- package/src/classes/HMSPeersCache.ts +53 -40
- package/src/classes/HMSRTMPConfig.ts +2 -2
- package/src/classes/HMSRemotePeer.ts +0 -1
- package/src/classes/HMSSDK.tsx +59 -47
- package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +235 -0
- package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +38 -0
- package/src/components/HMSHLSPlayer/hooks.ts +100 -0
- package/src/components/HMSHLSPlayer/index.ts +9 -0
- package/src/index.ts +8 -0
- package/src/stores/hls-player-playback-slice.ts +25 -0
- package/src/stores/hls-player-stats-store.ts +37 -0
- package/src/stores/hms-store.ts +11 -0
- package/src/stores/types.ts +49 -0
- package/src/types.ts +119 -0
- package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/6.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- 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/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/compiler.xml +0 -6
- package/android/.idea/gradle.xml +0 -18
- package/android/.idea/jarRepositories.xml +0 -50
- package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_0_3_0_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_71_0_rc_0_debug_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_github_100mslive_android_sdk_lib_2_5_1_aar.xml +0 -10
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m104_hms_1_3_aar.xml +0 -10
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_0.xml +0 -13
- package/android/.idea/misc.xml +0 -9
- package/android/.idea/modules/android.androidTest.iml +0 -203
- package/android/.idea/modules/android.iml +0 -40
- package/android/.idea/modules/android.main.iml +0 -199
- package/android/.idea/modules/android.unitTest.iml +0 -197
- package/android/.idea/modules.xml +0 -11
- package/android/.idea/sonarlint/issuestore/3/c/3c46088b6add3088181589d8ed726652742b6221 +0 -5
- package/android/.idea/sonarlint/issuestore/a/8/a8c9f5ddd88723818e51ae3cf8693d02355a8691 +0 -0
- package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
- package/android/.idea/sonarlint/issuestore/index.pb +0 -7
- package/android/.idea/vcs.xml +0 -6
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import HMSSDK
|
|
2
|
+
import HMSHLSPlayerSDK
|
|
3
|
+
import AVKit.AVPlayerViewController
|
|
4
|
+
|
|
5
|
+
typealias HmsHlsPlayer = HMSHLSPlayerSDK.HMSHLSPlayer
|
|
6
|
+
|
|
7
|
+
@objc(HMSHLSPlayerManager)
|
|
8
|
+
class HMSHLSPlayerManager: RCTViewManager {
|
|
9
|
+
override func view() -> (HMSHLSPlayer) {
|
|
10
|
+
let view = HMSHLSPlayer()
|
|
11
|
+
let hms = getHmsFromBridge()
|
|
12
|
+
|
|
13
|
+
view.setHms(hms)
|
|
14
|
+
|
|
15
|
+
return view
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
func getHmsFromBridge() -> [String: HMSRNSDK] {
|
|
19
|
+
let collection = (bridge.module(for: HMSManager.classForCoder()) as? HMSManager)?.hmsCollection ?? [String: HMSRNSDK]()
|
|
20
|
+
return collection
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
24
|
+
true
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@objc func play(_ node: NSNumber, url: String? = nil) {
|
|
28
|
+
DispatchQueue.main.async {
|
|
29
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
30
|
+
component.play(url)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@objc func stop(_ node: NSNumber) {
|
|
36
|
+
DispatchQueue.main.async {
|
|
37
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
38
|
+
component.stop()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@objc func pause(_ node: NSNumber) {
|
|
44
|
+
DispatchQueue.main.async {
|
|
45
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
46
|
+
component.pause()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@objc func resume(_ node: NSNumber) {
|
|
52
|
+
DispatchQueue.main.async {
|
|
53
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
54
|
+
component.resume()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@objc func seekToLivePosition(_ node: NSNumber) {
|
|
60
|
+
DispatchQueue.main.async {
|
|
61
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
62
|
+
component.seekToLivePosition()
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@objc func seekForward(_ node: NSNumber, seconds: NSNumber) {
|
|
68
|
+
DispatchQueue.main.async {
|
|
69
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
70
|
+
component.seekForward(Double(truncating: seconds))
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@objc func seekBackward(_ node: NSNumber, seconds: NSNumber) {
|
|
76
|
+
DispatchQueue.main.async {
|
|
77
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
78
|
+
component.seekBackward(Double(truncating: seconds))
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@objc func setVolume(_ node: NSNumber, level: NSNumber) {
|
|
84
|
+
DispatchQueue.main.async {
|
|
85
|
+
if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
|
|
86
|
+
component.setVolume(Int(truncating: level))
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
class HMSHLSPlayer: UIView {
|
|
93
|
+
// MARK: class instance properties
|
|
94
|
+
var hlsStatsTimerRef: Timer?
|
|
95
|
+
var eventController: HLSPlaybackEventController?
|
|
96
|
+
var hmsHLSPlayerViewController: AVPlayerViewController?
|
|
97
|
+
lazy var hmsHLSPlayer = HmsHlsPlayer()
|
|
98
|
+
|
|
99
|
+
// MARK: Handle HMSRNSDK Instance in HMSHLSPlayer instance
|
|
100
|
+
var hmsCollection = [String: HMSRNSDK]()
|
|
101
|
+
|
|
102
|
+
func setHms(_ hmsInstance: [String: HMSRNSDK]) {
|
|
103
|
+
hmsCollection = hmsInstance
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// MARK: Handle HMSHLSPlayer RN Component props
|
|
107
|
+
|
|
108
|
+
@objc var onHmsHlsPlaybackEvent: RCTDirectEventBlock?
|
|
109
|
+
|
|
110
|
+
@objc var onHmsHlsStatsEvent: RCTDirectEventBlock?
|
|
111
|
+
|
|
112
|
+
@objc var url: String? {
|
|
113
|
+
didSet {
|
|
114
|
+
play(url)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@objc var enableStats: Bool = false {
|
|
119
|
+
didSet {
|
|
120
|
+
if enableStats == true {
|
|
121
|
+
attachHLSPlayerStatsListener()
|
|
122
|
+
} else {
|
|
123
|
+
// If we have existing Stats Timer, Invalidate it
|
|
124
|
+
if let hlsStatsTimer = hlsStatsTimerRef {
|
|
125
|
+
hlsStatsTimer.invalidate()
|
|
126
|
+
hlsStatsTimerRef = nil
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@objc var enableControls: Bool = true {
|
|
133
|
+
didSet {
|
|
134
|
+
hmsHLSPlayerViewController?.showsPlaybackControls = enableControls
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// MARK: Handle HMSHLSPlayer RN Component methods
|
|
139
|
+
|
|
140
|
+
@objc func play(_ url: String?) {
|
|
141
|
+
if let validURLString = url, !validURLString.isEmpty {
|
|
142
|
+
if let urlInstance = URL(string: validURLString) {
|
|
143
|
+
hmsHLSPlayer.play(urlInstance)
|
|
144
|
+
}
|
|
145
|
+
return
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
guard let hlsStreamingState = hmsCollection["12345"]?.hms?.room?.hlsStreamingState else {
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if hlsStreamingState.running && !hlsStreamingState.variants.isEmpty {
|
|
153
|
+
hmsHLSPlayer.play(hlsStreamingState.variants[0].meetingURL)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@objc func stop() {
|
|
158
|
+
hmsHLSPlayer.stop()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@objc func pause() {
|
|
162
|
+
hmsHLSPlayer.pause()
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@objc func resume() {
|
|
166
|
+
hmsHLSPlayer.resume()
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@objc func seekForward(_ seconds: Double) {
|
|
170
|
+
hmsHLSPlayer.seekForward(seconds: seconds)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@objc func seekBackward(_ seconds: Double) {
|
|
174
|
+
hmsHLSPlayer.seekBackward(seconds: seconds)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@objc func seekToLivePosition() {
|
|
178
|
+
hmsHLSPlayer.seekToLivePosition()
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@objc func setVolume(_ level: Int) {
|
|
182
|
+
hmsHLSPlayer.volume = level
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// MARK: Constructor & Deconstructor
|
|
186
|
+
|
|
187
|
+
override init(frame: CGRect) {
|
|
188
|
+
super.init(frame: frame)
|
|
189
|
+
|
|
190
|
+
// setting properties on current UIView
|
|
191
|
+
self.frame = frame
|
|
192
|
+
self.backgroundColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 1)
|
|
193
|
+
|
|
194
|
+
// creating 100ms HLS Player and getting player view controller
|
|
195
|
+
let playerViewController = hmsHLSPlayer.videoPlayerViewController(showsPlayerControls: false)
|
|
196
|
+
hmsHLSPlayerViewController = playerViewController
|
|
197
|
+
playerViewController.view.frame = self.bounds
|
|
198
|
+
|
|
199
|
+
// Setting 100ms HLS Player as subview of current UIView
|
|
200
|
+
self.addSubview(playerViewController.view)
|
|
201
|
+
|
|
202
|
+
attachPlayerPlaybackListeners()
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
required init?(coder: NSCoder) {
|
|
206
|
+
fatalError("init(coder:) has not been implemented")
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
deinit {
|
|
210
|
+
cleanup()
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// MARK: Utility functions
|
|
214
|
+
func cleanup() {
|
|
215
|
+
hmsHLSPlayer.stop()
|
|
216
|
+
|
|
217
|
+
// Remove HLS player playback events
|
|
218
|
+
hmsHLSPlayer.delegate = nil
|
|
219
|
+
|
|
220
|
+
// Remove HLS player stats timer
|
|
221
|
+
hlsStatsTimerRef?.invalidate()
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private func sendHLSPlaybackEventToJS(_ eventName: String, _ data: [String: Any]) {
|
|
225
|
+
guard let onHmsHlsPlaybackEvent = onHmsHlsPlaybackEvent else { return }
|
|
226
|
+
|
|
227
|
+
onHmsHlsPlaybackEvent(["event": eventName, "data": data])
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private func sendHLSStatsEventToJS(_ eventName: String, _ data: [String: Any]) {
|
|
231
|
+
guard let onHmsHlsStatsEvent = onHmsHlsStatsEvent else { return }
|
|
232
|
+
|
|
233
|
+
onHmsHlsStatsEvent(["event": eventName, "data": data])
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
private func attachPlayerPlaybackListeners() {
|
|
237
|
+
// Attaching HLS Player Playback Events Listener
|
|
238
|
+
eventController = HLSPlaybackEventController(self)
|
|
239
|
+
hmsHLSPlayer.delegate = eventController
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private func attachHLSPlayerStatsListener() {
|
|
243
|
+
// Only Attach listener, if there is no previously attached listener
|
|
244
|
+
if hlsStatsTimerRef == nil {
|
|
245
|
+
|
|
246
|
+
// Attaching HLS Player Stats Event Listener
|
|
247
|
+
hlsStatsTimerRef = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { [weak self] _ in
|
|
248
|
+
guard let self = self, self.onHmsHlsStatsEvent != nil else { return }
|
|
249
|
+
|
|
250
|
+
let statsMonitor = self.hmsHLSPlayer.statMonitor
|
|
251
|
+
|
|
252
|
+
var data = [String: Any]()
|
|
253
|
+
|
|
254
|
+
// bandwidth
|
|
255
|
+
data["bandWidthEstimate"] = statsMonitor.estimatedBandwidth
|
|
256
|
+
data["totalBytesLoaded"] = statsMonitor.bytesDownloaded
|
|
257
|
+
|
|
258
|
+
// bufferedDuration
|
|
259
|
+
data["bufferedDuration"] = statsMonitor.bufferedDuration
|
|
260
|
+
|
|
261
|
+
// distanceFromLive
|
|
262
|
+
data["distanceFromLive"] = statsMonitor.distanceFromLiveEdge
|
|
263
|
+
|
|
264
|
+
// frameInfo
|
|
265
|
+
data["droppedFrameCount"] = statsMonitor.droppedFrames
|
|
266
|
+
|
|
267
|
+
// videoInfo
|
|
268
|
+
data["averageBitrate"] = statsMonitor.bitrate
|
|
269
|
+
data["videoHeight"] = statsMonitor.videoSize.height
|
|
270
|
+
data["videoWidth"] = statsMonitor.videoSize.width
|
|
271
|
+
|
|
272
|
+
self.sendHLSStatsEventToJS(HMSHLSPlayerConstants.ON_STATS_EVENT_UPDATE, data)
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
fileprivate func onCue(cue: HMSHLSCue) {
|
|
278
|
+
guard onHmsHlsPlaybackEvent != nil else { return }
|
|
279
|
+
|
|
280
|
+
var data = [String: Any]()
|
|
281
|
+
|
|
282
|
+
data["id"] = cue.id
|
|
283
|
+
data["startDate"] = String(cue.startDate.timeIntervalSince1970)
|
|
284
|
+
if let endDate = cue.endDate {
|
|
285
|
+
data["endDate"] = String(endDate.timeIntervalSince1970)
|
|
286
|
+
}
|
|
287
|
+
if let payload = cue.payload {
|
|
288
|
+
data["payloadval"] = payload
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
sendHLSPlaybackEventToJS(HMSHLSPlayerConstants.ON_PLAYBACK_CUE_EVENT, data)
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
fileprivate func onPlaybackFailure(error: Error) {
|
|
295
|
+
guard onHmsHlsPlaybackEvent != nil else { return }
|
|
296
|
+
|
|
297
|
+
var data = [String: Any]()
|
|
298
|
+
|
|
299
|
+
data["error"] = [
|
|
300
|
+
"errorCode": error.localizedDescription,
|
|
301
|
+
"errorCodeName": error.localizedDescription,
|
|
302
|
+
"message": error.localizedDescription
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
sendHLSPlaybackEventToJS(HMSHLSPlayerConstants.ON_PLAYBACK_FAILURE_EVENT, data)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
fileprivate func onPlaybackStateChanged(state: HMSHLSPlaybackState) {
|
|
309
|
+
guard onHmsHlsPlaybackEvent != nil else { return }
|
|
310
|
+
|
|
311
|
+
var data = [String: Any]()
|
|
312
|
+
|
|
313
|
+
data["state"] = state.description
|
|
314
|
+
|
|
315
|
+
sendHLSPlaybackEventToJS(HMSHLSPlayerConstants.ON_PLAYBACK_STATE_CHANGE_EVENT, data)
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
class HLSPlaybackEventController: HMSHLSPlayerDelegate {
|
|
320
|
+
weak var hmsHlsPlayerDelegate: HMSHLSPlayer?
|
|
321
|
+
|
|
322
|
+
init(_ hmsPlayerDelegate: HMSHLSPlayer) {
|
|
323
|
+
self.hmsHlsPlayerDelegate = hmsPlayerDelegate
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
func onPlaybackStateChanged(state: HMSHLSPlaybackState) {
|
|
327
|
+
hmsHlsPlayerDelegate?.onPlaybackStateChanged(state: state)
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
func onCue(cue: HMSHLSCue) {
|
|
331
|
+
hmsHlsPlayerDelegate?.onCue(cue: cue)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
func onPlaybackFailure(error: Error) {
|
|
335
|
+
hmsHlsPlayerDelegate?.onPlaybackFailure(error: error)
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
enum HMSHLSPlayerConstants {
|
|
340
|
+
// HLS Playback Events
|
|
341
|
+
static let ON_PLAYBACK_CUE_EVENT = "ON_PLAYBACK_CUE_EVENT"
|
|
342
|
+
static let ON_PLAYBACK_FAILURE_EVENT = "ON_PLAYBACK_FAILURE_EVENT"
|
|
343
|
+
static let ON_PLAYBACK_STATE_CHANGE_EVENT = "ON_PLAYBACK_STATE_CHANGE_EVENT"
|
|
344
|
+
|
|
345
|
+
// HLS Playback Stats Events
|
|
346
|
+
static let ON_STATS_EVENT_UPDATE = "ON_STATS_EVENT_UPDATE"
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
extension HMSHLSPlaybackState: CustomStringConvertible {
|
|
350
|
+
public var description: String {
|
|
351
|
+
switch self {
|
|
352
|
+
case .buffering:
|
|
353
|
+
return "buffering"
|
|
354
|
+
case .failed:
|
|
355
|
+
return "failed"
|
|
356
|
+
case .paused:
|
|
357
|
+
return "paused"
|
|
358
|
+
case .playing:
|
|
359
|
+
return "playing"
|
|
360
|
+
case .stopped:
|
|
361
|
+
return "stopped"
|
|
362
|
+
case .unknown:
|
|
363
|
+
return "unknown"
|
|
364
|
+
@unknown default:
|
|
365
|
+
return "unknown"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
package/ios/HMSManager.m
CHANGED
|
@@ -38,6 +38,7 @@ RCT_EXTERN_METHOD(destroy: (NSDictionary) data :(RCTPromiseResolveBlock) resolve
|
|
|
38
38
|
RCT_EXTERN_METHOD(startScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
39
39
|
RCT_EXTERN_METHOD(stopScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
40
40
|
RCT_EXTERN_METHOD(isScreenShared: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
41
|
+
RCT_EXTERN_METHOD(switchAudioOutputUsingIOSUI: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
41
42
|
RCT_EXTERN_METHOD(playAudioShare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
42
43
|
RCT_EXTERN_METHOD(setAudioShareVolume: (NSDictionary) data)
|
|
43
44
|
RCT_EXTERN_METHOD(stopAudioShare: (NSDictionary) data)
|
|
@@ -51,8 +52,6 @@ RCT_EXTERN_METHOD(getRemotePeers: (NSDictionary) data :(RCTPromiseResolveBlock)
|
|
|
51
52
|
RCT_EXTERN_METHOD(getRoles: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
52
53
|
RCT_EXTERN_METHOD(enableNetworkQualityUpdates: (NSDictionary) data)
|
|
53
54
|
RCT_EXTERN_METHOD(disableNetworkQualityUpdates: (NSDictionary) data)
|
|
54
|
-
RCT_EXTERN_METHOD(setSessionMetaData: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
55
|
-
RCT_EXTERN_METHOD(getSessionMetaData: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
56
55
|
RCT_EXTERN_METHOD(changeRoleOfPeer: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
57
56
|
RCT_EXTERN_METHOD(changeRoleOfPeersWithRoles: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
58
57
|
|
package/ios/HMSManager.swift
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import HMSSDK
|
|
2
|
+
import AVKit.AVRoutePickerView
|
|
2
3
|
|
|
3
4
|
@objc(HMSManager)
|
|
4
5
|
class HMSManager: RCTEventEmitter {
|
|
@@ -182,6 +183,27 @@ class HMSManager: RCTEventEmitter {
|
|
|
182
183
|
hms?.setVolume(data)
|
|
183
184
|
}
|
|
184
185
|
|
|
186
|
+
@objc
|
|
187
|
+
func switchAudioOutputUsingIOSUI(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
188
|
+
DispatchQueue.main.async {
|
|
189
|
+
// Creating RoutePickerView
|
|
190
|
+
// Note:- We will trigger tap event on it without rendering this view in UI.
|
|
191
|
+
let routePickerView = AVRoutePickerView()
|
|
192
|
+
|
|
193
|
+
// Iterating over subviews of AVRoutePickerView
|
|
194
|
+
for view in routePickerView.subviews {
|
|
195
|
+
// Checking if the current subview is UIButton
|
|
196
|
+
if let button = view as? UIButton {
|
|
197
|
+
// Trigger tap event on the button
|
|
198
|
+
// so, that Picker View is shown
|
|
199
|
+
button.sendActions(for: .touchUpInside)
|
|
200
|
+
break
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
resolve?(true)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
185
207
|
// MARK: - Messaging
|
|
186
208
|
|
|
187
209
|
@objc
|
|
@@ -411,15 +433,6 @@ class HMSManager: RCTEventEmitter {
|
|
|
411
433
|
hms?.disableNetworkQualityUpdates()
|
|
412
434
|
}
|
|
413
435
|
|
|
414
|
-
// MARK: - Session Metadata
|
|
415
|
-
|
|
416
|
-
@objc
|
|
417
|
-
func setSessionMetaData(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
418
|
-
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
419
|
-
|
|
420
|
-
hms?.setSessionMetaData(data, resolve, reject)
|
|
421
|
-
}
|
|
422
|
-
|
|
423
436
|
// MARK: - Peer & Room Property Getter Functions
|
|
424
437
|
|
|
425
438
|
@objc
|
|
@@ -499,13 +512,6 @@ class HMSManager: RCTEventEmitter {
|
|
|
499
512
|
hms?.getRoles(resolve)
|
|
500
513
|
}
|
|
501
514
|
|
|
502
|
-
@objc
|
|
503
|
-
func getSessionMetaData(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
504
|
-
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
505
|
-
|
|
506
|
-
hms?.getSessionMetaData(resolve, reject)
|
|
507
|
-
}
|
|
508
|
-
|
|
509
515
|
@objc
|
|
510
516
|
func getRemoteVideoTrackFromTrackId(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
511
517
|
let hms = HMSHelper.getHms(data, hmsCollection)
|
package/ios/HMSRNSDK.swift
CHANGED
|
@@ -264,7 +264,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
264
264
|
DispatchQueue.main.async { [weak self] in
|
|
265
265
|
self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
|
|
266
266
|
if error == nil {
|
|
267
|
-
resolve?(["
|
|
267
|
+
resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
268
268
|
return
|
|
269
269
|
} else {
|
|
270
270
|
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
@@ -292,7 +292,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
292
292
|
let encodedTargetedRoles = HMSHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
|
|
293
293
|
self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
|
|
294
294
|
if error == nil {
|
|
295
|
-
resolve?(["
|
|
295
|
+
resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
296
296
|
return
|
|
297
297
|
} else {
|
|
298
298
|
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
@@ -320,7 +320,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
320
320
|
guard let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
|
|
321
321
|
self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
|
|
322
322
|
if error == nil {
|
|
323
|
-
resolve?(["
|
|
323
|
+
resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
324
324
|
return
|
|
325
325
|
} else {
|
|
326
326
|
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
@@ -373,9 +373,17 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
373
373
|
let force = data.value(forKey: "force") as? Bool ?? false
|
|
374
374
|
|
|
375
375
|
DispatchQueue.main.async { [weak self] in
|
|
376
|
-
guard let peer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer: self?.hms?.localPeer)
|
|
377
|
-
|
|
378
|
-
|
|
376
|
+
guard let peer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer: self?.hms?.localPeer)
|
|
377
|
+
else {
|
|
378
|
+
reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
|
|
379
|
+
return
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
guard let role = HMSHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
|
|
383
|
+
else {
|
|
384
|
+
reject?("ROLE_NOT_FOUND", "ROLE_NOT_FOUND", nil)
|
|
385
|
+
return
|
|
386
|
+
}
|
|
379
387
|
|
|
380
388
|
self?.hms?.changeRole(for: peer, to: role, force: force, completion: { success, error in
|
|
381
389
|
if success {
|
|
@@ -695,25 +703,28 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
695
703
|
}
|
|
696
704
|
|
|
697
705
|
func startRTMPOrRecording(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
698
|
-
guard let record = data.value(forKey: "record") as? Bool
|
|
699
|
-
let meetingString = data.value(forKey: "meetingURL") as? String
|
|
706
|
+
guard let record = data.value(forKey: "record") as? Bool
|
|
700
707
|
else {
|
|
701
|
-
let errorMessage = "startRTMPOrRecording: " + HMSHelper.getUnavailableRequiredKey(data, ["record"
|
|
708
|
+
let errorMessage = "startRTMPOrRecording: " + HMSHelper.getUnavailableRequiredKey(data, ["record"])
|
|
702
709
|
emitRequiredKeysError(errorMessage)
|
|
703
710
|
reject?(errorMessage, errorMessage, nil)
|
|
704
711
|
return
|
|
705
712
|
}
|
|
706
713
|
|
|
714
|
+
let meetingNullableString = data.value(forKey: "meetingURL") as? String
|
|
715
|
+
|
|
707
716
|
let rtmpStrings = data.value(forKey: "rtmpURLs") as? [String]
|
|
708
717
|
|
|
709
718
|
var meetingUrl: URL?
|
|
710
|
-
if let
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
719
|
+
if let meetingString = meetingNullableString, !meetingString.isEmpty {
|
|
720
|
+
if let meetLink = URL(string: meetingString) {
|
|
721
|
+
meetingUrl = meetLink
|
|
722
|
+
} else {
|
|
723
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
724
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Invalid meeting url passed", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
725
|
+
}
|
|
726
|
+
reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
|
|
715
727
|
}
|
|
716
|
-
reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
|
|
717
728
|
}
|
|
718
729
|
|
|
719
730
|
let URLs = HMSHelper.getRtmpUrls(rtmpStrings)
|
|
@@ -1070,39 +1081,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1070
1081
|
networkQualityUpdatesAttached = false
|
|
1071
1082
|
}
|
|
1072
1083
|
|
|
1073
|
-
func setSessionMetaData(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1074
|
-
let metaData = data.value(forKey: "sessionMetaData") as? String ?? ""
|
|
1075
|
-
|
|
1076
|
-
DispatchQueue.main.async { [weak self] in
|
|
1077
|
-
|
|
1078
|
-
guard let self = self else {
|
|
1079
|
-
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1080
|
-
self?.emitRequiredKeysError(errorMessage)
|
|
1081
|
-
reject?(errorMessage, errorMessage, nil)
|
|
1082
|
-
return
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
self.hms?.setSessionMetadata(metaData) { [weak self] success, error in
|
|
1086
|
-
|
|
1087
|
-
guard let self = self else {
|
|
1088
|
-
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1089
|
-
self?.emitRequiredKeysError(errorMessage)
|
|
1090
|
-
reject?(errorMessage, errorMessage, nil)
|
|
1091
|
-
return
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
if success {
|
|
1095
|
-
resolve?(["success": success])
|
|
1096
|
-
} else {
|
|
1097
|
-
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1098
|
-
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
1099
|
-
}
|
|
1100
|
-
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1101
|
-
}
|
|
1102
|
-
}
|
|
1103
|
-
}
|
|
1104
|
-
}
|
|
1105
|
-
|
|
1106
1084
|
func enableEvent(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1107
1085
|
guard let eventType = data.value(forKey: "eventType") as? String else {
|
|
1108
1086
|
let errorMessage = "enableEvent: " + HMSHelper.getUnavailableRequiredKey(data, ["eventType"])
|
|
@@ -1112,7 +1090,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1112
1090
|
}
|
|
1113
1091
|
|
|
1114
1092
|
eventsEnableStatus[eventType] = true
|
|
1115
|
-
resolve?(["success": true
|
|
1093
|
+
resolve?(["success": true] as [String: Any])
|
|
1116
1094
|
}
|
|
1117
1095
|
|
|
1118
1096
|
func disableEvent(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
@@ -1162,36 +1140,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1162
1140
|
resolve?(roles)
|
|
1163
1141
|
}
|
|
1164
1142
|
|
|
1165
|
-
func getSessionMetaData(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1166
|
-
|
|
1167
|
-
DispatchQueue.main.async { [weak self] in
|
|
1168
|
-
|
|
1169
|
-
guard let self = self else {
|
|
1170
|
-
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1171
|
-
self?.emitRequiredKeysError(errorMessage)
|
|
1172
|
-
reject?(errorMessage, errorMessage, nil)
|
|
1173
|
-
return
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
self.hms?.getSessionMetadata { [weak self] result, error in
|
|
1177
|
-
|
|
1178
|
-
guard let self = self else {
|
|
1179
|
-
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1180
|
-
self?.emitRequiredKeysError(errorMessage)
|
|
1181
|
-
reject?(errorMessage, errorMessage, nil)
|
|
1182
|
-
return
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
|
-
if error != nil {
|
|
1186
|
-
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
1187
|
-
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1188
|
-
} else {
|
|
1189
|
-
resolve?(result)
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
|
-
|
|
1195
1143
|
func getPeerProperty(_ data: NSDictionary) -> [AnyHashable: Any]? {
|
|
1196
1144
|
guard let property = data.value(forKey: "property") as? String else {
|
|
1197
1145
|
return nil
|
|
@@ -1383,16 +1331,17 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1383
1331
|
}
|
|
1384
1332
|
|
|
1385
1333
|
func on(peer: HMSPeer, update: HMSPeerUpdate) {
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
let hmsPeer = HMSDecoder.getHmsPeerSubsetForPeerUpdateEvent(peer, update)
|
|
1334
|
+
|
|
1335
|
+
guard let isPeerUpdateEnabled = eventsEnableStatus[HMSConstants.ON_PEER_UPDATE],
|
|
1336
|
+
isPeerUpdateEnabled
|
|
1337
|
+
else { return }
|
|
1391
1338
|
|
|
1392
1339
|
if !networkQualityUpdatesAttached && update == .networkQualityUpdated {
|
|
1393
1340
|
return
|
|
1394
1341
|
}
|
|
1395
1342
|
|
|
1343
|
+
let hmsPeer = HMSDecoder.getHmsPeerSubsetForPeerUpdateEvent(peer, update)
|
|
1344
|
+
|
|
1396
1345
|
self.delegate?.emitEvent(HMSConstants.ON_PEER_UPDATE, hmsPeer)
|
|
1397
1346
|
}
|
|
1398
1347
|
|
|
@@ -1432,7 +1381,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1432
1381
|
if eventsEnableStatus[HMSConstants.ON_MESSAGE] != true {
|
|
1433
1382
|
return
|
|
1434
1383
|
}
|
|
1435
|
-
self.delegate?.emitEvent(HMSConstants.ON_MESSAGE, ["event": HMSConstants.ON_MESSAGE, "id": self.id, "sender": HMSDecoder.getHmsPeerSubset(message.sender), "recipient": HMSDecoder.getHmsMessageRecipient(message.recipient), "time": message.time.timeIntervalSince1970 * 1000, "message": message.message, "type": message.type])
|
|
1384
|
+
self.delegate?.emitEvent(HMSConstants.ON_MESSAGE, ["event": HMSConstants.ON_MESSAGE, "id": self.id, "sender": HMSDecoder.getHmsPeerSubset(message.sender), "recipient": HMSDecoder.getHmsMessageRecipient(message.recipient), "time": message.time.timeIntervalSince1970 * 1000, "message": message.message, "messageId": message.messageID, "type": message.type])
|
|
1436
1385
|
}
|
|
1437
1386
|
|
|
1438
1387
|
func on(updated speakers: [HMSSpeaker]) {
|