@100mslive/react-native-hms 0.7.4 → 0.8.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 (211) hide show
  1. package/README.md +37 -39
  2. package/android/.gradle/checksums/checksums.lock +0 -0
  3. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  4. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  5. package/android/.project +8 -2
  6. package/android/build.gradle +1 -2
  7. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +268 -232
  8. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +122 -12
  9. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +143 -519
  10. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +940 -0
  11. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +34 -22
  12. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -2
  13. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +9 -13
  14. package/ios/HmsDecoder.swift +168 -33
  15. package/ios/HmsHelper.swift +121 -1
  16. package/ios/HmsManager.m +20 -14
  17. package/ios/HmsManager.swift +125 -398
  18. package/ios/HmsSDK.swift +784 -0
  19. package/ios/HmsView.swift +16 -8
  20. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  21. package/lib/commonjs/classes/HMSAudioTrackSettings.js +3 -0
  22. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  23. package/lib/commonjs/classes/HMSBrowserRecordingState.js +23 -0
  24. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -0
  25. package/lib/commonjs/classes/HMSCameraFacing.js +14 -0
  26. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -0
  27. package/lib/commonjs/classes/HMSConfig.js +3 -7
  28. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  29. package/lib/commonjs/classes/HMSEncoder.js +65 -35
  30. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  31. package/lib/commonjs/classes/HMSException.js +30 -0
  32. package/lib/commonjs/classes/HMSException.js.map +1 -0
  33. package/lib/commonjs/classes/HMSHelper.js +2 -2
  34. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  35. package/lib/commonjs/classes/HMSLocalAudioTrack.js +39 -1
  36. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  37. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  38. package/lib/commonjs/classes/HMSLocalVideoTrack.js +28 -2
  39. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  40. package/lib/commonjs/classes/HMSLogger.js +28 -1
  41. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  42. package/lib/commonjs/classes/HMSPeer.js +3 -0
  43. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  44. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -0
  45. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  46. package/lib/commonjs/classes/HMSPermissions.js +6 -0
  47. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  48. package/lib/commonjs/classes/HMSRTMPConfig.js +26 -0
  49. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -0
  50. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +21 -0
  51. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  52. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  53. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +21 -0
  54. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  55. package/lib/commonjs/classes/HMSRoom.js +9 -0
  56. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  57. package/lib/commonjs/classes/HMSRtmpStreamingState.js +23 -0
  58. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -0
  59. package/lib/commonjs/classes/HMSSDK.js +399 -150
  60. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  61. package/lib/commonjs/classes/HMSServerRecordingState.js +23 -0
  62. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -0
  63. package/lib/commonjs/classes/HMSTrack.js +8 -18
  64. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  65. package/lib/commonjs/classes/HMSTrackSettings.js +3 -0
  66. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  67. package/lib/commonjs/classes/HMSTrackType.js +14 -0
  68. package/lib/commonjs/classes/HMSTrackType.js.map +1 -0
  69. package/lib/commonjs/classes/HMSVideoCodec.js +4 -4
  70. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  71. package/lib/commonjs/classes/HMSVideoResolution.js +23 -0
  72. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -0
  73. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  74. package/lib/commonjs/classes/HMSVideoTrack.js +2 -0
  75. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  76. package/lib/commonjs/classes/HMSVideoTrackSettings.js +0 -3
  77. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  78. package/lib/commonjs/classes/HmsView.js +10 -7
  79. package/lib/commonjs/classes/HmsView.js.map +1 -1
  80. package/lib/commonjs/index.js +112 -0
  81. package/lib/commonjs/index.js.map +1 -1
  82. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  83. package/lib/module/classes/HMSAudioTrackSettings.js +3 -0
  84. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  85. package/lib/module/classes/HMSBrowserRecordingState.js +14 -0
  86. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -0
  87. package/lib/module/classes/HMSCameraFacing.js +7 -0
  88. package/lib/module/classes/HMSCameraFacing.js.map +1 -0
  89. package/lib/module/classes/HMSConfig.js +3 -7
  90. package/lib/module/classes/HMSConfig.js.map +1 -1
  91. package/lib/module/classes/HMSEncoder.js +64 -35
  92. package/lib/module/classes/HMSEncoder.js.map +1 -1
  93. package/lib/module/classes/HMSException.js +21 -0
  94. package/lib/module/classes/HMSException.js.map +1 -0
  95. package/lib/module/classes/HMSHelper.js +2 -2
  96. package/lib/module/classes/HMSHelper.js.map +1 -1
  97. package/lib/module/classes/HMSLocalAudioTrack.js +37 -2
  98. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  99. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  100. package/lib/module/classes/HMSLocalVideoTrack.js +25 -2
  101. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  102. package/lib/module/classes/HMSLogger.js +28 -1
  103. package/lib/module/classes/HMSLogger.js.map +1 -1
  104. package/lib/module/classes/HMSPeer.js +3 -0
  105. package/lib/module/classes/HMSPeer.js.map +1 -1
  106. package/lib/module/classes/HMSPeerUpdate.js +1 -0
  107. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  108. package/lib/module/classes/HMSPermissions.js +6 -0
  109. package/lib/module/classes/HMSPermissions.js.map +1 -1
  110. package/lib/module/classes/HMSRTMPConfig.js +17 -0
  111. package/lib/module/classes/HMSRTMPConfig.js.map +1 -0
  112. package/lib/module/classes/HMSRemoteAudioTrack.js +18 -0
  113. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  114. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  115. package/lib/module/classes/HMSRemoteVideoTrack.js +18 -0
  116. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  117. package/lib/module/classes/HMSRoom.js +9 -0
  118. package/lib/module/classes/HMSRoom.js.map +1 -1
  119. package/lib/module/classes/HMSRtmpStreamingState.js +14 -0
  120. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -0
  121. package/lib/module/classes/HMSSDK.js +388 -150
  122. package/lib/module/classes/HMSSDK.js.map +1 -1
  123. package/lib/module/classes/HMSServerRecordingState.js +14 -0
  124. package/lib/module/classes/HMSServerRecordingState.js.map +1 -0
  125. package/lib/module/classes/HMSTrack.js +8 -16
  126. package/lib/module/classes/HMSTrack.js.map +1 -1
  127. package/lib/module/classes/HMSTrackSettings.js +3 -0
  128. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  129. package/lib/module/classes/HMSTrackType.js +7 -0
  130. package/lib/module/classes/HMSTrackType.js.map +1 -0
  131. package/lib/module/classes/HMSVideoCodec.js +4 -4
  132. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  133. package/lib/module/classes/HMSVideoResolution.js +14 -0
  134. package/lib/module/classes/HMSVideoResolution.js.map +1 -0
  135. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  136. package/lib/module/classes/HMSVideoTrack.js +2 -0
  137. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  138. package/lib/module/classes/HMSVideoTrackSettings.js +0 -3
  139. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  140. package/lib/module/classes/HmsView.js +10 -7
  141. package/lib/module/classes/HmsView.js.map +1 -1
  142. package/lib/module/index.js +8 -0
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/typescript/classes/HMSAudioTrack.d.ts +3 -0
  145. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +3 -0
  146. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +9 -0
  147. package/lib/typescript/classes/HMSCameraFacing.d.ts +4 -0
  148. package/lib/typescript/classes/HMSConfig.d.ts +2 -4
  149. package/lib/typescript/classes/HMSEncoder.d.ts +14 -12
  150. package/lib/typescript/classes/HMSException.d.ts +22 -0
  151. package/lib/typescript/classes/HMSLocalAudioTrack.d.ts +5 -0
  152. package/lib/typescript/classes/HMSLocalPeer.d.ts +6 -0
  153. package/lib/typescript/classes/HMSLocalVideoTrack.d.ts +4 -0
  154. package/lib/typescript/classes/HMSLogger.d.ts +11 -4
  155. package/lib/typescript/classes/HMSPeer.d.ts +2 -0
  156. package/lib/typescript/classes/HMSPeerUpdate.d.ts +1 -0
  157. package/lib/typescript/classes/HMSPermissions.d.ts +4 -0
  158. package/lib/typescript/classes/HMSRTMPConfig.d.ts +10 -0
  159. package/lib/typescript/classes/HMSRemoteAudioTrack.d.ts +4 -0
  160. package/lib/typescript/classes/HMSRemotePeer.d.ts +3 -0
  161. package/lib/typescript/classes/HMSRemoteVideoTrack.d.ts +4 -0
  162. package/lib/typescript/classes/HMSRoom.d.ts +9 -0
  163. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +9 -0
  164. package/lib/typescript/classes/HMSSDK.d.ts +40 -11
  165. package/lib/typescript/classes/HMSServerRecordingState.d.ts +9 -0
  166. package/lib/typescript/classes/HMSTrack.d.ts +6 -1
  167. package/lib/typescript/classes/HMSTrackSettings.d.ts +2 -0
  168. package/lib/typescript/classes/HMSTrackType.d.ts +4 -0
  169. package/lib/typescript/classes/HMSVideoCodec.d.ts +4 -4
  170. package/lib/typescript/classes/HMSVideoResolution.d.ts +8 -0
  171. package/lib/typescript/classes/HMSVideoSettings.d.ts +3 -3
  172. package/lib/typescript/classes/HMSVideoTrack.d.ts +5 -1
  173. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +13 -10
  174. package/lib/typescript/classes/HmsView.d.ts +2 -1
  175. package/lib/typescript/index.d.ts +8 -0
  176. package/package.json +1 -1
  177. package/src/classes/HMSAudioTrack.ts +3 -0
  178. package/src/classes/HMSAudioTrackSettings.ts +9 -1
  179. package/src/classes/HMSBrowserRecordingState.ts +11 -0
  180. package/src/classes/HMSCameraFacing.ts +4 -0
  181. package/src/classes/HMSConfig.ts +3 -7
  182. package/src/classes/HMSEncoder.ts +64 -28
  183. package/src/classes/HMSException.ts +33 -0
  184. package/src/classes/HMSHelper.ts +2 -2
  185. package/src/classes/HMSLocalAudioTrack.ts +35 -2
  186. package/src/classes/HMSLocalPeer.ts +6 -0
  187. package/src/classes/HMSLocalVideoTrack.ts +22 -2
  188. package/src/classes/HMSLogger.ts +19 -6
  189. package/src/classes/HMSPeer.ts +3 -0
  190. package/src/classes/HMSPeerUpdate.ts +1 -0
  191. package/src/classes/HMSPermissions.ts +6 -0
  192. package/src/classes/HMSRTMPConfig.ts +15 -0
  193. package/src/classes/HMSRemoteAudioTrack.ts +29 -2
  194. package/src/classes/HMSRemotePeer.ts +3 -0
  195. package/src/classes/HMSRemoteVideoTrack.ts +29 -2
  196. package/src/classes/HMSRoom.ts +12 -0
  197. package/src/classes/HMSRtmpStreamingState.ts +11 -0
  198. package/src/classes/{HMSSDK.ts → HMSSDK.tsx} +332 -98
  199. package/src/classes/HMSServerRecordingState.ts +11 -0
  200. package/src/classes/HMSTrack.ts +9 -15
  201. package/src/classes/HMSTrackSettings.ts +3 -0
  202. package/src/classes/HMSTrackType.ts +4 -0
  203. package/src/classes/HMSVideoCodec.ts +4 -4
  204. package/src/classes/HMSVideoResolution.ts +9 -0
  205. package/src/classes/HMSVideoSettings.ts +3 -3
  206. package/src/classes/HMSVideoTrack.ts +6 -1
  207. package/src/classes/HMSVideoTrackSettings.ts +13 -10
  208. package/src/classes/HmsView.tsx +4 -0
  209. package/src/index.ts +8 -0
  210. package/ios/Hmssdk.m +0 -8
  211. package/ios/Hmssdk.swift +0 -8
@@ -1,20 +1,21 @@
1
1
  package com.reactnativehmssdk
2
2
 
3
+ import android.annotation.SuppressLint
3
4
  import android.widget.FrameLayout
4
5
  import com.facebook.react.bridge.ReactContext
6
+ import live.hms.video.media.tracks.HMSTrackType
5
7
  import live.hms.video.media.tracks.HMSVideoTrack
6
- import live.hms.video.sdk.HMSSDK
7
8
  import live.hms.video.utils.SharedEglContext
8
9
  import org.webrtc.RendererCommon
9
10
  import org.webrtc.SurfaceViewRenderer
10
11
 
12
+ @SuppressLint("ViewConstructor")
11
13
  class HmsView(context: ReactContext) : FrameLayout(context) {
12
- private var surfaceView: SurfaceViewRenderer
14
+ private var surfaceView: SurfaceViewRenderer = SurfaceViewRenderer(context)
13
15
  private var videoTrack: HMSVideoTrack? = null
14
16
  private var localTrack: String? = null
15
17
 
16
18
  init {
17
- surfaceView = SurfaceViewRenderer(context)
18
19
  surfaceView.setEnableHardwareScaler(true)
19
20
  surfaceView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
20
21
  addView(surfaceView)
@@ -54,35 +55,46 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
54
55
  }
55
56
  }
56
57
 
57
- fun setData(trackId: String?, sink: Boolean?,mirror: Boolean?, hms: HMSSDK?) {
58
- if (trackId != null) {
59
- localTrack = trackId
58
+ fun setData(
59
+ id: String?,
60
+ trackId: String?,
61
+ hmsCollection: MutableMap<String, HmsSDK>,
62
+ mirror: Boolean?
63
+ ) {
64
+ var sdkId = "12345"
65
+
66
+ if (id != null) {
67
+ sdkId = id
68
+ }
69
+
70
+ val hms = hmsCollection[sdkId]?.hmsSDK
71
+
72
+ if (trackId != null && hms != null) {
60
73
  if (mirror != null) {
61
74
  surfaceView.setMirror(mirror)
62
75
  }
63
- val localTrackId = hms?.getLocalPeer()?.videoTrack?.trackId
76
+ localTrack = trackId
77
+ val localTrackId = hms.getLocalPeer()?.videoTrack?.trackId
64
78
  if (localTrackId == localTrack) {
65
- videoTrack = hms?.getLocalPeer()?.videoTrack
79
+ videoTrack = hms.getLocalPeer()?.videoTrack
66
80
  }
67
81
 
68
- val remotePeers = hms?.getRemotePeers()
69
- if (remotePeers !== null) {
70
- for (peer in remotePeers) {
71
- val videoTrackId = peer.videoTrack?.trackId
82
+ val remotePeers = hms.getRemotePeers()
83
+ for (peer in remotePeers) {
84
+ val videoTrackId = peer.videoTrack?.trackId
72
85
 
73
- val auxiliaryTracks = peer.auxiliaryTracks
74
- for (track in auxiliaryTracks) {
75
- val auxTrackId = track.trackId
76
- if (trackId == auxTrackId && track.source == "screen" && !track.isMute) {
77
- videoTrack = track as HMSVideoTrack
78
- return
79
- }
80
- }
81
- if (videoTrackId == localTrack) {
82
- videoTrack = peer.videoTrack
86
+ val auxiliaryTracks = peer.auxiliaryTracks
87
+ for (track in auxiliaryTracks) {
88
+ val auxTrackId = track.trackId
89
+ if (trackId == auxTrackId && track.type == HMSTrackType.VIDEO && !track.isMute) {
90
+ videoTrack = track as HMSVideoTrack
83
91
  return
84
92
  }
85
93
  }
94
+ if (videoTrackId == localTrack) {
95
+ videoTrack = peer.videoTrack
96
+ return
97
+ }
86
98
  }
87
99
  }
88
100
  }
@@ -4,7 +4,6 @@ import com.facebook.react.ReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.uimanager.ViewManager
7
- import java.util.*
8
7
 
9
8
  class HmssdkPackage : ReactPackage {
10
9
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
@@ -12,6 +11,6 @@ class HmssdkPackage : ReactPackage {
12
11
  }
13
12
 
14
13
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
15
- return Arrays.asList<ViewManager<*, *>>(HmssdkViewManager())
14
+ return listOf<ViewManager<*, *>>(HmssdkViewManager())
16
15
  }
17
16
  }
@@ -4,7 +4,6 @@ import com.facebook.react.bridge.ReadableMap
4
4
  import com.facebook.react.uimanager.SimpleViewManager
5
5
  import com.facebook.react.uimanager.ThemedReactContext
6
6
  import com.facebook.react.uimanager.annotations.ReactProp
7
- import live.hms.video.sdk.HMSSDK
8
7
 
9
8
  class HmssdkViewManager : SimpleViewManager<HmsView>() {
10
9
 
@@ -14,24 +13,22 @@ class HmssdkViewManager : SimpleViewManager<HmsView>() {
14
13
  return REACT_CLASS
15
14
  }
16
15
 
17
- override fun onDropViewInstance(view: HmsView) {
18
- super.onDropViewInstance(view)
19
- }
20
-
21
16
  public override fun createViewInstance(reactContext: ThemedReactContext): HmsView {
22
17
  this.reactContext = reactContext
23
- val view = HmsView(reactContext)
24
- return view
18
+ return HmsView(reactContext)
25
19
  }
26
20
 
27
21
  @ReactProp(name = "data")
28
22
  fun setData(view: HmsView, data: ReadableMap) {
29
23
  val trackId = data.getString("trackId")
30
- val sink = data.getBoolean("sink")
24
+ // val sink = data.getBoolean("sink")
25
+ val id = data.getString("id")
31
26
  val mirror = data.getBoolean("mirror")
32
27
 
33
- val hms = getHms()
34
- view.setData(trackId, sink, mirror, hms)
28
+ val hmsCollection = getHms()
29
+ if (hmsCollection != null) {
30
+ view.setData(id, trackId, hmsCollection, mirror)
31
+ }
35
32
  // do the processing here
36
33
  }
37
34
 
@@ -40,9 +37,8 @@ class HmssdkViewManager : SimpleViewManager<HmsView>() {
40
37
  view.updateScaleType(data)
41
38
  }
42
39
 
43
- private fun getHms(): HMSSDK? {
44
- val hms = reactContext?.getNativeModule(HmsModule::class.java)?.getHmsInstance()
45
- return hms
40
+ private fun getHms(): MutableMap<String, HmsSDK>? {
41
+ return reactContext?.getNativeModule(HmsModule::class.java)?.getHmsInstance()
46
42
  }
47
43
 
48
44
  companion object {
@@ -6,16 +6,19 @@ class HmsDecoder: NSObject {
6
6
 
7
7
  guard let room = hmsRoom else { return [:] }
8
8
 
9
- let id = room.roomID
10
- let name = room.name
9
+ let id = room.roomID ?? ""
10
+ let name = room.name ?? ""
11
11
  let metaData = room.metaData ?? ""
12
+ let browserRecordingState = HmsDecoder.getHMSBrowserRecordingState(hmsRoom?.browserRecordingState)
13
+ let rtmpStreamingState = HmsDecoder.getHMSRtmpStreamingState(hmsRoom?.rtmpStreamingState)
14
+ let serverRecordingState = HmsDecoder.getHMSServerRecordingState(hmsRoom?.serverRecordingState)
12
15
  var peers = [[String: Any]]()
13
16
 
14
17
  for peer in room.peers {
15
18
  peers.append(getHmsPeer(peer))
16
19
  }
17
20
 
18
- return ["id": id, "name": name, "metaData": metaData, "peers": peers]
21
+ return ["id": id, "name": name, "metaData": metaData, "peers": peers, "browserRecordingState": browserRecordingState, "rtmpHMSRtmpStreamingState": rtmpStreamingState, "serverRecordingState": serverRecordingState]
19
22
  }
20
23
 
21
24
  static func getHmsPeer (_ peer: HMSPeer) -> [String: Any] {
@@ -24,28 +27,35 @@ class HmsDecoder: NSObject {
24
27
  let name = peer.name
25
28
  let isLocal = peer.isLocal
26
29
  let customerUserID = peer.customerUserID ?? ""
27
- let customerDescription = peer.customerDescription ?? ""
30
+ let customerDescription = peer.metadata ?? ""
31
+ let metadata = peer.metadata ?? ""
28
32
  let audioTrack = getHmsAudioTrack(peer.audioTrack)
29
33
  let videoTrack = getHmsVideoTrack(peer.videoTrack)
30
34
  let role = getHmsRole(peer.role)
31
35
 
32
- var auxiliaryTracks = [[String: Any]]()
33
-
34
- for track in peer.auxiliaryTracks ?? [] {
35
- auxiliaryTracks.append(getHmsTrack(track))
36
- }
36
+ let auxiliaryTracks = getAllTracks(peer.auxiliaryTracks ?? [] )
37
37
 
38
38
  return ["peerID": peerID,
39
39
  "name": name,
40
40
  "isLocal": isLocal,
41
41
  "customerUserID": customerUserID,
42
42
  "customerDescription": customerDescription,
43
+ "metadata": metadata,
43
44
  "audioTrack": audioTrack,
44
45
  "videoTrack": videoTrack,
45
46
  "auxiliaryTracks": auxiliaryTracks,
46
47
  "role": role]
47
48
  }
48
49
 
50
+ static func getAllTracks (_ tracks: [HMSTrack]) -> [[String: Any]] {
51
+ var auxiliaryTracks = [[String: Any]]()
52
+
53
+ for track in tracks {
54
+ auxiliaryTracks.append(getHmsTrack(track))
55
+ }
56
+ return auxiliaryTracks
57
+ }
58
+
49
59
  static func getHmsTrack (_ track: HMSTrack?) -> [String: Any] {
50
60
 
51
61
  guard let hmsTrack = track else { return [:] }
@@ -54,8 +64,9 @@ class HmsDecoder: NSObject {
54
64
  let source = hmsTrack.source
55
65
  let trackDescription = hmsTrack.trackDescription
56
66
  let isMute = hmsTrack.isMute()
67
+ let type = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
57
68
 
58
- return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute]
69
+ return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "type": type, "kind": type]
59
70
  }
60
71
 
61
72
  static func getHmsAudioTrack (_ hmsAudioTrack: HMSAudioTrack?) -> [String: Any] {
@@ -66,8 +77,9 @@ class HmsDecoder: NSObject {
66
77
  let source: String = hmsTrack.source
67
78
  let trackDescription: String = hmsTrack.trackDescription
68
79
  let isMute: Bool = hmsTrack.isMute()
80
+ let kind: String = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
69
81
 
70
- return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute]
82
+ return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "type": kind, "kind": kind]
71
83
  }
72
84
 
73
85
  static func getHmsVideoTrack (_ hmsVideoTrack: HMSVideoTrack?) -> [String: Any] {
@@ -78,8 +90,10 @@ class HmsDecoder: NSObject {
78
90
  let source = hmsTrack.source
79
91
  let trackDescription = hmsTrack.trackDescription
80
92
  let isMute = hmsTrack.isMute()
93
+ let isDegraded = hmsTrack.isDegraded()
94
+ let kind: String = HmsHelper.getHmsTrackType(hmsTrack.kind) ?? ""
81
95
 
82
- return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute]
96
+ return ["trackId": trackId, "source": source, "trackDescription": trackDescription, "isMute": isMute, "isDegraded": isDegraded, "type": kind, "kind": kind]
83
97
  }
84
98
 
85
99
  static func getHmsLocalPeer(_ hmsLocalPeer: HMSLocalPeer?) -> [String: Any] {
@@ -90,7 +104,8 @@ class HmsDecoder: NSObject {
90
104
  let name = peer.name
91
105
  let isLocal = peer.isLocal
92
106
  let customerUserID = peer.customerUserID ?? ""
93
- let customerDescription = peer.customerDescription ?? ""
107
+ let customerDescription = peer.metadata ?? ""
108
+ let metadata = peer.metadata ?? ""
94
109
  let audioTrack = getHmsAudioTrack(peer.audioTrack)
95
110
  let videoTrack = getHmsVideoTrack(peer.videoTrack)
96
111
  let role = getHmsRole(peer.role)
@@ -105,15 +120,17 @@ class HmsDecoder: NSObject {
105
120
 
106
121
  var localAudioTrackData = [String: Any]()
107
122
  if let localAudio = localAudioTrack {
108
- localAudioTrackData = ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudioTrack?.isMute() ?? false]
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]
109
125
  }
110
126
 
111
127
  var localVideoTrackData = [String: Any]()
112
128
  if let localVideo = localVideoTrack {
113
- localVideoTrackData = ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute":localAudioTrack?.isMute() ?? false]
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]
114
131
  }
115
132
 
116
- return ["peerID": peerID, "name": name, "isLocal": isLocal, "customerUserID": customerUserID, "customerDescription": customerDescription, "audioTrack": audioTrack, "videoTrack": videoTrack, "auxiliaryTracks": auxiliaryTracks, "localAudioTrackData": localAudioTrackData, "localVideoTrackData": localVideoTrackData, "role": role]
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]
117
134
  }
118
135
 
119
136
  static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any] {
@@ -130,11 +147,11 @@ class HmsDecoder: NSObject {
130
147
 
131
148
  guard let settings = hmsVideoTrackSettings else { return [:] }
132
149
 
133
- let codec = settings.codec.rawValue
134
- let resolution = settings.resolution
150
+ let codec = getHmsVideoTrackCodec(settings.codec)
151
+ let resolution = getHmsVideoResolution(settings.resolution)
135
152
  let maxBitrate = settings.maxBitrate
136
153
  let maxFrameRate = settings.maxFrameRate
137
- let cameraFacing = settings.cameraFacing.rawValue
154
+ let cameraFacing = getHmsVideoTrackCameraFacing(settings.cameraFacing)
138
155
  let trackDescription = settings.trackDescription ?? ""
139
156
 
140
157
  var simulcastSettingsData = [[String: Any]]()
@@ -151,6 +168,34 @@ class HmsDecoder: NSObject {
151
168
  return ["codec": codec, "resolution": resolution, "maxBitrate": maxBitrate, "maxFrameRate": maxFrameRate, "cameraFacing": cameraFacing, "trackDescription": trackDescription, "simulcastSettings": simulcastSettingsData]
152
169
  }
153
170
 
171
+ static func getHmsVideoTrackCodec(_ codec : HMSCodec) -> String {
172
+ switch(codec) {
173
+ case HMSCodec.VP8:
174
+ return "VP8"
175
+ case HMSCodec.H264:
176
+ return "H264"
177
+ default:
178
+ return "H264"
179
+ }
180
+ }
181
+
182
+ static func getHmsVideoTrackCameraFacing(_ cameraFacing : HMSCameraFacing) -> String {
183
+ switch(cameraFacing) {
184
+ case HMSCameraFacing.front:
185
+ return "FRONT"
186
+ case HMSCameraFacing.back:
187
+ return "BACK"
188
+ default:
189
+ return "FRONT"
190
+ }
191
+ }
192
+
193
+ static func getHmsVideoResolution(_ hmsVideoResolution: HMSVideoResolution?) -> [String: Any] {
194
+ guard let resolution = hmsVideoResolution else { return [:] }
195
+
196
+ return ["width": resolution.width, "height": resolution.height]
197
+ }
198
+
154
199
  static func getHmsRemotePeers (_ remotePeers: [HMSRemotePeer]?) -> [[String: Any]] {
155
200
  guard let remotePeers = remotePeers else { return [[:]] }
156
201
 
@@ -169,7 +214,8 @@ class HmsDecoder: NSObject {
169
214
  let name = hmsRemotePeer.name
170
215
  let isLocal = hmsRemotePeer.isLocal
171
216
  let customerUserID = hmsRemotePeer.customerUserID ?? ""
172
- let customerDescription = hmsRemotePeer.customerDescription ?? ""
217
+ let customerDescription = hmsRemotePeer.metadata ?? ""
218
+ let metadata = hmsRemotePeer.metadata ?? ""
173
219
  let audioTrack = getHmsAudioTrack(hmsRemotePeer.audioTrack)
174
220
  let videoTrack = getHmsVideoTrack(hmsRemotePeer.videoTrack)
175
221
  let role = getHmsRole(hmsRemotePeer.role)
@@ -185,15 +231,17 @@ class HmsDecoder: NSObject {
185
231
 
186
232
  var remoteAudioTrackData = [String: Any]()
187
233
  if let remoteAudio = remoteAudioTrack {
188
- remoteAudioTrackData = ["trackId": remoteAudio.trackId, "source": remoteAudio.source, "trackDescription": remoteAudio.trackDescription, "playbackAllowed": remoteAudio.isPlaybackAllowed(), "isMute": remoteAudio.isMute()]
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]
189
236
  }
190
237
 
191
238
  var remoteVideoTrackData = [String: Any]()
192
239
  if let remoteVideo = remoteVideoTrack {
193
- remoteVideoTrackData = ["trackId": remoteVideo.trackId, "source": remoteVideo.source, "trackDescription": remoteVideo.trackDescription, "layer": remoteVideo.layer.rawValue, "playbackAllowed": remoteVideo.isPlaybackAllowed(), "isMute": remoteVideo.isMute()]
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]
194
242
  }
195
243
 
196
- return ["peerID": peerID, "name": name, "isLocal": isLocal, "customerUserID": customerUserID, "customerDescription": customerDescription, "audioTrack": audioTrack, "videoTrack": videoTrack, "auxiliaryTracks": auxiliaryTracks, "remoteAudioTrackData": remoteAudioTrackData, "remoteVideoTrackData": remoteVideoTrackData, "role": role]
244
+ 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]
197
245
  }
198
246
 
199
247
  static func getPreviewTracks(_ tracks: [HMSTrack]) -> [String: Any] {
@@ -202,12 +250,14 @@ class HmsDecoder: NSObject {
202
250
 
203
251
  for track in tracks {
204
252
  if let localVideo = track as? HMSLocalVideoTrack {
205
- let localVideoTrackData: [String : Any] = ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute()]
253
+ 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]
206
255
  hmsTracks["videoTrack"] = localVideoTrackData
207
256
  }
208
257
 
209
258
  if let localAudio = track as? HMSLocalAudioTrack {
210
- let localAudioTrackData: [String : Any] = ["trackId": localAudio.trackId, "source": localAudio.source, "trackDescription": localAudio.trackDescription, "settings": getHmsAudioTrackSettings(localAudio.settings), "isMute": localAudio.isMute()]
259
+ 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]
211
261
  hmsTracks["audioTrack"] = localAudioTrackData
212
262
  }
213
263
  }
@@ -265,7 +315,12 @@ class HmsDecoder: NSObject {
265
315
  let screen = getHmsVideoSettings(publishSettings.screen)
266
316
  let videoSimulcastLayers = getHmsSimulcastLayers(publishSettings.videoSimulcastLayers)
267
317
  let screenSimulcastLayers = getHmsSimulcastLayers(publishSettings.screenSimulcastLayers)
268
- let allowed = publishSettings.allowed ?? []
318
+ var allowed = publishSettings.allowed ?? []
319
+ if((publishSettings.allowed) != nil) {
320
+ allowed = getWriteableArray(publishSettings.allowed)
321
+ }else {
322
+ allowed = []
323
+ }
269
324
 
270
325
  return ["audio": audio,
271
326
  "video": video,
@@ -274,6 +329,16 @@ class HmsDecoder: NSObject {
274
329
  "screenSimulcastLayers": screenSimulcastLayers,
275
330
  "allowed": allowed]
276
331
  }
332
+
333
+ static func getWriteableArray(_ array: [String]?) -> [String] {
334
+ var decodedArray = [String]()
335
+ if let extractedArray = array {
336
+ for value in extractedArray {
337
+ decodedArray.append(value)
338
+ }
339
+ }
340
+ return decodedArray
341
+ }
277
342
 
278
343
  static func getHmsAudioSettings(_ audioSettings: HMSAudioSettings) -> [String: Any] {
279
344
  let bitRate = audioSettings.bitRate
@@ -325,18 +390,88 @@ class HmsDecoder: NSObject {
325
390
  return layersSettingsPolicy
326
391
  }
327
392
 
328
- static func getHmsRoleChangeRequest(_ roleChangeRequest: HMSRoleChangeRequest) -> [String: Any] {
393
+ static func getHmsRoleChangeRequest(_ roleChangeRequest: HMSRoleChangeRequest, _ id: String?) -> [String: Any] {
329
394
 
330
- let requestedBy = getHmsPeer(roleChangeRequest.requestedBy)
331
- let suggestedRole = getHmsRole(roleChangeRequest.suggestedRole)
395
+ if let sdkId = id {
396
+ var requestedBy: [String: Any]?
397
+ if let peer = roleChangeRequest.requestedBy {
398
+ requestedBy = getHmsPeer(peer)
399
+ }
400
+
401
+ let suggestedRole = getHmsRole(roleChangeRequest.suggestedRole)
402
+
403
+ var request = ["suggestedRole": suggestedRole, "id": sdkId] as [String : Any]
404
+ if let requestedBy = requestedBy {
405
+ request["requestedBy"] = requestedBy
406
+ }
407
+ return request
408
+ }
332
409
 
333
- return ["requestedBy": requestedBy, "suggestedRole": suggestedRole]
410
+ return [:]
334
411
  }
335
412
 
336
- static func getHmsChangeTrackStateRequest(_ changeTrackStateRequest: HMSChangeTrackStateRequest) -> [String: Any] {
337
- let requestedBy = getHmsPeer(changeTrackStateRequest.requestedBy)
413
+ static func getHmsChangeTrackStateRequest(_ changeTrackStateRequest: HMSChangeTrackStateRequest, _ id: String) -> [String: Any] {
414
+ var requestedBy: [String: Any]?
415
+ if let peer = changeTrackStateRequest.requestedBy {
416
+ requestedBy = getHmsPeer(peer)
417
+ }
338
418
  let trackType = changeTrackStateRequest.track.kind == .video ? "video" : "audio"
339
419
 
340
- return ["requestedBy": requestedBy, "trackType": trackType]
420
+ var request = ["trackType": trackType, "id": id] as [String: Any]
421
+ if let requestedBy = requestedBy {
422
+ request["requestedBy"] = requestedBy
423
+ }
424
+
425
+ return request
426
+ }
427
+
428
+ static func getError(_ errorObj: HMSError?) -> [String: Any] {
429
+ if let error = errorObj {
430
+ let code = error.code
431
+ let description = error.description
432
+ let localizedDescription = error.localizedDescription
433
+ let debugDescription = error.debugDescription
434
+ let message = error.message
435
+ let name = error.id
436
+ let id = error.id
437
+ let action = error.action
438
+
439
+ return ["code": code, "description": description, "localizedDescription":localizedDescription, "debugDescription":debugDescription, "message":message, "name":name, "action":action, "id": id]
440
+ } else {
441
+ return [:]
442
+ }
443
+ }
444
+
445
+ static func getHMSBrowserRecordingState(_ data: HMSBrowserRecordingState?) -> [String: Any] {
446
+ if let recordingState = data {
447
+ let running = recordingState.running
448
+ let error = HmsDecoder.getError(recordingState.error)
449
+
450
+ return ["running": running, "error": error]
451
+ } else {
452
+ return [:]
453
+ }
454
+ }
455
+
456
+ static func getHMSRtmpStreamingState(_ data: HMSRTMPStreamingState?) -> [String: Any] {
457
+ if let streamingState = data {
458
+ let running = streamingState.running
459
+ let error = HmsDecoder.getError(streamingState.error)
460
+
461
+ return ["running": running, "error": error]
462
+ } else {
463
+ return [:]
464
+ }
465
+ }
466
+
467
+ static func getHMSServerRecordingState(_ data: HMSServerRecordingState?) -> [String: Any] {
468
+ if let recordingState = data {
469
+ let running = recordingState.running
470
+ let error = HmsDecoder.getError(recordingState.error)
471
+
472
+ return ["running": running, "error": error]
473
+ } else {
474
+ return [:]
475
+ }
341
476
  }
342
477
  }
@@ -3,7 +3,17 @@ import Foundation
3
3
 
4
4
  class HmsHelper: NSObject {
5
5
 
6
- static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?) -> HMSPeer? {
6
+ static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?, localPeer: HMSLocalPeer?) -> HMSPeer? {
7
+
8
+ guard let peerID = peerID, let peers = remotePeers else { return nil }
9
+ if(peerID == localPeer?.peerID) {
10
+ return localPeer
11
+ }
12
+ return peers.first { $0.peerID == peerID }
13
+ }
14
+
15
+
16
+ static func getRemotePeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?) -> HMSPeer? {
7
17
 
8
18
  guard let peerID = peerID, let peers = remotePeers else { return nil }
9
19
 
@@ -53,6 +63,22 @@ class HmsHelper: NSObject {
53
63
  return nil
54
64
  }
55
65
 
66
+ static func getRemoteAudioAuxiliaryTrackFromTrackId(_ trackID: String?, _ remotePeers: [HMSRemotePeer]?) -> HMSRemoteAudioTrack? {
67
+ for peer in remotePeers ?? [] {
68
+ if peer.audioTrack?.trackId == trackID {
69
+ return peer.audioTrack as? HMSRemoteAudioTrack
70
+ }
71
+ let auxTracks = peer.auxiliaryTracks
72
+
73
+ for track in auxTracks ?? [] {
74
+ if (track.kind == HMSTrackKind.audio && track.trackId == trackID) {
75
+ return track as? HMSRemoteAudioTrack
76
+ }
77
+ }
78
+ }
79
+ return nil
80
+ }
81
+
56
82
  static func getRemoteVideoTrackFromTrackId(_ trackID: String?, _ remotePeers: [HMSRemotePeer]?) -> HMSRemoteVideoTrack? {
57
83
  for peer in remotePeers ?? [] {
58
84
  if peer.videoTrack?.trackId == trackID {
@@ -62,6 +88,15 @@ class HmsHelper: NSObject {
62
88
  return nil
63
89
  }
64
90
 
91
+ static func getHmsTrackType(_ kind: HMSTrackKind?) -> String? {
92
+ if(kind == HMSTrackKind.video){
93
+ return "VIDEO"
94
+ }else if(kind == HMSTrackKind.audio){
95
+ return "AUDIO"
96
+ }
97
+ return nil
98
+ }
99
+
65
100
  static func getTrackFromTrackId(_ trackID: String?, _ remotePeers: [HMSRemotePeer]?) -> HMSTrack? {
66
101
 
67
102
  for peer in remotePeers ?? [] {
@@ -80,4 +115,89 @@ class HmsHelper: NSObject {
80
115
 
81
116
  return nil
82
117
  }
118
+
119
+ static func getHms(_ credentials: NSDictionary, _ hmsCollection: [String: HmsSDK]) -> HmsSDK? {
120
+ guard let id = credentials.value(forKey: "id") as? String,
121
+ let hms = hmsCollection[id]
122
+ else {
123
+ return nil
124
+ }
125
+ return hms
126
+ }
127
+
128
+ static func getLocalVideoSettings(_ settings: NSDictionary?) -> HMSVideoTrackSettings? {
129
+ guard let data = settings,
130
+ let codec = data.value(forKey: "codec") as? String,
131
+ let resolution = data.value(forKey: "resolution") as? [String : Double]?,
132
+ let maxBitrate = data.value(forKey: "maxBitrate") as? Int,
133
+ let maxFrameRate = data.value(forKey: "maxFrameRate") as? Int,
134
+ let cameraFacing = data.value(forKey: "cameraFacing") as? String,
135
+ let trackDescription = data.value(forKey: "trackDescription") as? String?,
136
+ let resolutionObj = HmsHelper.getVideoResolution(resolution ?? [:])
137
+ else {
138
+ return nil
139
+ }
140
+ let codecEncoded = HmsHelper.getVideoCodec(codec)
141
+ let cameraFacingEncoded = HmsHelper.getCameraFacing(cameraFacing)
142
+ let hmsTrackSettings = HMSVideoTrackSettings(codec: codecEncoded, resolution: resolutionObj, maxBitrate: maxBitrate, maxFrameRate: maxFrameRate, cameraFacing: cameraFacingEncoded, trackDescription: trackDescription)
143
+ return hmsTrackSettings
144
+ }
145
+
146
+ static func getLocalAudioSettings(_ settings: NSDictionary?) -> HMSAudioTrackSettings? {
147
+ guard let data = settings,
148
+ let maxBitrate = data.value(forKey: "maxBitrate") as? Int,
149
+ let trackDescription = data.value(forKey: "trackDescription") as? String?
150
+ else {
151
+ return nil
152
+ }
153
+ let hmsTrackSettings = HMSAudioTrackSettings(maxBitrate: maxBitrate, trackDescription: trackDescription)
154
+ return hmsTrackSettings
155
+ }
156
+
157
+ static func getVideoResolution(_ data: [String : Double]) -> HMSVideoResolution? {
158
+ guard let width = data["width"],
159
+ let height = data["height"]
160
+ else {
161
+ return nil
162
+ }
163
+
164
+ return HMSVideoResolution.init(width: width, height: height)
165
+ }
166
+
167
+ static func getVideoCodec(_ codecString: String?) -> HMSCodec {
168
+ switch codecString {
169
+ case "H264":
170
+ return HMSCodec.H264
171
+ case "VP8":
172
+ return HMSCodec.VP8
173
+ default:
174
+ return HMSCodec.H264
175
+ }
176
+ }
177
+
178
+ static func getCameraFacing(_ cameraFacing: String) -> HMSCameraFacing {
179
+ switch cameraFacing {
180
+ case "FRONT":
181
+ return HMSCameraFacing.front
182
+ case "BACK":
183
+ return HMSCameraFacing.back
184
+ default:
185
+ return HMSCameraFacing.front
186
+ }
187
+ }
188
+
189
+ static func getRtmpUrls(_ strings: [String]?) -> [URL]? {
190
+ if let extractedStrings = strings {
191
+ var arr: [URL] = []
192
+ for urlString in extractedStrings {
193
+ let urlInstance = URL(string: urlString)
194
+ if let urlExtracted = urlInstance {
195
+ arr.append(urlExtracted)
196
+ }
197
+ }
198
+ return arr
199
+ } else {
200
+ return nil
201
+ }
202
+ }
83
203
  }