@100mslive/react-native-hms 0.8.4 → 0.9.2

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