@100mslive/react-native-hms 0.9.0 → 0.9.3

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