@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.
Files changed (216) hide show
  1. package/android/build.gradle +15 -7
  2. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +14 -15
  3. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +248 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +101 -0
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +10 -5
  6. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +0 -14
  7. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +90 -106
  8. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -1
  9. package/android/src/main/res/layout/player_view.xml +9 -0
  10. package/ios/HMSDecoder.swift +4 -4
  11. package/ios/HMSHLSPlayerManager.m +22 -0
  12. package/ios/HMSHLSPlayerManager.swift +368 -0
  13. package/ios/HMSManager.m +1 -2
  14. package/ios/HMSManager.swift +22 -16
  15. package/ios/HMSRNSDK.swift +34 -85
  16. package/lib/commonjs/classes/HMSEncoder.js +12 -4
  17. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  18. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  19. package/lib/commonjs/classes/HMSMessage.js +2 -1
  20. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  21. package/lib/commonjs/classes/HMSPeer.js +55 -20
  22. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  23. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -1
  24. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  25. package/lib/commonjs/classes/HMSPeersCache.js +30 -38
  26. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  27. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  28. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  29. package/lib/commonjs/classes/HMSSDK.js +36 -33
  30. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  31. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +147 -0
  32. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
  33. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +12 -0
  34. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
  35. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +71 -0
  36. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -0
  37. package/lib/commonjs/components/HMSHLSPlayer/index.js +63 -0
  38. package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -0
  39. package/lib/commonjs/index.js +38 -0
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/stores/hls-player-playback-slice.js +23 -0
  42. package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -0
  43. package/lib/commonjs/stores/hls-player-stats-store.js +36 -0
  44. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -0
  45. package/lib/commonjs/stores/hms-store.js +16 -0
  46. package/lib/commonjs/stores/hms-store.js.map +1 -0
  47. package/lib/commonjs/stores/types.js +6 -0
  48. package/lib/commonjs/stores/types.js.map +1 -0
  49. package/lib/commonjs/types.js +36 -0
  50. package/lib/commonjs/types.js.map +1 -0
  51. package/lib/module/classes/HMSEncoder.js +12 -4
  52. package/lib/module/classes/HMSEncoder.js.map +1 -1
  53. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  54. package/lib/module/classes/HMSMessage.js +2 -1
  55. package/lib/module/classes/HMSMessage.js.map +1 -1
  56. package/lib/module/classes/HMSPeer.js +55 -20
  57. package/lib/module/classes/HMSPeer.js.map +1 -1
  58. package/lib/module/classes/HMSPeerUpdate.js +1 -1
  59. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  60. package/lib/module/classes/HMSPeersCache.js +30 -38
  61. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  62. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  63. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  64. package/lib/module/classes/HMSSDK.js +36 -33
  65. package/lib/module/classes/HMSSDK.js.map +1 -1
  66. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +138 -0
  67. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
  68. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +4 -0
  69. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
  70. package/lib/module/components/HMSHLSPlayer/hooks.js +56 -0
  71. package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -0
  72. package/lib/module/components/HMSHLSPlayer/index.js +3 -0
  73. package/lib/module/components/HMSHLSPlayer/index.js.map +1 -0
  74. package/lib/module/index.js +7 -0
  75. package/lib/module/index.js.map +1 -1
  76. package/lib/module/stores/hls-player-playback-slice.js +16 -0
  77. package/lib/module/stores/hls-player-playback-slice.js.map +1 -0
  78. package/lib/module/stores/hls-player-stats-store.js +29 -0
  79. package/lib/module/stores/hls-player-stats-store.js.map +1 -0
  80. package/lib/module/stores/hms-store.js +9 -0
  81. package/lib/module/stores/hms-store.js.map +1 -0
  82. package/lib/module/stores/types.js +2 -0
  83. package/lib/module/stores/types.js.map +1 -0
  84. package/lib/module/types.js +32 -0
  85. package/lib/module/types.js.map +1 -0
  86. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  87. package/lib/typescript/classes/HMSLocalPeer.d.ts +0 -1
  88. package/lib/typescript/classes/HMSMessage.d.ts +2 -0
  89. package/lib/typescript/classes/HMSPeer.d.ts +10 -5
  90. package/lib/typescript/classes/HMSPeersCache.d.ts +17 -2
  91. package/lib/typescript/classes/HMSRTMPConfig.d.ts +2 -2
  92. package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
  93. package/lib/typescript/classes/HMSSDK.d.ts +12 -17
  94. package/lib/typescript/components/HMSHLSPlayer/HMSHLSPlayer.d.ts +21 -0
  95. package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +19 -0
  96. package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +17 -0
  97. package/lib/typescript/components/HMSHLSPlayer/index.d.ts +2 -0
  98. package/lib/typescript/index.d.ts +3 -0
  99. package/lib/typescript/stores/hls-player-playback-slice.d.ts +5 -0
  100. package/lib/typescript/stores/hls-player-stats-store.d.ts +9 -0
  101. package/lib/typescript/stores/hms-store.d.ts +9 -0
  102. package/lib/typescript/stores/types.d.ts +25 -0
  103. package/lib/typescript/types.d.ts +63 -0
  104. package/package.json +10 -5
  105. package/react-native-hms.podspec +1 -0
  106. package/sdk-versions.json +3 -2
  107. package/src/classes/HMSEncoder.ts +15 -3
  108. package/src/classes/HMSLocalPeer.ts +0 -1
  109. package/src/classes/HMSMessage.ts +3 -1
  110. package/src/classes/HMSPeer.ts +96 -48
  111. package/src/classes/HMSPeerUpdate.ts +4 -4
  112. package/src/classes/HMSPeersCache.ts +53 -40
  113. package/src/classes/HMSRTMPConfig.ts +2 -2
  114. package/src/classes/HMSRemotePeer.ts +0 -1
  115. package/src/classes/HMSSDK.tsx +59 -47
  116. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +235 -0
  117. package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +38 -0
  118. package/src/components/HMSHLSPlayer/hooks.ts +100 -0
  119. package/src/components/HMSHLSPlayer/index.ts +9 -0
  120. package/src/index.ts +8 -0
  121. package/src/stores/hls-player-playback-slice.ts +25 -0
  122. package/src/stores/hls-player-stats-store.ts +37 -0
  123. package/src/stores/hms-store.ts +11 -0
  124. package/src/stores/types.ts +49 -0
  125. package/src/types.ts +119 -0
  126. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  127. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  128. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  129. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  130. package/android/.gradle/6.9/gc.properties +0 -0
  131. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  132. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  133. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  134. package/android/.gradle/checksums/checksums.lock +0 -0
  135. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  136. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  137. package/android/.gradle/vcs-1/gc.properties +0 -0
  138. package/android/.idea/compiler.xml +0 -6
  139. package/android/.idea/gradle.xml +0 -18
  140. package/android/.idea/jarRepositories.xml +0 -50
  141. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +0 -16
  142. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +0 -11
  143. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +0 -13
  144. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +0 -16
  145. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +0 -13
  146. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
  147. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
  148. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
  149. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
  150. package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml +0 -13
  151. package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +0 -16
  152. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
  153. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
  154. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
  155. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +0 -16
  156. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
  157. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +0 -11
  158. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -13
  159. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
  160. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +0 -13
  161. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
  162. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
  163. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
  164. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
  165. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
  166. package/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_1_0_aar.xml +0 -13
  167. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
  168. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
  169. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +0 -13
  170. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
  171. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_0_3_0_aar.xml +0 -14
  172. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
  173. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
  174. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
  175. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
  176. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
  177. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
  178. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
  179. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
  180. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
  181. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
  182. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
  183. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
  184. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
  185. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
  186. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_71_0_rc_0_debug_aar.xml +0 -14
  187. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +0 -13
  188. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +0 -13
  189. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +0 -14
  190. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
  191. package/android/.idea/libraries/Gradle__com_github_100mslive_android_sdk_lib_2_5_1_aar.xml +0 -10
  192. package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m104_hms_1_3_aar.xml +0 -10
  193. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
  194. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +0 -13
  195. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +0 -13
  196. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
  197. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
  198. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
  199. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
  200. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +0 -13
  201. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +0 -13
  202. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +0 -13
  203. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +0 -13
  204. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_0.xml +0 -13
  205. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_0.xml +0 -13
  206. package/android/.idea/misc.xml +0 -9
  207. package/android/.idea/modules/android.androidTest.iml +0 -203
  208. package/android/.idea/modules/android.iml +0 -40
  209. package/android/.idea/modules/android.main.iml +0 -199
  210. package/android/.idea/modules/android.unitTest.iml +0 -197
  211. package/android/.idea/modules.xml +0 -11
  212. package/android/.idea/sonarlint/issuestore/3/c/3c46088b6add3088181589d8ed726652742b6221 +0 -5
  213. package/android/.idea/sonarlint/issuestore/a/8/a8c9f5ddd88723818e51ae3cf8693d02355a8691 +0 -0
  214. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  215. package/android/.idea/sonarlint/issuestore/index.pb +0 -7
  216. 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
 
@@ -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)
@@ -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?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
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?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
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?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
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
- let role = HMSHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
378
- else { return }
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", "meetingURL"])
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 meetLink = URL(string: meetingString) {
711
- meetingUrl = meetLink
712
- } else {
713
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
714
- 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])
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, "message": "function call executed successfully"] as [String: Any])
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
- if eventsEnableStatus[HMSConstants.ON_PEER_UPDATE] != true {
1387
- return
1388
- }
1389
- let type = getString(from: update)
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]) {