@100mslive/react-native-hms 0.8.3 → 0.9.1

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 (186) hide show
  1. package/README.md +16 -8
  2. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/.idea/gradle.xml +13 -0
  10. package/android/.idea/misc.xml +9 -0
  11. package/android/.idea/modules/android.iml +18 -0
  12. package/android/.idea/modules.xml +8 -0
  13. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  14. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  15. package/android/.idea/vcs.xml +6 -0
  16. package/android/build.gradle +4 -2
  17. package/android/local.properties +8 -0
  18. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +58 -5
  19. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +76 -61
  20. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +99 -8
  21. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +299 -128
  22. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +66 -0
  23. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +28 -3
  24. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +10 -1
  25. package/android/src/main/res/layout/hms_view.xml +19 -0
  26. package/ios/HmsDecoder.swift +217 -123
  27. package/ios/HmsHelper.swift +56 -38
  28. package/ios/HmsManager.m +11 -3
  29. package/ios/HmsManager.swift +125 -68
  30. package/ios/HmsSDK.swift +407 -189
  31. package/ios/HmsView.swift +50 -68
  32. package/ios/VideoCollectionViewCell.swift +4 -4
  33. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  34. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  35. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js +3 -0
  36. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  37. package/lib/commonjs/classes/HMSEncoder.js +166 -4
  38. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  39. package/lib/commonjs/classes/HMSHLSConfig.js +20 -0
  40. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -0
  41. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +23 -0
  42. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  43. package/lib/commonjs/classes/HMSHLSStreamingState.js +23 -0
  44. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -0
  45. package/lib/commonjs/classes/HMSHLSVariant.js +29 -0
  46. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -0
  47. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  48. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  49. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  50. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  51. package/lib/commonjs/classes/HMSLogger.js +27 -0
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -0
  54. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  55. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  56. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  57. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  58. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  59. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  60. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  61. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  62. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  63. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  64. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  65. package/lib/commonjs/classes/HMSRoom.js +6 -0
  66. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  67. package/lib/commonjs/classes/HMSRoomUpdate.js +7 -0
  68. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  69. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  70. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  71. package/lib/commonjs/classes/HMSSDK.js +476 -115
  72. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  73. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  74. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  75. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  76. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  77. package/lib/commonjs/classes/HmsView.js +26 -4
  78. package/lib/commonjs/classes/HmsView.js.map +1 -1
  79. package/lib/commonjs/index.js +140 -0
  80. package/lib/commonjs/index.js.map +1 -1
  81. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  82. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  83. package/lib/module/classes/HMSChangeTrackStateRequest.js +3 -0
  84. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  85. package/lib/module/classes/HMSEncoder.js +159 -4
  86. package/lib/module/classes/HMSEncoder.js.map +1 -1
  87. package/lib/module/classes/HMSHLSConfig.js +11 -0
  88. package/lib/module/classes/HMSHLSConfig.js.map +1 -0
  89. package/lib/module/classes/HMSHLSMeetingURLVariant.js +14 -0
  90. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  91. package/lib/module/classes/HMSHLSStreamingState.js +14 -0
  92. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -0
  93. package/lib/module/classes/HMSHLSVariant.js +20 -0
  94. package/lib/module/classes/HMSHLSVariant.js.map +1 -0
  95. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  96. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  97. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  98. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  99. package/lib/module/classes/HMSLogger.js +27 -0
  100. package/lib/module/classes/HMSLogger.js.map +1 -1
  101. package/lib/module/classes/HMSPeerUpdate.js +2 -0
  102. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  103. package/lib/module/classes/HMSPermissions.js +2 -2
  104. package/lib/module/classes/HMSPermissions.js.map +1 -1
  105. package/lib/module/classes/HMSRTCStats.js +29 -0
  106. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  107. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  108. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  109. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  110. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  111. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  112. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  113. package/lib/module/classes/HMSRoom.js +6 -0
  114. package/lib/module/classes/HMSRoom.js.map +1 -1
  115. package/lib/module/classes/HMSRoomUpdate.js +7 -0
  116. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  117. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  118. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  119. package/lib/module/classes/HMSSDK.js +464 -116
  120. package/lib/module/classes/HMSSDK.js.map +1 -1
  121. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  122. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  123. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  124. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  125. package/lib/module/classes/HmsView.js +23 -4
  126. package/lib/module/classes/HmsView.js.map +1 -1
  127. package/lib/module/index.js +10 -0
  128. package/lib/module/index.js.map +1 -1
  129. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  130. package/lib/typescript/classes/HMSChangeTrackStateRequest.d.ts +2 -0
  131. package/lib/typescript/classes/HMSEncoder.d.ts +21 -0
  132. package/lib/typescript/classes/HMSHLSConfig.d.ts +7 -0
  133. package/lib/typescript/classes/HMSHLSMeetingURLVariant.d.ts +8 -0
  134. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +9 -0
  135. package/lib/typescript/classes/HMSHLSVariant.d.ts +12 -0
  136. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  137. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  138. package/lib/typescript/classes/HMSLogger.d.ts +2 -0
  139. package/lib/typescript/classes/HMSPeerUpdate.d.ts +3 -1
  140. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  141. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  142. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  143. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  144. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  145. package/lib/typescript/classes/HMSRoom.d.ts +5 -0
  146. package/lib/typescript/classes/HMSRoomUpdate.d.ts +8 -1
  147. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  148. package/lib/typescript/classes/HMSSDK.d.ts +33 -9
  149. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  150. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  151. package/lib/typescript/index.d.ts +10 -0
  152. package/package.json +1 -1
  153. package/react-native-hms.podspec +1 -1
  154. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  155. package/src/classes/HMSChangeTrackStateRequest.ts +7 -1
  156. package/src/classes/HMSEncoder.ts +163 -3
  157. package/src/classes/HMSHLSConfig.ts +9 -0
  158. package/src/classes/HMSHLSMeetingURLVariant.ts +9 -0
  159. package/src/classes/HMSHLSStreamingState.ts +11 -0
  160. package/src/classes/HMSHLSVariant.ts +18 -0
  161. package/src/classes/HMSLocalAudioStats.ts +15 -0
  162. package/src/classes/HMSLocalVideoStats.ts +23 -0
  163. package/src/classes/HMSLogger.ts +14 -0
  164. package/src/classes/HMSPeerUpdate.ts +2 -0
  165. package/src/classes/HMSPermissions.ts +3 -3
  166. package/src/classes/HMSRTCStats.ts +27 -0
  167. package/src/classes/HMSRTCStatsReport.ts +17 -0
  168. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  169. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  170. package/src/classes/HMSRoom.ts +7 -0
  171. package/src/classes/HMSRoomUpdate.ts +7 -0
  172. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  173. package/src/classes/HMSSDK.tsx +325 -26
  174. package/src/classes/HMSServerRecordingState.ts +7 -1
  175. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  176. package/src/classes/HmsView.tsx +32 -4
  177. package/src/index.ts +10 -0
  178. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  179. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  180. package/android/.gradle/6.9/fileHashes/resourceHashesCache.bin +0 -0
  181. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  182. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  183. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  184. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  185. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  186. package/android/.project +0 -34
@@ -3,26 +3,28 @@ import Foundation
3
3
 
4
4
  class HmsDecoder: NSObject {
5
5
  static func getHmsRoom (_ hmsRoom: HMSRoom?) -> [String: Any] {
6
-
6
+
7
7
  guard let room = hmsRoom else { return [:] }
8
-
8
+
9
9
  let id = room.roomID ?? ""
10
10
  let name = room.name ?? ""
11
11
  let metaData = room.metaData ?? ""
12
+ let count = room.peerCount ?? 0
12
13
  let browserRecordingState = HmsDecoder.getHMSBrowserRecordingState(hmsRoom?.browserRecordingState)
13
14
  let rtmpStreamingState = HmsDecoder.getHMSRtmpStreamingState(hmsRoom?.rtmpStreamingState)
14
15
  let serverRecordingState = HmsDecoder.getHMSServerRecordingState(hmsRoom?.serverRecordingState)
16
+ let hlsStreamingState = HmsDecoder.getHlsStreamingState(hmsRoom?.hlsStreamingState)
15
17
  var peers = [[String: Any]]()
16
-
18
+
17
19
  for peer in room.peers {
18
20
  peers.append(getHmsPeer(peer))
19
21
  }
20
-
21
- return ["id": id, "name": name, "metaData": metaData, "peers": peers, "browserRecordingState": browserRecordingState, "rtmpHMSRtmpStreamingState": rtmpStreamingState, "serverRecordingState": serverRecordingState]
22
+
23
+ return ["id": id, "name": name, "metaData": metaData, "peers": peers, "browserRecordingState": browserRecordingState, "rtmpHMSRtmpStreamingState": rtmpStreamingState, "serverRecordingState": serverRecordingState, "hlsStreamingState": hlsStreamingState, "peerCount": count]
22
24
  }
23
-
25
+
24
26
  static func getHmsPeer (_ peer: HMSPeer) -> [String: Any] {
25
-
27
+
26
28
  let peerID = peer.peerID
27
29
  let name = peer.name
28
30
  let isLocal = peer.isLocal
@@ -32,9 +34,9 @@ class HmsDecoder: NSObject {
32
34
  let audioTrack = getHmsAudioTrack(peer.audioTrack)
33
35
  let videoTrack = getHmsVideoTrack(peer.videoTrack)
34
36
  let role = getHmsRole(peer.role)
35
-
37
+
36
38
  let auxiliaryTracks = getAllTracks(peer.auxiliaryTracks ?? [] )
37
-
39
+
38
40
  return ["peerID": peerID,
39
41
  "name": name,
40
42
  "isLocal": isLocal,
@@ -46,60 +48,60 @@ class HmsDecoder: NSObject {
46
48
  "auxiliaryTracks": auxiliaryTracks,
47
49
  "role": role]
48
50
  }
49
-
51
+
50
52
  static func getAllTracks (_ tracks: [HMSTrack]) -> [[String: Any]] {
51
53
  var auxiliaryTracks = [[String: Any]]()
52
-
54
+
53
55
  for track in tracks {
54
56
  auxiliaryTracks.append(getHmsTrack(track))
55
57
  }
56
58
  return auxiliaryTracks
57
59
  }
58
-
60
+
59
61
  static func getHmsTrack (_ track: HMSTrack?) -> [String: Any] {
60
-
62
+
61
63
  guard let hmsTrack = track else { return [:] }
62
-
64
+
63
65
  let trackId = hmsTrack.trackId
64
66
  let source = hmsTrack.source
65
67
  let trackDescription = hmsTrack.trackDescription
66
68
  let isMute = hmsTrack.isMute()
67
69
  let type = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
68
-
70
+
69
71
  return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "type": type, "kind": type]
70
72
  }
71
-
73
+
72
74
  static func getHmsAudioTrack (_ hmsAudioTrack: HMSAudioTrack?) -> [String: Any] {
73
-
75
+
74
76
  guard let hmsTrack = hmsAudioTrack else { return [:] }
75
-
77
+
76
78
  let trackId: String = hmsTrack.trackId
77
79
  let source: String = hmsTrack.source
78
80
  let trackDescription: String = hmsTrack.trackDescription
79
81
  let isMute: Bool = hmsTrack.isMute()
80
82
  let kind: String = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
81
-
83
+
82
84
  return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "type": kind, "kind": kind]
83
85
  }
84
-
86
+
85
87
  static func getHmsVideoTrack (_ hmsVideoTrack: HMSVideoTrack?) -> [String: Any] {
86
-
88
+
87
89
  guard let hmsTrack = hmsVideoTrack else { return [:] }
88
-
90
+
89
91
  let trackId = hmsTrack.trackId
90
92
  let source = hmsTrack.source
91
93
  let trackDescription = hmsTrack.trackDescription
92
94
  let isMute = hmsTrack.isMute()
93
95
  let isDegraded = hmsTrack.isDegraded()
94
96
  let kind: String = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
95
-
97
+
96
98
  return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "isDegraded": isDegraded, "type": kind, "kind": kind]
97
99
  }
98
-
100
+
99
101
  static func getHmsLocalPeer(_ hmsLocalPeer: HMSLocalPeer?) -> [String: Any] {
100
-
102
+
101
103
  guard let peer = hmsLocalPeer else { return [:] }
102
-
104
+
103
105
  let peerID = peer.peerID
104
106
  let name = peer.name
105
107
  let isLocal = peer.isLocal
@@ -109,67 +111,75 @@ class HmsDecoder: NSObject {
109
111
  let audioTrack = getHmsAudioTrack(peer.audioTrack)
110
112
  let videoTrack = getHmsVideoTrack(peer.videoTrack)
111
113
  let role = getHmsRole(peer.role)
112
-
114
+
113
115
  var auxiliaryTracks = [[String: Any]]()
114
116
  for track in peer.auxiliaryTracks ?? [] {
115
117
  auxiliaryTracks.append(getHmsTrack(track))
116
118
  }
117
-
119
+
118
120
  let localAudioTrack = peer.localAudioTrack()
119
121
  let localVideoTrack = peer.localVideoTrack()
120
-
122
+
121
123
  var localAudioTrackData = [String: Any]()
122
124
  if let localAudio = localAudioTrack {
123
- let type = HmsHelper.getHmsTrackType(localAudio.kind) ?? ""
124
- localAudioTrackData = ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudioTrack?.isMute() ?? false, "type": type, "kind": type]
125
+ localAudioTrackData = getHmsLocalAudioTrack(localAudio)
125
126
  }
126
-
127
+
127
128
  var localVideoTrackData = [String: Any]()
128
129
  if let localVideo = localVideoTrack {
129
- let type = HmsHelper.getHmsTrackType(localVideo.kind) ?? ""
130
- localVideoTrackData = ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute":localAudioTrack?.isMute() ?? false, "type": type, "kind": type]
130
+ localVideoTrackData = getHmsLocalVideoTrack(localVideo)
131
131
  }
132
-
132
+
133
133
  return ["peerID": peerID, "name": name, "isLocal": isLocal, "customerUserID": customerUserID, "customerDescription": customerDescription, "metadata": metadata, "audioTrack": audioTrack, "videoTrack": videoTrack, "auxiliaryTracks": auxiliaryTracks, "localAudioTrackData": localAudioTrackData, "localVideoTrackData": localVideoTrackData, "role": role]
134
134
  }
135
135
 
136
+ static func getHmsLocalAudioTrack(_ localAudio: HMSLocalAudioTrack) -> [String: Any] {
137
+ let type = HmsHelper.getHmsTrackType(localAudio.kind) ?? ""
138
+ return ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudio.isMute(), "type": type, "kind": type]
139
+ }
140
+
141
+ static func getHmsLocalVideoTrack(_ localVideo: HMSLocalVideoTrack) -> [String: Any] {
142
+ let type = HmsHelper.getHmsTrackType(localVideo.kind) ?? ""
143
+ return ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute(), "type": type, "kind": type]
144
+ }
145
+
136
146
  static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any] {
137
-
147
+
138
148
  guard let settings = hmsAudioTrackSettings else { return [:] }
139
-
149
+
140
150
  let maxBitrate = settings.maxBitrate
141
151
  let trackDescription = settings.trackDescription ?? ""
142
-
152
+
143
153
  return ["maxBitrate": maxBitrate, "trackDescription": trackDescription]
144
154
  }
145
-
155
+
146
156
  static func getHmsVideoTrackSettings(_ hmsVideoTrackSettings: HMSVideoTrackSettings?) -> [String: Any] {
147
-
157
+
148
158
  guard let settings = hmsVideoTrackSettings else { return [:] }
149
-
159
+
150
160
  let codec = getHmsVideoTrackCodec(settings.codec)
151
161
  let resolution = getHmsVideoResolution(settings.resolution)
152
162
  let maxBitrate = settings.maxBitrate
153
163
  let maxFrameRate = settings.maxFrameRate
154
164
  let cameraFacing = getHmsVideoTrackCameraFacing(settings.cameraFacing)
155
165
  let trackDescription = settings.trackDescription ?? ""
156
-
166
+
157
167
  var simulcastSettingsData = [[String: Any]]()
158
168
  if let simulcastSettings = settings.simulcastSettings {
159
169
  for simulcast in simulcastSettings {
160
170
  let data = ["maxBitrate": simulcast.maxBitrate,
161
171
  "maxFrameRate": simulcast.maxFrameRate,
162
172
  "scaleResolutionDownBy": simulcast.scaleResolutionDownBy,
163
- "rid": simulcast.rid] as [String : Any]
173
+ "rid": simulcast.rid] as [String: Any]
164
174
  simulcastSettingsData.append(data)
165
175
  }
166
176
  }
167
-
177
+
168
178
  return ["codec": codec, "resolution": resolution, "maxBitrate": maxBitrate, "maxFrameRate": maxFrameRate, "cameraFacing": cameraFacing, "trackDescription": trackDescription, "simulcastSettings": simulcastSettingsData]
169
179
  }
170
-
171
- static func getHmsVideoTrackCodec(_ codec : HMSCodec) -> String {
172
- switch(codec) {
180
+
181
+ static func getHmsVideoTrackCodec(_ codec: HMSCodec) -> String {
182
+ switch codec {
173
183
  case HMSCodec.VP8:
174
184
  return "VP8"
175
185
  case HMSCodec.H264:
@@ -178,9 +188,9 @@ class HmsDecoder: NSObject {
178
188
  return "H264"
179
189
  }
180
190
  }
181
-
182
- static func getHmsVideoTrackCameraFacing(_ cameraFacing : HMSCameraFacing) -> String {
183
- switch(cameraFacing) {
191
+
192
+ static func getHmsVideoTrackCameraFacing(_ cameraFacing: HMSCameraFacing) -> String {
193
+ switch cameraFacing {
184
194
  case HMSCameraFacing.front:
185
195
  return "FRONT"
186
196
  case HMSCameraFacing.back:
@@ -189,27 +199,27 @@ class HmsDecoder: NSObject {
189
199
  return "FRONT"
190
200
  }
191
201
  }
192
-
202
+
193
203
  static func getHmsVideoResolution(_ hmsVideoResolution: HMSVideoResolution?) -> [String: Any] {
194
204
  guard let resolution = hmsVideoResolution else { return [:] }
195
-
205
+
196
206
  return ["width": resolution.width, "height": resolution.height]
197
207
  }
198
-
208
+
199
209
  static func getHmsRemotePeers (_ remotePeers: [HMSRemotePeer]?) -> [[String: Any]] {
200
210
  guard let remotePeers = remotePeers else { return [[:]] }
201
-
211
+
202
212
  var peers = [[String: Any]]()
203
-
213
+
204
214
  for peer in remotePeers {
205
215
  peers.append(getHmsRemotePeer(peer))
206
216
  }
207
-
217
+
208
218
  return peers
209
219
  }
210
-
220
+
211
221
  static func getHmsRemotePeer(_ hmsRemotePeer: HMSRemotePeer) -> [String: Any] {
212
-
222
+
213
223
  let peerID = hmsRemotePeer.peerID
214
224
  let name = hmsRemotePeer.name
215
225
  let isLocal = hmsRemotePeer.isLocal
@@ -219,51 +229,59 @@ class HmsDecoder: NSObject {
219
229
  let audioTrack = getHmsAudioTrack(hmsRemotePeer.audioTrack)
220
230
  let videoTrack = getHmsVideoTrack(hmsRemotePeer.videoTrack)
221
231
  let role = getHmsRole(hmsRemotePeer.role)
222
-
232
+
223
233
  var auxiliaryTracks = [[String: Any]]()
224
-
234
+
225
235
  for track in hmsRemotePeer.auxiliaryTracks ?? [] {
226
236
  auxiliaryTracks.append(getHmsTrack(track))
227
237
  }
228
-
238
+
229
239
  let remoteAudioTrack = hmsRemotePeer.remoteAudioTrack()
230
240
  let remoteVideoTrack = hmsRemotePeer.remoteVideoTrack()
231
-
241
+
232
242
  var remoteAudioTrackData = [String: Any]()
233
243
  if let remoteAudio = remoteAudioTrack {
234
- let type = HmsHelper.getHmsTrackType(remoteAudio.kind) ?? ""
235
- remoteAudioTrackData = ["trackId": remoteAudio.trackId, "source": remoteAudio.source, "trackDescription": remoteAudio.trackDescription, "playbackAllowed": remoteAudio.isPlaybackAllowed(), "isMute": remoteAudio.isMute(), "type": type, "kind": type]
244
+ remoteAudioTrackData = getHMSRemoteAudioTrack(remoteAudio)
236
245
  }
237
-
246
+
238
247
  var remoteVideoTrackData = [String: Any]()
239
248
  if let remoteVideo = remoteVideoTrack {
240
- let type = HmsHelper.getHmsTrackType(remoteVideo.kind) ?? ""
241
- remoteVideoTrackData = ["trackId": remoteVideo.trackId, "source": remoteVideo.source, "trackDescription": remoteVideo.trackDescription, "layer": remoteVideo.layer.rawValue, "playbackAllowed": remoteVideo.isPlaybackAllowed(), "isMute": remoteVideo.isMute(), "isDegraded": remoteVideo.isDegraded(), "type": type, "kind": type]
249
+ remoteVideoTrackData = getHMSRemoteVideoTrack(remoteVideo)
242
250
  }
243
-
251
+
244
252
  return ["peerID": peerID, "name": name, "isLocal": isLocal, "customerUserID": customerUserID, "customerDescription": customerDescription, "metadata": metadata, "audioTrack": audioTrack, "videoTrack": videoTrack, "auxiliaryTracks": auxiliaryTracks, "remoteAudioTrackData": remoteAudioTrackData, "remoteVideoTrackData": remoteVideoTrackData, "role": role]
245
253
  }
246
254
 
255
+ static func getHMSRemoteAudioTrack(_ remoteAudio: HMSRemoteAudioTrack) -> [String: Any] {
256
+ let type = HmsHelper.getHmsTrackType(remoteAudio.kind) ?? ""
257
+ return ["trackId": remoteAudio.trackId, "source": remoteAudio.source, "trackDescription": remoteAudio.trackDescription, "playbackAllowed": remoteAudio.isPlaybackAllowed(), "isMute": remoteAudio.isMute(), "type": type, "kind": type]
258
+ }
259
+
260
+ static func getHMSRemoteVideoTrack(_ remoteVideo: HMSRemoteVideoTrack) -> [String: Any] {
261
+ let type = HmsHelper.getHmsTrackType(remoteVideo.kind) ?? ""
262
+ return ["trackId": remoteVideo.trackId, "source": remoteVideo.source, "trackDescription": remoteVideo.trackDescription, "layer": remoteVideo.layer.rawValue, "playbackAllowed": remoteVideo.isPlaybackAllowed(), "isMute": remoteVideo.isMute(), "isDegraded": remoteVideo.isDegraded(), "type": type, "kind": type]
263
+ }
264
+
247
265
  static func getPreviewTracks(_ tracks: [HMSTrack]) -> [String: Any] {
248
-
266
+
249
267
  var hmsTracks = [String: Any]()
250
-
268
+
251
269
  for track in tracks {
252
270
  if let localVideo = track as? HMSLocalVideoTrack {
253
271
  let type = HmsHelper.getHmsTrackType(localVideo.kind) ?? ""
254
- let localVideoTrackData: [String : Any] = ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute(), "kind": type, "type": type]
272
+ let localVideoTrackData: [String: Any] = ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute(), "kind": type, "type": type]
255
273
  hmsTracks["videoTrack"] = localVideoTrackData
256
274
  }
257
-
275
+
258
276
  if let localAudio = track as? HMSLocalAudioTrack {
259
277
  let type = HmsHelper.getHmsTrackType(localAudio.kind) ?? ""
260
- let localAudioTrackData: [String : Any] = ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudio.isMute(), "kind": type, "type": type]
278
+ let localAudioTrackData: [String: Any] = ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudio.isMute(), "kind": type, "type": type]
261
279
  hmsTracks["audioTrack"] = localAudioTrackData
262
280
  }
263
281
  }
264
282
  return hmsTracks
265
283
  }
266
-
284
+
267
285
  static func getAllRoles(_ roles: [HMSRole]?) -> [[String: Any]] {
268
286
  var decodedRoles = [[String: Any]]()
269
287
  if let extractedRoles = roles {
@@ -273,24 +291,25 @@ class HmsDecoder: NSObject {
273
291
  }
274
292
  return decodedRoles
275
293
  }
276
-
294
+
277
295
  static func getHmsRole(_ hmsRole: HMSRole?) -> [String: Any] {
278
-
296
+
279
297
  guard let role = hmsRole else { return [:] }
280
-
298
+
281
299
  let name = role.name
282
300
  let permissions = getHmsPermissions(role.permissions)
283
301
  let publishSettings = getHmsPublishSettings(role.publishSettings)
302
+ let subscribeSettings = getHmsSubscribeSettings(role.subscribeSettings)
284
303
  let priority = role.priority
285
304
  let generalPermissions = role.generalPermissions ?? [:]
286
305
  let internalPlugins = role.internalPlugins ?? [:]
287
306
  let externalPlugins = role.externalPlugins ?? [:]
288
-
289
- return ["name": name, "permissions": permissions, "publishSettings": publishSettings, "priority": priority, "generalPermissions": generalPermissions, "internalPlugins": internalPlugins, "externalPlugins": externalPlugins]
307
+
308
+ return ["name": name, "permissions": permissions, "publishSettings": publishSettings, "subscribeSettings": subscribeSettings, "priority": priority, "generalPermissions": generalPermissions, "internalPlugins": internalPlugins, "externalPlugins": externalPlugins]
290
309
  }
291
-
310
+
292
311
  static func getHmsPermissions (_ permissions: HMSPermissions) -> [String: Any] {
293
-
312
+
294
313
  let endRoom = permissions.endRoom ?? false
295
314
  let removeOthers = permissions.removeOthers ?? false
296
315
  let stopPresentation = permissions.stopPresentation ?? false
@@ -298,7 +317,7 @@ class HmsDecoder: NSObject {
298
317
  let mute = permissions.mute ?? false
299
318
  let unmute = permissions.unmute ?? false
300
319
  let changeRole = permissions.changeRole ?? false
301
-
320
+
302
321
  return ["endRoom": endRoom,
303
322
  "removeOthers": removeOthers,
304
323
  "stopPresentation": stopPresentation,
@@ -307,21 +326,21 @@ class HmsDecoder: NSObject {
307
326
  "unmute": unmute,
308
327
  "changeRole": changeRole]
309
328
  }
310
-
329
+
311
330
  static func getHmsPublishSettings (_ publishSettings: HMSPublishSettings) -> [String: Any] {
312
-
331
+
313
332
  let audio = getHmsAudioSettings(publishSettings.audio)
314
333
  let video = getHmsVideoSettings(publishSettings.video)
315
334
  let screen = getHmsVideoSettings(publishSettings.screen)
316
335
  let videoSimulcastLayers = getHmsSimulcastLayers(publishSettings.videoSimulcastLayers)
317
336
  let screenSimulcastLayers = getHmsSimulcastLayers(publishSettings.screenSimulcastLayers)
318
337
  var allowed = publishSettings.allowed ?? []
319
- if((publishSettings.allowed) != nil) {
338
+ if (publishSettings.allowed) != nil {
320
339
  allowed = getWriteableArray(publishSettings.allowed)
321
- }else {
340
+ } else {
322
341
  allowed = []
323
342
  }
324
-
343
+
325
344
  return ["audio": audio,
326
345
  "video": video,
327
346
  "screen": screen,
@@ -330,6 +349,30 @@ class HmsDecoder: NSObject {
330
349
  "allowed": allowed]
331
350
  }
332
351
 
352
+ static func getHmsSubscribeSettings (_ subscribeSettings: HMSSubscribeSettings?) -> [String: Any] {
353
+ guard let settings = subscribeSettings
354
+ else { return [:] }
355
+
356
+ let maxSubsBitRate = settings.maxSubsBitRate
357
+ let subscribeDegradationParam = getHmsSubscribeDegradationSettings(settings.subscribeDegradation)
358
+ let subscribeTo = settings.subscribeToRoles
359
+
360
+ return ["maxSubsBitRate": maxSubsBitRate, "subscribeDegradationParam": subscribeDegradationParam, "subscribeTo": subscribeTo ?? []]
361
+ }
362
+
363
+ static func getHmsSubscribeDegradationSettings (_ hmsSubscribeDegradationParams: HMSSubscribeDegradationPolicy?) -> [String: Any] {
364
+ guard let params = hmsSubscribeDegradationParams
365
+ else {
366
+ return [:]
367
+ }
368
+
369
+ let degradeGracePeriodSeconds = String(params.degradeGracePeriodSeconds ?? 0)
370
+ let packetLossThreshold = String(params.packetLossThreshold ?? 0)
371
+ let recoverGracePeriodSeconds = String(params.recoverGracePeriodSeconds ?? 0)
372
+
373
+ return ["degradeGracePeriodSeconds": degradeGracePeriodSeconds, "packetLossThreshold": packetLossThreshold, "recoverGracePeriodSeconds": recoverGracePeriodSeconds]
374
+ }
375
+
333
376
  static func getWriteableArray(_ array: [String]?) -> [String] {
334
377
  var decodedArray = [String]()
335
378
  if let extractedArray = array {
@@ -339,36 +382,36 @@ class HmsDecoder: NSObject {
339
382
  }
340
383
  return decodedArray
341
384
  }
342
-
385
+
343
386
  static func getHmsAudioSettings(_ audioSettings: HMSAudioSettings) -> [String: Any] {
344
387
  let bitRate = audioSettings.bitRate
345
388
  let codec = audioSettings.codec
346
-
389
+
347
390
  return ["bitRate": bitRate, "codec": codec]
348
391
  }
349
-
392
+
350
393
  static func getHmsVideoSettings(_ videoSettings: HMSVideoSettings) -> [String: Any] {
351
-
394
+
352
395
  let bitRate = videoSettings.bitRate
353
396
  let codec = videoSettings.codec
354
397
  let frameRate = videoSettings.frameRate
355
398
  let width = videoSettings.width
356
399
  let height = videoSettings.height
357
-
400
+
358
401
  return ["bitRate": bitRate ?? 0, "codec": codec, "frameRate": frameRate, "width": width, "height": height]
359
402
  }
360
-
403
+
361
404
  static func getHmsSimulcastLayers(_ videoSimulcastLayers: HMSSimulcastSettingsPolicy?) -> [String: Any] {
362
-
405
+
363
406
  guard let videoLayers = videoSimulcastLayers else { return [:] }
364
-
407
+
365
408
  let width = videoLayers.width ?? 0
366
409
  let height = videoLayers.height ?? 0
367
410
  let layers = getHmsSimulcastLayerSettingsPolicy(videoLayers.layers)
368
-
411
+
369
412
  return ["width": width, "height": height, "layers": layers]
370
413
  }
371
-
414
+
372
415
  static func getHmsSimulcastLayerSettingsPolicy(_ layers: [HMSSimulcastLayerSettingsPolicy]?) -> [[String: Any]] {
373
416
  var layersSettingsPolicy = [[String: Any]]()
374
417
  if let settingsPolicies = layers {
@@ -377,54 +420,54 @@ class HmsDecoder: NSObject {
377
420
  let scaleResolutionDownBy = settingsPolicy.scaleResolutionDownBy ?? 0
378
421
  let maxBitrate = settingsPolicy.maxBitrate ?? -1
379
422
  let maxFramerate = settingsPolicy.maxFramerate ?? -1
380
-
423
+
381
424
  let settingsPolicyObject = ["rid": rid,
382
425
  "scaleResolutionDownBy": scaleResolutionDownBy,
383
426
  "maxBitrate": maxBitrate,
384
- "maxFramerate": maxFramerate] as [String : Any]
385
-
427
+ "maxFramerate": maxFramerate] as [String: Any]
428
+
386
429
  layersSettingsPolicy.append(settingsPolicyObject)
387
430
  }
388
431
  }
389
-
432
+
390
433
  return layersSettingsPolicy
391
434
  }
392
-
435
+
393
436
  static func getHmsRoleChangeRequest(_ roleChangeRequest: HMSRoleChangeRequest, _ id: String?) -> [String: Any] {
394
-
437
+
395
438
  if let sdkId = id {
396
439
  var requestedBy: [String: Any]?
397
440
  if let peer = roleChangeRequest.requestedBy {
398
441
  requestedBy = getHmsPeer(peer)
399
442
  }
400
-
443
+
401
444
  let suggestedRole = getHmsRole(roleChangeRequest.suggestedRole)
402
-
403
- var request = ["suggestedRole": suggestedRole, "id": sdkId] as [String : Any]
445
+
446
+ var request = ["suggestedRole": suggestedRole, "id": sdkId] as [String: Any]
404
447
  if let requestedBy = requestedBy {
405
448
  request["requestedBy"] = requestedBy
406
449
  }
407
450
  return request
408
451
  }
409
-
452
+
410
453
  return [:]
411
454
  }
412
-
455
+
413
456
  static func getHmsChangeTrackStateRequest(_ changeTrackStateRequest: HMSChangeTrackStateRequest, _ id: String) -> [String: Any] {
414
457
  var requestedBy: [String: Any]?
415
458
  if let peer = changeTrackStateRequest.requestedBy {
416
459
  requestedBy = getHmsPeer(peer)
417
460
  }
418
461
  let trackType = changeTrackStateRequest.track.kind == .video ? "video" : "audio"
419
-
420
- var request = ["trackType": trackType, "id": id] as [String: Any]
462
+
463
+ var request = ["trackType": trackType, "id": id, "mute": changeTrackStateRequest.mute] as [String: Any]
421
464
  if let requestedBy = requestedBy {
422
465
  request["requestedBy"] = requestedBy
423
466
  }
424
-
467
+
425
468
  return request
426
469
  }
427
-
470
+
428
471
  static func getError(_ errorObj: HMSError?) -> [String: Any] {
429
472
  if let error = errorObj {
430
473
  let code = error.code
@@ -435,43 +478,94 @@ class HmsDecoder: NSObject {
435
478
  let name = error.id
436
479
  let id = error.id
437
480
  let action = error.action
438
-
439
- return ["code": code, "description": description, "localizedDescription":localizedDescription, "debugDescription":debugDescription, "message":message, "name":name, "action":action, "id": id]
481
+
482
+ return ["code": code, "description": description, "localizedDescription": localizedDescription, "debugDescription": debugDescription, "message": message, "name": name, "action": action, "id": id]
440
483
  } else {
441
484
  return [:]
442
485
  }
443
486
  }
444
-
487
+
445
488
  static func getHMSBrowserRecordingState(_ data: HMSBrowserRecordingState?) -> [String: Any] {
446
489
  if let recordingState = data {
447
490
  let running = recordingState.running
491
+ let startedAt = recordingState.startedAt?.timeIntervalSince1970 ?? 0
448
492
  let error = HmsDecoder.getError(recordingState.error)
449
-
450
- return ["running": running, "error": error]
493
+
494
+ return ["running": running, "error": error, "startedAt": startedAt * 1000]
451
495
  } else {
452
496
  return [:]
453
497
  }
454
498
  }
455
-
499
+
456
500
  static func getHMSRtmpStreamingState(_ data: HMSRTMPStreamingState?) -> [String: Any] {
457
501
  if let streamingState = data {
458
502
  let running = streamingState.running
503
+ let startedAt = streamingState.startedAt?.timeIntervalSince1970 ?? 0
459
504
  let error = HmsDecoder.getError(streamingState.error)
460
-
461
- return ["running": running, "error": error]
505
+
506
+ return ["running": running, "error": error, "startedAt": startedAt * 1000]
462
507
  } else {
463
508
  return [:]
464
509
  }
465
510
  }
466
-
511
+
467
512
  static func getHMSServerRecordingState(_ data: HMSServerRecordingState?) -> [String: Any] {
468
513
  if let recordingState = data {
469
514
  let running = recordingState.running
515
+ let startedAt = recordingState.startedAt?.timeIntervalSince1970 ?? 0
470
516
  let error = HmsDecoder.getError(recordingState.error)
471
-
472
- return ["running": running, "error": error]
517
+
518
+ return ["running": running, "error": error, "startedAt": startedAt * 1000]
473
519
  } else {
474
520
  return [:]
475
521
  }
476
522
  }
523
+
524
+ static func getHlsStreamingState(_ data: HMSHLSStreamingState?) -> [String: Any] {
525
+ if let streamingState = data {
526
+ let running = streamingState.running
527
+ let variants = HmsDecoder.getHMSHlsVariant(streamingState.variants)
528
+
529
+ return ["running": running, "variants": variants]
530
+ } else {
531
+ return [:]
532
+ }
533
+ }
534
+
535
+ static func getHMSHlsVariant(_ data: [HMSHLSVariant]?) -> [[String: Any]] {
536
+ var variants = [[String: Any]]()
537
+
538
+ if let hlsVariant = data {
539
+ for variant in hlsVariant {
540
+ let meetingUrl = variant.meetingURL.absoluteString
541
+ let metadata = variant.metadata
542
+ let startedAt = variant.startedAt?.timeIntervalSince1970 ?? 0
543
+ let hlsStreamingUrl = variant.url.absoluteString
544
+
545
+ let decodedVariant = ["meetingUrl": meetingUrl, "metadata": metadata, "hlsStreamUrl": hlsStreamingUrl, "startedAt": startedAt * 1000] as [String: Any]
546
+ variants.append(decodedVariant)
547
+ }
548
+ }
549
+ return variants
550
+ }
551
+
552
+ static func getHMSRTCStats(_ data: HMSRTCStats) -> [String: Any] {
553
+ return ["bitrateReceived": data.bitrateReceived, "bitrateSent": data.bitrateSent, "bytesReceived": data.bytesReceived, "bytesSent": data.bytesSent, "packetsLost": data.packetsLost, "packetsReceived": data.packetsReceived, "roundTripTime": data.roundTripTime]
554
+ }
555
+
556
+ static func getLocalAudioStats(_ data: HMSLocalAudioStats) -> [String: Any] {
557
+ return ["roundTripTime": data.roundTripTime, "bytesSent": data.bytesSent, "bitrate": data.bitrate]
558
+ }
559
+
560
+ static func getLocalVideoStats(_ data: HMSLocalVideoStats) -> [String: Any] {
561
+ return ["roundTripTime": data.roundTripTime, "bytesSent": data.bytesSent, "bitrate": data.bitrate, "resolution": HmsDecoder.getHmsVideoResolution(data.resolution), "frameRate": data.frameRate]
562
+ }
563
+
564
+ static func getRemoteAudioStats(_ data: HMSRemoteAudioStats) -> [String: Any] {
565
+ return ["bitrate": data.bitrate, "packetsReceived": data.packetsReceived, "packetsLost": data.packetsLost, "bytesReceived": data.bytesReceived, "jitter": data.jitter]
566
+ }
567
+
568
+ static func getRemoteVideoStats(_ data: HMSRemoteVideoStats) -> [String: Any] {
569
+ return ["bitrate": data.bitrate, "packetsReceived": data.packetsReceived, "packetsLost": data.packetsLost, "bytesReceived": data.bytesReceived, "jitter": data.jitter, "resolution": HmsDecoder.getHmsVideoResolution(data.resolution), "frameRate": data.frameRate]
570
+ }
477
571
  }