@100mslive/react-native-hms 1.10.3 → 1.10.5

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 (148) hide show
  1. package/android/build.gradle +9 -2
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +11 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +94 -0
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +32 -0
  6. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +38 -0
  7. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +6 -4
  8. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityDecoder.kt +50 -25
  9. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSRNInteractivityCenter.kt +69 -1
  10. package/ios/HMSConstants.swift +1 -0
  11. package/ios/HMSDecoder.swift +22 -2
  12. package/ios/HMSHLSPlayerManager.m +6 -0
  13. package/ios/HMSHLSPlayerManager.swift +144 -2
  14. package/ios/HMSInteractivityDecoder.swift +41 -0
  15. package/ios/HMSManager.m +12 -0
  16. package/ios/HMSManager.swift +20 -1
  17. package/ios/HMSRNInteractivityCenter.swift +41 -0
  18. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  19. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  20. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  21. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  22. package/lib/commonjs/classes/HMSEncoder.js +11 -1
  23. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  24. package/lib/commonjs/classes/HMSHLSPlaylistType.js +12 -0
  25. package/lib/commonjs/classes/HMSHLSPlaylistType.js.map +1 -0
  26. package/lib/commonjs/classes/HMSHLSVariant.js +2 -0
  27. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  28. package/lib/commonjs/classes/HMSInteractivityCenter.js +58 -4
  29. package/lib/commonjs/classes/HMSInteractivityCenter.js.map +1 -1
  30. package/lib/commonjs/classes/HMSInteractivityEncoder.js +6 -0
  31. package/lib/commonjs/classes/HMSInteractivityEncoder.js.map +1 -1
  32. package/lib/commonjs/classes/HMSNoiseCancellationPlugin.js +1 -0
  33. package/lib/commonjs/classes/HMSNoiseCancellationPlugin.js.map +1 -1
  34. package/lib/commonjs/classes/HMSPermissions.js +2 -0
  35. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  36. package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js +6 -0
  37. package/lib/commonjs/classes/whiteboard/HMSWhiteboard.js.map +1 -0
  38. package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js +11 -0
  39. package/lib/commonjs/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
  40. package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js +12 -0
  41. package/lib/commonjs/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
  42. package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js +12 -0
  43. package/lib/commonjs/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
  44. package/lib/commonjs/classes/whiteboard/index.js +39 -0
  45. package/lib/commonjs/classes/whiteboard/index.js.map +1 -0
  46. package/lib/commonjs/classes/whiteboard/registerCallbacks.js +26 -0
  47. package/lib/commonjs/classes/whiteboard/registerCallbacks.js.map +1 -0
  48. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +98 -2
  49. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  50. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  51. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +16 -6
  52. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  53. package/lib/commonjs/components/HMSHLSPlayer/index.js +15 -1
  54. package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -1
  55. package/lib/commonjs/index.js +24 -0
  56. package/lib/commonjs/index.js.map +1 -1
  57. package/lib/commonjs/stores/hls-player-playback-slice.js +6 -0
  58. package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -1
  59. package/lib/commonjs/stores/hls-player-stats-store.js +27 -15
  60. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  61. package/lib/commonjs/stores/types.js.map +1 -1
  62. package/lib/commonjs/types.js.map +1 -1
  63. package/lib/module/classes/HMSEncoder.js +11 -1
  64. package/lib/module/classes/HMSEncoder.js.map +1 -1
  65. package/lib/module/classes/HMSHLSPlaylistType.js +6 -0
  66. package/lib/module/classes/HMSHLSPlaylistType.js.map +1 -0
  67. package/lib/module/classes/HMSHLSVariant.js +2 -0
  68. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  69. package/lib/module/classes/HMSInteractivityCenter.js +58 -4
  70. package/lib/module/classes/HMSInteractivityCenter.js.map +1 -1
  71. package/lib/module/classes/HMSInteractivityEncoder.js +6 -0
  72. package/lib/module/classes/HMSInteractivityEncoder.js.map +1 -1
  73. package/lib/module/classes/HMSNoiseCancellationPlugin.js +1 -0
  74. package/lib/module/classes/HMSNoiseCancellationPlugin.js.map +1 -1
  75. package/lib/module/classes/HMSPermissions.js +2 -0
  76. package/lib/module/classes/HMSPermissions.js.map +1 -1
  77. package/lib/module/classes/whiteboard/HMSWhiteboard.js +2 -0
  78. package/lib/module/classes/whiteboard/HMSWhiteboard.js.map +1 -0
  79. package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js +5 -0
  80. package/lib/module/classes/whiteboard/HMSWhiteboardListenerActions.js.map +1 -0
  81. package/lib/module/classes/whiteboard/HMSWhiteboardState.js +6 -0
  82. package/lib/module/classes/whiteboard/HMSWhiteboardState.js.map +1 -0
  83. package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js +6 -0
  84. package/lib/module/classes/whiteboard/HMSWhiteboardUpdateType.js.map +1 -0
  85. package/lib/module/classes/whiteboard/index.js +4 -0
  86. package/lib/module/classes/whiteboard/index.js.map +1 -0
  87. package/lib/module/classes/whiteboard/registerCallbacks.js +18 -0
  88. package/lib/module/classes/whiteboard/registerCallbacks.js.map +1 -0
  89. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +101 -5
  90. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  91. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  92. package/lib/module/components/HMSHLSPlayer/hooks.js +12 -4
  93. package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -1
  94. package/lib/module/components/HMSHLSPlayer/index.js +1 -1
  95. package/lib/module/components/HMSHLSPlayer/index.js.map +1 -1
  96. package/lib/module/index.js +2 -0
  97. package/lib/module/index.js.map +1 -1
  98. package/lib/module/stores/hls-player-playback-slice.js +6 -0
  99. package/lib/module/stores/hls-player-playback-slice.js.map +1 -1
  100. package/lib/module/stores/hls-player-stats-store.js +27 -15
  101. package/lib/module/stores/hls-player-stats-store.js.map +1 -1
  102. package/lib/module/stores/types.js.map +1 -1
  103. package/lib/module/types.js.map +1 -1
  104. package/lib/typescript/classes/HMSEncoder.d.ts +2 -0
  105. package/lib/typescript/classes/HMSHLSPlaylistType.d.ts +4 -0
  106. package/lib/typescript/classes/HMSHLSVariant.d.ts +3 -0
  107. package/lib/typescript/classes/HMSInteractivityCenter.d.ts +19 -2
  108. package/lib/typescript/classes/HMSInteractivityEncoder.d.ts +2 -0
  109. package/lib/typescript/classes/HMSNoiseCancellationPlugin.d.ts +1 -0
  110. package/lib/typescript/classes/HMSPermissions.d.ts +7 -0
  111. package/lib/typescript/classes/whiteboard/HMSWhiteboard.d.ts +10 -0
  112. package/lib/typescript/classes/whiteboard/HMSWhiteboardListenerActions.d.ts +3 -0
  113. package/lib/typescript/classes/whiteboard/HMSWhiteboardState.d.ts +4 -0
  114. package/lib/typescript/classes/whiteboard/HMSWhiteboardUpdateType.d.ts +4 -0
  115. package/lib/typescript/classes/whiteboard/index.d.ts +3 -0
  116. package/lib/typescript/classes/whiteboard/registerCallbacks.d.ts +8 -0
  117. package/lib/typescript/components/HMSHLSPlayer/HMSHLSPlayer.d.ts +6 -0
  118. package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +5 -1
  119. package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +3 -0
  120. package/lib/typescript/components/HMSHLSPlayer/index.d.ts +1 -1
  121. package/lib/typescript/index.d.ts +2 -0
  122. package/lib/typescript/stores/hls-player-stats-store.d.ts +4 -3
  123. package/lib/typescript/stores/types.d.ts +7 -1
  124. package/lib/typescript/types.d.ts +9 -0
  125. package/package.json +1 -1
  126. package/sdk-versions.json +2 -2
  127. package/src/classes/HMSEncoder.ts +13 -0
  128. package/src/classes/HMSHLSPlaylistType.ts +4 -0
  129. package/src/classes/HMSHLSVariant.ts +5 -0
  130. package/src/classes/HMSInteractivityCenter.ts +89 -10
  131. package/src/classes/HMSInteractivityEncoder.ts +8 -0
  132. package/src/classes/HMSNoiseCancellationPlugin.ts +1 -0
  133. package/src/classes/HMSPermissions.ts +9 -0
  134. package/src/classes/whiteboard/HMSWhiteboard.tsx +16 -0
  135. package/src/classes/whiteboard/HMSWhiteboardListenerActions.ts +3 -0
  136. package/src/classes/whiteboard/HMSWhiteboardState.tsx +4 -0
  137. package/src/classes/whiteboard/HMSWhiteboardUpdateType.tsx +4 -0
  138. package/src/classes/whiteboard/index.ts +3 -0
  139. package/src/classes/whiteboard/registerCallbacks.ts +34 -0
  140. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +158 -4
  141. package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +12 -0
  142. package/src/components/HMSHLSPlayer/hooks.ts +16 -4
  143. package/src/components/HMSHLSPlayer/index.ts +2 -0
  144. package/src/index.ts +2 -0
  145. package/src/stores/hls-player-playback-slice.ts +8 -0
  146. package/src/stores/hls-player-stats-store.ts +28 -18
  147. package/src/stores/types.ts +9 -1
  148. package/src/types.ts +15 -0
@@ -87,6 +87,46 @@ class HMSHLSPlayerManager: RCTViewManager {
87
87
  }
88
88
  }
89
89
  }
90
+
91
+ @objc func areClosedCaptionSupported(_ node: NSNumber, requestId: NSNumber) {
92
+ DispatchQueue.main.async {
93
+ if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
94
+ component.areClosedCaptionSupported(requestId: UInt(truncating: requestId))
95
+ }
96
+ }
97
+ }
98
+
99
+ @objc func isClosedCaptionEnabled(_ node: NSNumber, requestId: NSNumber) {
100
+ DispatchQueue.main.async {
101
+ if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
102
+ component.isClosedCaptionEnabled(requestId: UInt(truncating: requestId))
103
+ }
104
+ }
105
+ }
106
+
107
+ @objc func enableClosedCaption(_ node: NSNumber) {
108
+ DispatchQueue.main.async {
109
+ if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
110
+ component.enableClosedCaption()
111
+ }
112
+ }
113
+ }
114
+
115
+ @objc func disableClosedCaption(_ node: NSNumber) {
116
+ DispatchQueue.main.async {
117
+ if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
118
+ component.disableClosedCaption()
119
+ }
120
+ }
121
+ }
122
+
123
+ @objc func getPlayerDurationDetails(_ node: NSNumber, requestId: NSNumber) {
124
+ DispatchQueue.main.async {
125
+ if let component = self.bridge.uiManager.view(forReactTag: node) as? HMSHLSPlayer {
126
+ component.getPlayerDurationDetails(requestId: UInt(truncating: requestId))
127
+ }
128
+ }
129
+ }
90
130
  }
91
131
 
92
132
  class HMSHLSPlayer: UIView {
@@ -105,6 +145,8 @@ class HMSHLSPlayer: UIView {
105
145
 
106
146
  // MARK: Handle HMSHLSPlayer RN Component props
107
147
 
148
+ @objc var onDataReturned: RCTDirectEventBlock?
149
+
108
150
  @objc var onHmsHlsPlaybackEvent: RCTDirectEventBlock?
109
151
 
110
152
  @objc var onHmsHlsStatsEvent: RCTDirectEventBlock?
@@ -158,6 +200,97 @@ class HMSHLSPlayer: UIView {
158
200
  hmsHLSPlayer.stop()
159
201
  }
160
202
 
203
+ private func isCCSupported() -> Bool {
204
+ guard let playerItem = hmsHLSPlayer._nativePlayer.currentItem else {
205
+ return false
206
+ }
207
+ guard let mediaSelectionGroup = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) else {
208
+ return false
209
+ }
210
+ guard let firstMediaSelectionGroupOption = mediaSelectionGroup.options.first else {
211
+ return false
212
+ }
213
+ return firstMediaSelectionGroupOption.mediaType == .subtitle
214
+ }
215
+
216
+ private func isCCEnabled() -> Bool {
217
+ guard let playerItem = hmsHLSPlayer._nativePlayer.currentItem else {
218
+ return false
219
+ }
220
+ guard let subtitle = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) else {
221
+ return false
222
+ }
223
+ let selectedOption = playerItem.currentMediaSelection.selectedMediaOption(in: subtitle)
224
+ return selectedOption != nil
225
+ }
226
+
227
+ @objc func areClosedCaptionSupported(requestId: UInt) {
228
+ let supported = isCCSupported()
229
+
230
+ sendRequestedDataToJS(requestId, supported)
231
+ }
232
+
233
+ @objc func isClosedCaptionEnabled(requestId: UInt) {
234
+ let enabled = isCCEnabled()
235
+
236
+ sendRequestedDataToJS(requestId, enabled)
237
+ }
238
+
239
+ @objc func enableClosedCaption() {
240
+ if !isCCSupported() {
241
+ print("#func Closed Caption is not supported")
242
+ return
243
+ }
244
+ if isCCEnabled() {
245
+ print("#func Closed Caption already enabled!")
246
+ return
247
+ }
248
+ guard let playerItem = hmsHLSPlayer._nativePlayer.currentItem else {
249
+ return
250
+ }
251
+ guard let subtitle = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) else {
252
+ return
253
+ }
254
+ guard let firstSubtitleTrack = subtitle.options.first(where: {$0.mediaType == .subtitle}) else {
255
+ return
256
+ }
257
+ playerItem.select(firstSubtitleTrack, in: subtitle)
258
+ }
259
+
260
+ @objc func disableClosedCaption() {
261
+ if !isCCSupported() {
262
+ print("#func Closed Caption is not supported")
263
+ return
264
+ }
265
+ if !isCCEnabled() {
266
+ print("#func Closed Caption already disabled!")
267
+ return
268
+ }
269
+ guard let playerItem = hmsHLSPlayer._nativePlayer.currentItem else {
270
+ return
271
+ }
272
+ guard let subtitle = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) else {
273
+ return
274
+ }
275
+ playerItem.select(nil, in: subtitle)
276
+ }
277
+
278
+ @objc func getPlayerDurationDetails(requestId: UInt) {
279
+ var map = [String: Any?]()
280
+ guard let playerItem = hmsHLSPlayer._nativePlayer.currentItem else {
281
+ sendRequestedDataToJS(requestId, map)
282
+ return
283
+ }
284
+ // If duration is known
285
+ if !playerItem.duration.isIndefinite {
286
+ map["streamDuration"] = playerItem.duration.seconds
287
+ }
288
+ if let timeRange = playerItem.seekableTimeRanges.last as? CMTimeRange {
289
+ map["rollingWindowTime"] = timeRange.duration.seconds * 1000
290
+ }
291
+ sendRequestedDataToJS(requestId, map)
292
+ }
293
+
161
294
  @objc func pause() {
162
295
  hmsHLSPlayer.pause()
163
296
  }
@@ -182,7 +315,7 @@ class HMSHLSPlayer: UIView {
182
315
  hmsHLSPlayer.volume = level
183
316
  }
184
317
 
185
- // MARK: Constructor & Deconstructor
318
+ // MARK: Lifecycle methods
186
319
 
187
320
  override init(frame: CGRect) {
188
321
  super.init(frame: frame)
@@ -206,7 +339,10 @@ class HMSHLSPlayer: UIView {
206
339
  attachPlayerPlaybackListeners()
207
340
 
208
341
  hmsHLSPlayerViewController?.showsPlaybackControls = false
209
- hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = false
342
+ hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = true
343
+ if #available(iOS 14.2, *) {
344
+ hmsHLSPlayerViewController?.canStartPictureInPictureAutomaticallyFromInline = true
345
+ }
210
346
  }
211
347
 
212
348
  required init?(coder: NSCoder) {
@@ -234,6 +370,12 @@ class HMSHLSPlayer: UIView {
234
370
  onHmsHlsPlaybackEvent(["event": eventName, "data": data])
235
371
  }
236
372
 
373
+ private func sendRequestedDataToJS(_ requestId: UInt, _ data: Any) {
374
+ guard let onDataReturned = onDataReturned else { return }
375
+
376
+ onDataReturned(["requestId": requestId, "data": data])
377
+ }
378
+
237
379
  private func sendHLSStatsEventToJS(_ eventName: String, _ data: [String: Any]) {
238
380
  guard let onHmsHlsStatsEvent = onHmsHlsStatsEvent else { return }
239
381
 
@@ -270,4 +270,45 @@ class HMSInteractivityDecoder {
270
270
 
271
271
  return result
272
272
  }
273
+
274
+ static func getHMSWhiteboard(_ hmsWhiteboard: HMSWhiteboard) -> [String: Any] {
275
+ var result: [String: Any] = [
276
+ "id": hmsWhiteboard.id,
277
+ "state": getWhiteboardState(hmsWhiteboard.state)
278
+ ]
279
+ if let owner = hmsWhiteboard.owner {
280
+ result["owner"] = HMSDecoder.getHmsPeerSubset(owner)
281
+ }
282
+ if let title = hmsWhiteboard.title {
283
+ result["title"] = title
284
+ }
285
+ if let urlString = hmsWhiteboard.url?.absoluteString {
286
+ result["url"] = urlString
287
+ }
288
+ return result
289
+ }
290
+
291
+ static func getWhiteboardState(_ state: HMSWhiteboard.WhiteboardState) -> String {
292
+ switch state {
293
+ case .started:
294
+ return "STARTED"
295
+ case .stopped:
296
+ return "STOPPED"
297
+ @unknown default:
298
+ print("@unknown default case: Invalid HMSWhiteboardUpdateType")
299
+ return "STOPPED"
300
+ }
301
+ }
302
+
303
+ static func getWhiteboardUpdateType(_ type: HMSWhiteboardUpdateType) -> String {
304
+ switch type {
305
+ case .started:
306
+ return "STARTED"
307
+ case .stopped:
308
+ return "STOPPED"
309
+ @unknown default:
310
+ print("@unknown default case: Invalid HMSWhiteboardUpdateType")
311
+ return "STOPPED"
312
+ }
313
+ }
273
314
  }
package/ios/HMSManager.m CHANGED
@@ -353,4 +353,16 @@ RCT_EXTERN_METHOD(isNoiseCancellationPluginAvailable
353
353
  : (RCTPromiseResolveBlock)resolve
354
354
  : (RCTPromiseRejectBlock)reject)
355
355
 
356
+ #pragma mark - Interactivity Center - Whiteboard
357
+
358
+ RCT_EXTERN_METHOD(startWhiteboard
359
+ : (NSDictionary)data
360
+ : (RCTPromiseResolveBlock)resolve
361
+ : (RCTPromiseRejectBlock)reject)
362
+
363
+ RCT_EXTERN_METHOD(stopWhiteboard
364
+ : (NSDictionary)data
365
+ : (RCTPromiseResolveBlock)resolve
366
+ : (RCTPromiseRejectBlock)reject)
367
+
356
368
  @end
@@ -37,7 +37,7 @@ class HMSManager: RCTEventEmitter {
37
37
  }
38
38
 
39
39
  override func supportedEvents() -> [String]! {
40
- return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE]
40
+ return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE, HMSConstants.ON_WHITEBOARD_UPDATE]
41
41
  }
42
42
 
43
43
  // MARK: - HMS SDK Delegate Callbacks
@@ -762,4 +762,23 @@ class HMSManager: RCTEventEmitter {
762
762
  }
763
763
  rnsdk.isNoiseCancellationPluginAvailable(data, resolve, reject)
764
764
  }
765
+
766
+ // MARK: - Interactivity Center - Whiteboard
767
+ @objc
768
+ func startWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
769
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
770
+ reject?("6004", "HMSRNSDK instance not found!", nil)
771
+ return
772
+ }
773
+ interactivity.startWhiteboard(resolve, reject)
774
+ }
775
+
776
+ @objc
777
+ func stopWhiteboard(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
778
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection), let interactivity = rnsdk.interactivity else {
779
+ reject?("6004", "HMSRNSDK instance not found!", nil)
780
+ return
781
+ }
782
+ interactivity.stopWhiteboard(resolve, reject)
783
+ }
765
784
  }
@@ -27,8 +27,27 @@ class HMSRNInteractivityCenter {
27
27
  ["update": update.rawValue, "updatedPoll": HMSInteractivityDecoder.getHMSPoll(updatedPoll)]
28
28
  )
29
29
  }
30
+
31
+ hmssdk.interactivityCenter.addWhiteboardUpdateListener { [weak self] hmsWhiteboard, hmsWhiteboardUpdateType in
32
+ guard let self = self else { return }
33
+ guard let enabledEvents = self.hmsrnsdk?.eventsEnableStatus, enabledEvents[HMSConstants.ON_WHITEBOARD_UPDATE] == true else {
34
+ print("HMSConstants.ON_WHITEBOARD_UPDATE event is not enabled")
35
+ return
36
+ }
37
+ var hmsWhiteboardDict = HMSInteractivityDecoder.getHMSWhiteboard(hmsWhiteboard)
38
+ hmsWhiteboardDict["isOwner"] = hmsWhiteboard.owner?.peerID == self.hmssdk?.localPeer?.peerID
39
+
40
+ self.hmsrnsdk?.delegate?.emitEvent(
41
+ HMSConstants.ON_WHITEBOARD_UPDATE,
42
+ [
43
+ "hmsWhiteboard": hmsWhiteboardDict,
44
+ "updateType": HMSInteractivityDecoder.getWhiteboardUpdateType(hmsWhiteboardUpdateType)
45
+ ]
46
+ )
47
+ }
30
48
  }
31
49
 
50
+ // MARK: Poll Methods
32
51
  func quickStartPoll(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
33
52
  let pollBuilder = HMSInteractivityHelper.getPollBuilderFromDict(data, sdkRoles: hmssdk?.roles)
34
53
 
@@ -117,4 +136,26 @@ class HMSRNInteractivityCenter {
117
136
  }
118
137
  }
119
138
  }
139
+
140
+ // MARK: - Whiteboard Methods
141
+
142
+ func startWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
143
+ self.hmssdk?.interactivityCenter.startWhiteboard { success, error in
144
+ if let error = error {
145
+ reject?("6004", error.localizedDescription, nil)
146
+ return
147
+ }
148
+ resolve?(success)
149
+ }
150
+ }
151
+
152
+ func stopWhiteboard(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
153
+ self.hmssdk?.interactivityCenter.stopWhiteboard { success, error in
154
+ if let error = error {
155
+ reject?("6004", error.localizedDescription, nil)
156
+ return
157
+ }
158
+ resolve?(success)
159
+ }
160
+ }
120
161
  }
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
7
+ </Workspace>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SchemeUserState</key>
6
+ <dict>
7
+ <key>Hmssdk.xcscheme_^#shared#^_</key>
8
+ <dict>
9
+ <key>orderHint</key>
10
+ <integer>0</integer>
11
+ </dict>
12
+ </dict>
13
+ </dict>
14
+ </plist>
@@ -45,6 +45,7 @@ var _HMSLayer = require("./HMSLayer");
45
45
  var _HMSSimulcastLayerDefinition = require("./HMSSimulcastLayerDefinition");
46
46
  var _HMSQualityLimitationReasons = require("./HMSQualityLimitationReasons");
47
47
  var _HMSTrackType = require("./HMSTrackType");
48
+ var _HMSHLSPlaylistType = require("./HMSHLSPlaylistType");
48
49
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
50
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
50
51
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -420,12 +421,21 @@ class HMSEncoder {
420
421
  hlsStreamUrl: item.hlsStreamUrl,
421
422
  meetingUrl: item.meetingUrl,
422
423
  metadata: item !== null && item !== void 0 && item.metaData ? item === null || item === void 0 ? void 0 : item.metadata : undefined,
423
- startedAt: HMSEncoder.encodeDate(item === null || item === void 0 ? void 0 : item.startedAt)
424
+ startedAt: HMSEncoder.encodeDate(item === null || item === void 0 ? void 0 : item.startedAt),
425
+ playlistType: item !== null && item !== void 0 && item.playlistType ? this.getHLSVariantPlaylistType(item.playlistType.toUpperCase()) : undefined
424
426
  });
425
427
  variants.push(variant);
426
428
  });
427
429
  return variants;
428
430
  }
431
+ static getHLSVariantPlaylistType(type) {
432
+ switch (type) {
433
+ case 'DVR':
434
+ return _HMSHLSPlaylistType.HMSHLSPlaylistType.DVR;
435
+ default:
436
+ return _HMSHLSPlaylistType.HMSHLSPlaylistType.noDVR;
437
+ }
438
+ }
429
439
  static encodeHMSNetworkQuality(data) {
430
440
  if (data) {
431
441
  return new _HMSNetworkQuality.HMSNetworkQuality({