@100mslive/react-native-hms 1.7.2 → 1.9.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 (178) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +43 -15
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +113 -68
  6. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +17 -4
  7. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +75 -21
  8. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +483 -184
  9. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +587 -177
  10. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +26 -7
  11. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +32 -12
  12. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -0
  13. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +10 -6
  14. package/android/src/main/res/layout/player_view.xml +3 -2
  15. package/ios/HMSConstants.swift +1 -0
  16. package/ios/HMSDecoder.swift +18 -7
  17. package/ios/HMSHLSPlayerManager.swift +18 -2
  18. package/ios/HMSHelper.swift +33 -4
  19. package/ios/HMSManager.m +256 -73
  20. package/ios/HMSManager.swift +47 -3
  21. package/ios/HMSRNSDK.swift +224 -140
  22. package/ios/HMSView.swift +17 -3
  23. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  24. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  25. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  27. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  28. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  29. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  30. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  31. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  32. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  34. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  35. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  36. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  37. package/lib/commonjs/classes/HMSConstants.js +1 -2
  38. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  39. package/lib/commonjs/classes/HMSEncoder.js +6 -0
  40. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  41. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  42. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  43. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  44. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  45. package/lib/commonjs/classes/HMSLayer.js +1 -2
  46. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  47. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  48. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  49. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  50. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  51. package/lib/commonjs/classes/HMSLogger.js +1 -2
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  54. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  56. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  57. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  58. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  59. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  60. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  61. package/lib/commonjs/classes/HMSPeer.js +15 -0
  62. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  63. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  64. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  65. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  66. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  67. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  68. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  69. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  70. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  71. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  72. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  73. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  74. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  76. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  77. package/lib/commonjs/classes/HMSSDK.js +192 -32
  78. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  79. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  80. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  81. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  82. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  83. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  84. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  85. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  86. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  87. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  88. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  89. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  90. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  91. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  92. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  93. package/lib/commonjs/classes/HmsView.js +3 -4
  94. package/lib/commonjs/classes/HmsView.js.map +1 -1
  95. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +13 -9
  96. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  97. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  98. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  99. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  100. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  101. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  102. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  103. package/lib/commonjs/index.js +1 -2
  104. package/lib/commonjs/index.js.map +1 -1
  105. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  106. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  107. package/lib/commonjs/stores/hms-store.js +1 -2
  108. package/lib/commonjs/stores/hms-store.js.map +1 -1
  109. package/lib/commonjs/types.js +4 -6
  110. package/lib/commonjs/types.js.map +1 -1
  111. package/lib/module/classes/HMSEncoder.js +6 -0
  112. package/lib/module/classes/HMSEncoder.js.map +1 -1
  113. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  114. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  115. package/lib/module/classes/HMSPeer.js +15 -0
  116. package/lib/module/classes/HMSPeer.js.map +1 -1
  117. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  118. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  119. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  120. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  121. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  122. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  123. package/lib/module/classes/HMSPeersCache.js +7 -0
  124. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  125. package/lib/module/classes/HMSSDK.js +193 -33
  126. package/lib/module/classes/HMSSDK.js.map +1 -1
  127. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  128. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  129. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -6
  130. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/types.js +1 -0
  133. package/lib/module/types.js.map +1 -1
  134. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  135. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  136. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  137. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  138. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  139. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  140. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  141. package/lib/typescript/classes/HMSSDK.d.ts +69 -13
  142. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  143. package/lib/typescript/index.d.ts +1 -1
  144. package/lib/typescript/types.d.ts +3 -1
  145. package/package.json +1 -1
  146. package/sdk-versions.json +2 -2
  147. package/src/classes/HMSEncoder.ts +9 -0
  148. package/src/classes/HMSPIPListenerActions.ts +1 -0
  149. package/src/classes/HMSPeer.ts +25 -0
  150. package/src/classes/HMSPeerListIterator.ts +60 -0
  151. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  152. package/src/classes/HMSPeerUpdate.ts +2 -0
  153. package/src/classes/HMSPeersCache.ts +7 -0
  154. package/src/classes/HMSSDK.tsx +235 -28
  155. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  156. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +15 -13
  157. package/src/index.ts +4 -1
  158. package/src/types.ts +2 -0
  159. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  160. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  161. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  162. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  163. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  164. package/android/.gradle/6.7.1/gc.properties +0 -0
  165. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  166. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  167. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  168. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  169. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  170. package/android/.gradle/6.9/gc.properties +0 -0
  171. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  172. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  173. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  174. package/android/.gradle/checksums/checksums.lock +0 -0
  175. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  176. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  177. package/android/.gradle/configuration-cache/gc.properties +0 -0
  178. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -12,7 +12,6 @@ import com.facebook.react.uimanager.ThemedReactContext
12
12
  import com.facebook.react.uimanager.annotations.ReactProp
13
13
 
14
14
  class HMSSDKViewManager : SimpleViewManager<HMSView>() {
15
-
16
15
  private var reactContext: ThemedReactContext? = null
17
16
 
18
17
  override fun getName(): String {
@@ -41,14 +40,22 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
41
40
  }
42
41
 
43
42
  @RequiresApi(Build.VERSION_CODES.N)
44
- override fun receiveCommand(@NonNull root: HMSView, commandId: String?, args: ReadableArray?) {
43
+ override fun receiveCommand(
44
+ @NonNull root: HMSView,
45
+ commandId: String?,
46
+ args: ReadableArray?,
47
+ ) {
45
48
  when (commandId) {
46
49
  "capture" -> root.captureHmsView(args)
47
50
  }
48
51
  }
49
52
 
50
53
  @RequiresApi(Build.VERSION_CODES.N)
51
- override fun receiveCommand(@NonNull root: HMSView, commandId: Int, args: ReadableArray?) {
54
+ override fun receiveCommand(
55
+ @NonNull root: HMSView,
56
+ commandId: Int,
57
+ args: ReadableArray?,
58
+ ) {
52
59
  when (commandId) {
53
60
  1 -> root.captureHmsView(args)
54
61
  }
@@ -60,7 +67,10 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
60
67
  }
61
68
 
62
69
  @ReactProp(name = "data")
63
- fun setData(view: HMSView, data: ReadableMap) {
70
+ fun setData(
71
+ view: HMSView,
72
+ data: ReadableMap,
73
+ ) {
64
74
  val trackId = data.getString("trackId")
65
75
  val id = data.getString("id")
66
76
  val mirror = data.getBoolean("mirror")
@@ -72,17 +82,26 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
72
82
  }
73
83
 
74
84
  @ReactProp(name = "scaleType")
75
- fun setScaleType(view: HMSView, data: String?) {
85
+ fun setScaleType(
86
+ view: HMSView,
87
+ data: String?,
88
+ ) {
76
89
  view.updateScaleType(data)
77
90
  }
78
91
 
79
92
  @ReactProp(name = "setZOrderMediaOverlay")
80
- fun setZOrderMediaOverlay(view: HMSView, data: Boolean?) {
93
+ fun setZOrderMediaOverlay(
94
+ view: HMSView,
95
+ data: Boolean?,
96
+ ) {
81
97
  view.updateZOrderMediaOverlay(data)
82
98
  }
83
99
 
84
100
  @ReactProp(name = "autoSimulcast")
85
- fun setAutoSimulcast(view: HMSView, data: Boolean?) {
101
+ fun setAutoSimulcast(
102
+ view: HMSView,
103
+ data: Boolean?,
104
+ ) {
86
105
  data?.let { view.updateAutoSimulcast(it) }
87
106
  }
88
107
 
@@ -36,16 +36,21 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
36
36
  hmsVideoView?.setMirror(false)
37
37
  hmsVideoView?.disableAutoSimulcastLayerSelect(disableAutoSimulcastLayerSelect)
38
38
 
39
- hmsVideoView?.addVideoViewStateChangeListener(object : VideoViewStateChangeListener {
40
- override fun onResolutionChange(newWidth: Int, newHeight: Int) {
41
- super.onResolutionChange(newWidth, newHeight)
42
- if (!jsCanApplyStyles) {
43
- val event: WritableMap = Arguments.createMap()
44
- context.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "topChange", event)
45
- jsCanApplyStyles = true
39
+ hmsVideoView?.addVideoViewStateChangeListener(
40
+ object : VideoViewStateChangeListener {
41
+ override fun onResolutionChange(
42
+ newWidth: Int,
43
+ newHeight: Int,
44
+ ) {
45
+ super.onResolutionChange(newWidth, newHeight)
46
+ if (!jsCanApplyStyles) {
47
+ val event: WritableMap = Arguments.createMap()
48
+ context.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "topChange", event)
49
+ jsCanApplyStyles = true
50
+ }
46
51
  }
47
- }
48
- })
52
+ },
53
+ )
49
54
  }
50
55
 
51
56
  @RequiresApi(Build.VERSION_CODES.N)
@@ -112,15 +117,30 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
112
117
  if (id != null) {
113
118
  sdkId = id
114
119
  }
115
- val hms = hmsCollection[sdkId]?.hmsSDK
120
+ val rnSDK = hmsCollection[sdkId]
121
+ val hms = rnSDK?.hmsSDK
116
122
 
117
123
  if (trackId != null && hms != null) {
118
124
  if (mirror != null) {
119
125
  hmsVideoView?.setMirror(mirror)
120
126
  }
121
127
  updateScaleType(scaleType)
122
- // TODO: can be optimized here
123
- videoTrack = hms.getRoom()?.let { HmsUtilities.getVideoTrack(trackId, it) }
128
+
129
+ hms.getRoom()?.let { room ->
130
+ val regularVideoTrack: HMSVideoTrack? = HmsUtilities.getVideoTrack(trackId, room)
131
+
132
+ regularVideoTrack.let { fetchedTrack ->
133
+ if (fetchedTrack == null) {
134
+ rnSDK.previewForRoleVideoTrack?.let {
135
+ if (it.trackId == trackId) {
136
+ videoTrack = it
137
+ }
138
+ }
139
+ } else {
140
+ videoTrack = fetchedTrack
141
+ }
142
+ }
143
+ }
124
144
  }
125
145
  }
126
146
 
@@ -24,6 +24,7 @@ class HmsScreenshareActivity : ComponentActivity() {
24
24
  HMSManager.hmsCollection[id]?.screenshareCallback?.reject(error)
25
25
  HMSManager.hmsCollection[id]?.emitHMSError(error)
26
26
  }
27
+
27
28
  override fun onSuccess() {
28
29
  HMSManager.hmsCollection[id]?.screenshareCallback?.resolve(
29
30
  HMSManager.hmsCollection[id]?.emitHMSSuccess(),
@@ -22,14 +22,18 @@ class PipActionReceiver(
22
22
  var sdkIdForPIP: String? = null
23
23
  private var registered = false
24
24
  const val PIP_INTENT_ACTION = "PIP_INTENT_ACTION"
25
- val PIPActions = PIPActions(
26
- endMeet = PIPAction(title = "End", description = "End Meeting", requestCode = 346),
27
- localAudio = PIPAction(title = "Mic", description = "Toggle Mic", requestCode = 344),
28
- localVideo = PIPAction(title = "Camera", description = "Toggle Camera", requestCode = 345),
29
- )
25
+ val PIPActions =
26
+ PIPActions(
27
+ endMeet = PIPAction(title = "End", description = "End Meeting", requestCode = 346),
28
+ localAudio = PIPAction(title = "Mic", description = "Toggle Mic", requestCode = 344),
29
+ localVideo = PIPAction(title = "Camera", description = "Toggle Camera", requestCode = 345),
30
+ )
30
31
  }
31
32
 
32
- override fun onReceive(context: Context?, intent: Intent?) {
33
+ override fun onReceive(
34
+ context: Context?,
35
+ intent: Intent?,
36
+ ) {
33
37
  if (intent !== null) {
34
38
  if (intent.hasExtra(PIPActions.endMeet.title)) {
35
39
  return endMeeting()
@@ -2,8 +2,9 @@
2
2
 
3
3
  <androidx.media3.ui.PlayerView xmlns:android="http://schemas.android.com/apk/res/android"
4
4
  xmlns:tools="http://schemas.android.com/tools"
5
+ xmlns:app="http://schemas.android.com/apk/res-auto"
5
6
  android:id="@+id/hls_view"
6
7
  android:layout_width="match_parent"
7
- android:layout_height="wrap_content"
8
- android:layout_gravity="center"
8
+ app:resize_mode="zoom"
9
+ android:layout_height="match_parent"
9
10
  />
@@ -14,6 +14,7 @@ struct HMSConstants {
14
14
  static let ON_JOIN = "ON_JOIN"
15
15
  static let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
16
16
  static let ON_PEER_UPDATE = "3"
17
+ static let ON_PEER_LIST_UPDATED = "ON_PEER_LIST_UPDATED"
17
18
  static let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
18
19
  static let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
19
20
  static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST"
@@ -21,7 +21,7 @@ class HMSDecoder: NSObject {
21
21
  switch hmsRoomUpdateType {
22
22
  case .none:
23
23
  return data
24
- case .metaDataUpdated:
24
+ case .peerCountUpdated:
25
25
  data["peerCount"] = room.peerCount
26
26
  return data
27
27
  case .hlsRecordingStateUpdated:
@@ -93,6 +93,7 @@ class HMSDecoder: NSObject {
93
93
  case .nameUpdated: return "5"
94
94
  case .metadataUpdated: return "6"
95
95
  case .networkQualityUpdated: return "7"
96
+ case .handRaiseUpdated: return "8"
96
97
  default: return nil
97
98
  }
98
99
  }
@@ -112,6 +113,9 @@ class HMSDecoder: NSObject {
112
113
  case .metadataUpdated:
113
114
  peerDict["metadata"] = peer.metadata ?? ""
114
115
  return peerDict
116
+ case .handRaiseUpdated:
117
+ peerDict["isHandRaised"] = peer.isHandRaised
118
+ return peerDict
115
119
  case .roleUpdated:
116
120
  peerDict["role"] = getHmsRole(peer.role)
117
121
  return peerDict
@@ -138,6 +142,9 @@ class HMSDecoder: NSObject {
138
142
  case .metadataUpdated:
139
143
  peerDict["metadata"] = peer.metadata ?? ""
140
144
  return peerDict
145
+ case .handRaiseUpdated:
146
+ peerDict["isHandRaised"] = peer.isHandRaised
147
+ return peerDict
141
148
  case .roleUpdated:
142
149
  peerDict["role"] = getHmsRole(peer.role)
143
150
  return peerDict
@@ -167,6 +174,7 @@ class HMSDecoder: NSObject {
167
174
  if let metadata = peer.metadata {
168
175
  data["metadata"] = metadata
169
176
  }
177
+ data["isHandRaised"] = peer.isHandRaised
170
178
 
171
179
  // joinedAt
172
180
 
@@ -352,7 +360,7 @@ class HMSDecoder: NSObject {
352
360
 
353
361
  peerDict["peerID"] = peer.peerID
354
362
  peerDict["name"] = peer.name
355
-
363
+
356
364
  // joinedAt
357
365
 
358
366
  if let audio = peer.audioTrack {
@@ -883,16 +891,19 @@ class HMSDecoder: NSObject {
883
891
  }
884
892
 
885
893
  static func getRemoteVideoStats(_ data: HMSRemoteVideoStats) -> [Any] {
886
- // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
887
- return [
894
+
895
+ var stats = [Any]()
896
+
897
+ stats = [
888
898
  data.bitrate,
889
- data.bytesReceived,
899
+ Double(data.bytesReceived),
890
900
  data.frameRate,
891
901
  data.jitter,
892
- data.packetsLost,
893
- data.packetsReceived,
902
+ Double(data.packetsLost),
903
+ Double(data.packetsReceived),
894
904
  HMSDecoder.getHmsVideoResolution(data.resolution)
895
905
  ]
906
+ return stats
896
907
  }
897
908
 
898
909
  static func getHmsMessageRecipient(_ recipient: HMSMessageRecipient) -> [String: Any] {
@@ -200,6 +200,9 @@ class HMSHLSPlayer: UIView {
200
200
  self.addSubview(playerViewController.view)
201
201
 
202
202
  attachPlayerPlaybackListeners()
203
+
204
+ hmsHLSPlayerViewController?.showsPlaybackControls = false
205
+ hmsHLSPlayerViewController?.allowsPictureInPicturePlayback = false
203
206
  }
204
207
 
205
208
  required init?(coder: NSCoder) {
@@ -305,12 +308,16 @@ class HMSHLSPlayer: UIView {
305
308
  sendHLSPlaybackEventToJS(HMSHLSPlayerConstants.ON_PLAYBACK_FAILURE_EVENT, data)
306
309
  }
307
310
 
308
- fileprivate func onPlaybackStateChanged(state: HMSHLSPlaybackState) {
311
+ fileprivate func onPlaybackStateChanged(state: HMSHLSPlaybackState? = nil, videoSizeChanged: Bool = false, aspectRatio: Double? = nil) {
309
312
  guard onHmsHlsPlaybackEvent != nil else { return }
310
313
 
311
314
  var data = [String: Any]()
312
315
 
313
- data["state"] = state.description
316
+ data["state"] = videoSizeChanged ? "onVideoSizeChanged" : state?.description
317
+
318
+ if let aspectRatio = aspectRatio {
319
+ data["aspectRatio"] = aspectRatio
320
+ }
314
321
 
315
322
  sendHLSPlaybackEventToJS(HMSHLSPlayerConstants.ON_PLAYBACK_STATE_CHANGE_EVENT, data)
316
323
  }
@@ -334,6 +341,15 @@ class HLSPlaybackEventController: HMSHLSPlayerDelegate {
334
341
  func onPlaybackFailure(error: Error) {
335
342
  hmsHlsPlayerDelegate?.onPlaybackFailure(error: error)
336
343
  }
344
+
345
+ func onResolutionChanged(videoSize: CGSize) {
346
+ if videoSize.width >= videoSize.height {
347
+ hmsHlsPlayerDelegate?.hmsHLSPlayerViewController?.videoGravity = .resizeAspect
348
+ } else {
349
+ hmsHlsPlayerDelegate?.hmsHLSPlayerViewController?.videoGravity = .resizeAspectFill
350
+ }
351
+ hmsHlsPlayerDelegate?.onPlaybackStateChanged(videoSizeChanged: true, aspectRatio: videoSize.width/videoSize.height)
352
+ }
337
353
  }
338
354
 
339
355
  enum HMSHLSPlayerConstants {
@@ -17,7 +17,7 @@ class HMSHelper: NSObject {
17
17
  return "SEND_ALL_REQUIRED_KEYS"
18
18
  }
19
19
 
20
- static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?, localPeer: HMSLocalPeer?) -> HMSPeer? {
20
+ static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?, localPeer: HMSLocalPeer? = nil) -> HMSPeer? {
21
21
 
22
22
  guard let peerID = peerID, let peers = remotePeers else { return nil }
23
23
  if peerID == localPeer?.peerID {
@@ -26,11 +26,25 @@ class HMSHelper: NSObject {
26
26
  return peers.first { $0.peerID == peerID }
27
27
  }
28
28
 
29
- static func getRemotePeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?) -> HMSPeer? {
29
+ static func getRemotePeerFromPeerId(_ peerID: String?, hmsSDK: HMSSDK?, completion: @escaping (_ peer: HMSPeer?) -> Void) {
30
+ guard let peerID = peerID, let hms = hmsSDK, let peers = hms.remotePeers else {
31
+ completion(nil)
32
+ return
33
+ }
30
34
 
31
- guard let peerID = peerID, let peers = remotePeers else { return nil }
35
+ if let peerFromList = peers.first(where: { $0.peerID == peerID }) {
36
+ completion(peerFromList)
37
+ return
38
+ }
32
39
 
33
- return peers.first { $0.peerID == peerID }
40
+ let peerListIterator = hms.getPeerListIterator(options: HMSPeerListIteratorOptions(filterByPeerIds: [peerID], limit: 1))
41
+ peerListIterator.next() { peers, error in
42
+ guard let nonnilPeers = peers, let firstPeer = nonnilPeers.first else {
43
+ completion(nil)
44
+ return
45
+ }
46
+ completion(firstPeer)
47
+ }
34
48
  }
35
49
 
36
50
  static func getRolesFromRoleNames(_ targetedRoles: [String]?, roles: [HMSRole]?) -> [HMSRole] {
@@ -347,6 +361,21 @@ class HMSHelper: NSObject {
347
361
  return nil
348
362
  }
349
363
 
364
+ static func getPeerListIteratorOptions(_ data: NSDictionary?) -> HMSPeerListIteratorOptions? {
365
+ guard let config = data else {
366
+ return nil
367
+ }
368
+
369
+ let role = config["byRoleName"] as? String
370
+ let peerIds = config["peerIds"] as? [String]
371
+
372
+ if let limit = config["limit"] as? Int {
373
+ return HMSPeerListIteratorOptions(filterByRoleName: role, filterByPeerIds: peerIds, limit: limit)
374
+ }
375
+
376
+ return HMSPeerListIteratorOptions(filterByRoleName: role, filterByPeerIds: peerIds)
377
+ }
378
+
350
379
  private static func getAudioMode(from mode: String?) -> HMSAudioMode? {
351
380
  switch mode {
352
381
  case "voice":