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

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 (212) hide show
  1. package/README.md +1 -2
  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/build.gradle +1 -1
  10. package/android/src/main/java/com/reactnativehmssdk/{HmsDecoder.kt → HMSDecoder.kt} +38 -34
  11. package/android/src/main/java/com/reactnativehmssdk/{HmsHelper.kt → HMSHelper.kt} +113 -4
  12. package/android/src/main/java/com/reactnativehmssdk/{HmsModule.kt → HMSManager.kt} +51 -41
  13. package/android/src/main/java/com/reactnativehmssdk/{HmsSDK.kt → HMSRNSDK.kt} +170 -157
  14. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +90 -0
  15. package/android/src/main/java/com/reactnativehmssdk/{HmsView.kt → HMSView.kt} +18 -3
  16. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +17 -13
  17. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +2 -2
  18. package/ios/{HmsDecoder.swift → HMSDecoder.swift} +26 -25
  19. package/ios/{HmsHelper.swift → HMSHelper.swift} +13 -7
  20. package/ios/{HmsManager.m → HMSManager.m} +2 -1
  21. package/ios/{HmsManager.swift → HMSManager.swift} +46 -38
  22. package/ios/{HmsSDK.swift → HMSRNSDK.swift} +127 -127
  23. package/ios/{HmsView.m → HMSView.m} +1 -1
  24. package/ios/{HmsView.swift → HMSView.swift} +9 -20
  25. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  26. package/lib/commonjs/classes/HMSAudioSettings.js.map +1 -1
  27. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  28. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  29. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  30. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  31. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  32. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  33. package/lib/commonjs/classes/HMSEncoder.js +16 -7
  34. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  35. package/lib/commonjs/classes/HMSException.js.map +1 -1
  36. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
  37. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  38. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -1
  39. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -1
  40. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -1
  41. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  42. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  43. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -1
  44. package/lib/commonjs/classes/HMSLocalAudioTrack.js +6 -8
  45. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  46. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  47. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
  48. package/lib/commonjs/classes/HMSLocalVideoTrack.js +6 -8
  49. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  50. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  51. package/lib/commonjs/classes/HMSLogger.js +19 -1
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSMessage.js +1 -1
  54. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -1
  56. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  57. package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -1
  58. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  59. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  60. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  61. package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
  62. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -1
  63. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -1
  64. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  65. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -1
  66. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +6 -8
  67. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  68. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  69. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -1
  70. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +6 -8
  71. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  72. package/lib/commonjs/classes/HMSRole.js.map +1 -1
  73. package/lib/commonjs/classes/HMSRoleChangeRequest.js.map +1 -1
  74. package/lib/commonjs/classes/HMSRoom.js +3 -0
  75. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  76. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -3
  77. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  78. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  79. package/lib/commonjs/classes/HMSSDK.js +118 -235
  80. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  81. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  82. package/lib/commonjs/classes/HMSSimulcastLayerSettings.js.map +1 -1
  83. package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
  84. package/lib/commonjs/classes/HMSSpeaker.js.map +1 -1
  85. package/lib/commonjs/classes/HMSSpeakerUpdate.js.map +1 -1
  86. package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
  87. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  88. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  89. package/lib/commonjs/classes/HMSTrackSource.js +15 -0
  90. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -0
  91. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  92. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  93. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  94. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  95. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
  96. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  97. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  98. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  99. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  100. package/lib/commonjs/classes/HmsView.js +69 -17
  101. package/lib/commonjs/classes/HmsView.js.map +1 -1
  102. package/lib/commonjs/index.js +14 -14
  103. package/lib/commonjs/index.js.map +1 -1
  104. package/lib/module/classes/HMSAudioCodec.js.map +1 -1
  105. package/lib/module/classes/HMSAudioSettings.js.map +1 -1
  106. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  107. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  108. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  109. package/lib/module/classes/HMSCameraFacing.js.map +1 -1
  110. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  111. package/lib/module/classes/HMSConfig.js.map +1 -1
  112. package/lib/module/classes/HMSEncoder.js +6 -1
  113. package/lib/module/classes/HMSEncoder.js.map +1 -1
  114. package/lib/module/classes/HMSException.js.map +1 -1
  115. package/lib/module/classes/HMSHLSConfig.js.map +1 -1
  116. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  117. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -1
  118. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -1
  119. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
  120. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  121. package/lib/module/classes/HMSHelper.js.map +1 -1
  122. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -1
  123. package/lib/module/classes/HMSLocalAudioTrack.js +6 -6
  124. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  125. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  126. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
  127. package/lib/module/classes/HMSLocalVideoTrack.js +6 -6
  128. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  129. package/lib/module/classes/HMSLogLevel.js.map +1 -1
  130. package/lib/module/classes/HMSLogger.js +10 -0
  131. package/lib/module/classes/HMSLogger.js.map +1 -1
  132. package/lib/module/classes/HMSMessage.js +1 -1
  133. package/lib/module/classes/HMSMessage.js.map +1 -1
  134. package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
  135. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -1
  136. package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
  137. package/lib/module/classes/HMSPeer.js.map +1 -1
  138. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  139. package/lib/module/classes/HMSPermissions.js.map +1 -1
  140. package/lib/module/classes/HMSPublishSettings.js.map +1 -1
  141. package/lib/module/classes/HMSRTCStats.js.map +1 -1
  142. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -1
  143. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  144. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -1
  145. package/lib/module/classes/HMSRemoteAudioTrack.js +6 -6
  146. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  147. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  148. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -1
  149. package/lib/module/classes/HMSRemoteVideoTrack.js +6 -6
  150. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  151. package/lib/module/classes/HMSRole.js.map +1 -1
  152. package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
  153. package/lib/module/classes/HMSRoom.js +3 -0
  154. package/lib/module/classes/HMSRoom.js.map +1 -1
  155. package/lib/module/classes/HMSRoomUpdate.js +1 -3
  156. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  157. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  158. package/lib/module/classes/HMSSDK.js +118 -235
  159. package/lib/module/classes/HMSSDK.js.map +1 -1
  160. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  161. package/lib/module/classes/HMSSimulcastLayerSettings.js.map +1 -1
  162. package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
  163. package/lib/module/classes/HMSSpeaker.js.map +1 -1
  164. package/lib/module/classes/HMSSpeakerUpdate.js.map +1 -1
  165. package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
  166. package/lib/module/classes/HMSTrack.js.map +1 -1
  167. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  168. package/lib/module/classes/HMSTrackSource.js +8 -0
  169. package/lib/module/classes/HMSTrackSource.js.map +1 -0
  170. package/lib/module/classes/HMSTrackType.js.map +1 -1
  171. package/lib/module/classes/HMSTrackUpdate.js.map +1 -1
  172. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  173. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  174. package/lib/module/classes/HMSVideoResolution.js.map +1 -1
  175. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  176. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  177. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  178. package/lib/module/classes/HMSVideoViewMode.js.map +1 -1
  179. package/lib/module/classes/HmsView.js +67 -17
  180. package/lib/module/classes/HmsView.js.map +1 -1
  181. package/lib/module/index.js +1 -1
  182. package/lib/module/index.js.map +1 -1
  183. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +2 -2
  184. package/lib/typescript/classes/HMSEncoder.d.ts +5 -1
  185. package/lib/typescript/classes/HMSLogger.d.ts +3 -0
  186. package/lib/typescript/classes/HMSRoom.d.ts +2 -0
  187. package/lib/typescript/classes/HMSRoomUpdate.d.ts +1 -3
  188. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +2 -2
  189. package/lib/typescript/classes/HMSSDK.d.ts +9 -11
  190. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -2
  191. package/lib/typescript/classes/HMSTrackSource.d.ts +5 -0
  192. package/lib/typescript/classes/HmsView.d.ts +7 -7
  193. package/lib/typescript/index.d.ts +1 -1
  194. package/package.json +2 -2
  195. package/react-native-hms.podspec +2 -2
  196. package/src/classes/HMSBrowserRecordingState.ts +2 -2
  197. package/src/classes/HMSEncoder.ts +6 -9
  198. package/src/classes/HMSLocalAudioTrack.ts +6 -6
  199. package/src/classes/HMSLocalVideoTrack.ts +6 -6
  200. package/src/classes/HMSLogger.ts +11 -0
  201. package/src/classes/HMSMessage.ts +1 -1
  202. package/src/classes/HMSRemoteAudioTrack.ts +6 -6
  203. package/src/classes/HMSRemoteVideoTrack.ts +6 -6
  204. package/src/classes/HMSRoom.ts +3 -0
  205. package/src/classes/HMSRoomUpdate.ts +1 -3
  206. package/src/classes/HMSRtmpStreamingState.ts +2 -2
  207. package/src/classes/HMSSDK.tsx +57 -63
  208. package/src/classes/HMSServerRecordingState.ts +2 -2
  209. package/src/classes/HMSTrackSource.ts +5 -0
  210. package/src/classes/HmsView.tsx +102 -44
  211. package/src/index.ts +1 -1
  212. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +0 -54
package/README.md CHANGED
@@ -192,10 +192,9 @@ const styles = StyleSheet.create({
192
192
  });
193
193
 
194
194
  // trackId can be acquired from the method explained above
195
- // sink is passed false video would be removed. It is a ios only prop, for android it is handled by the package itself.
196
195
  // scaleType can be selected from HMSVideoViewMode as required
197
196
  // mirror can be passed as true to flip videos horizontally
198
- <HmsView sink={true} style={styles.hmsView} trackId={trackId} mirror={true} scaleType={HMSVideoViewMode.ASPECT_FIT} />
197
+ <HmsView style={styles.hmsView} trackId={trackId} mirror={true} scaleType={HMSVideoViewMode.ASPECT_FIT} />
199
198
 
200
199
  ...
201
200
  ```
@@ -63,7 +63,7 @@ dependencies {
63
63
  //noinspection GradleDynamicVersion
64
64
  implementation "com.facebook.react:react-native:+"
65
65
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // From node_modules
66
- implementation 'com.github.100mslive.android-sdk:lib:2.3.4'
66
+ implementation 'com.github.100mslive.android-sdk:lib:2.3.9'
67
67
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
68
68
  implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
69
69
  implementation 'androidx.appcompat:appcompat:1.3.1'
@@ -11,12 +11,13 @@ import live.hms.video.sdk.models.*
11
11
  import live.hms.video.sdk.models.role.*
12
12
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
13
13
 
14
- object HmsDecoder {
14
+ object HMSDecoder {
15
15
 
16
16
  fun getHmsRoom(hmsRoom: HMSRoom?): WritableMap {
17
17
  val room: WritableMap = Arguments.createMap()
18
18
  if (hmsRoom != null) {
19
19
  room.putString("id", hmsRoom.roomId)
20
+ room.putString("sessionId", hmsRoom.sessionId)
20
21
  room.putString("name", hmsRoom.name)
21
22
  room.putString("metaData", null)
22
23
  room.putString("startedAt", hmsRoom.startedAt.toString())
@@ -33,6 +34,7 @@ object HmsDecoder {
33
34
  this.getHMSServerRecordingState(hmsRoom.serverRecordingState)
34
35
  )
35
36
  room.putMap("hlsStreamingState", this.getHMSHlsStreamingState(hmsRoom.hlsStreamingState))
37
+ room.putMap("hlsRecordingState", this.getHMSHlsRecordingState(hmsRoom.hlsRecordingState))
36
38
  room.putMap("localPeer", this.getHmsLocalPeer(hmsRoom.localPeer))
37
39
  room.putArray("peers", this.getAllPeers(hmsRoom.peerList))
38
40
  room.putInt("peerCount", hmsRoom.peerCount)
@@ -354,37 +356,18 @@ object HmsDecoder {
354
356
  return changeTrackStateRequest
355
357
  }
356
358
 
357
- fun getError(error: HMSException): WritableMap {
358
- val decodedError: WritableMap = Arguments.createMap()
359
-
360
- decodedError.putInt("code", error.code)
361
- decodedError.putString("localizedDescription", error.localizedMessage)
362
- decodedError.putString("description", error.description)
363
- decodedError.putString("message", error.message)
364
- decodedError.putString("name", error.name)
365
- decodedError.putString("action", error.action)
366
-
367
- return decodedError
368
- }
369
-
370
- private fun getCustomError(message: String?, code: Int?): WritableMap {
371
- val decodedError: WritableMap = Arguments.createMap()
372
- var customCode = 101
373
- var customMessage = "SOMETHING WENT WRONG"
374
- if (code !== null) {
375
- customCode = code.toInt()
359
+ fun getError(error: HMSException?): WritableMap? {
360
+ if (error !== null) {
361
+ val decodedError: WritableMap = Arguments.createMap()
362
+ decodedError.putInt("code", error.code)
363
+ decodedError.putString("localizedDescription", error.localizedMessage)
364
+ decodedError.putString("description", error.description)
365
+ decodedError.putString("message", error.message)
366
+ decodedError.putString("name", error.name)
367
+ decodedError.putString("action", error.action)
368
+ return decodedError
376
369
  }
377
- if (message !== null) {
378
- customMessage = message
379
- }
380
- decodedError.putInt("code", customCode)
381
- decodedError.putString("localizedDescription", customMessage)
382
- decodedError.putString("description", customMessage)
383
- decodedError.putString("message", customMessage)
384
- decodedError.putInt("name", customCode)
385
- decodedError.putInt("action", customCode)
386
-
387
- return decodedError
370
+ return null
388
371
  }
389
372
 
390
373
  private fun getHMSBrowserRecordingState(data: HMSBrowserRecordingState?): ReadableMap {
@@ -394,7 +377,7 @@ object HmsDecoder {
394
377
  input.putString("startedAt", data.startedAt.toString())
395
378
  input.putString("stoppedAt", data.stoppedAt.toString())
396
379
  input.putBoolean("running", data.running)
397
- input.putMap("error", this.getCustomError(data.error?.message, data.error?.code))
380
+ input.putMap("error", this.getError(data.error))
398
381
  }
399
382
  return input
400
383
  }
@@ -405,7 +388,7 @@ object HmsDecoder {
405
388
  input.putBoolean("running", data.running)
406
389
  input.putString("startedAt", data.startedAt.toString())
407
390
  input.putString("stoppedAt", data.stoppedAt.toString())
408
- input.putMap("error", this.getCustomError(data.error?.message, data.error?.code))
391
+ input.putMap("error", this.getError(data.error))
409
392
  }
410
393
  return input
411
394
  }
@@ -415,7 +398,7 @@ object HmsDecoder {
415
398
  if (data !== null) {
416
399
  input.putBoolean("running", data.running)
417
400
  input.putString("startedAt", data.startedAt.toString())
418
- input.putMap("error", data.error?.let { this.getError(it) })
401
+ input.putMap("error", this.getError(data.error))
419
402
  }
420
403
  return input
421
404
  }
@@ -429,6 +412,27 @@ object HmsDecoder {
429
412
  return input
430
413
  }
431
414
 
415
+ private fun getHMSHlsRecordingState(data: HmsHlsRecordingState?): ReadableMap {
416
+ val input = Arguments.createMap()
417
+ if (data !== null) {
418
+ data.running?.let { input.putBoolean("running", it) }
419
+ input.putString("startedAt", data.startedAt.toString())
420
+ // input.putMap("hlsRecordingConfig", this.getHMSHlsRecordingConfig(data.hlsRecordingConfig))
421
+ data.hlsRecordingConfig?.let { input.putBoolean("singleFilePerLayer", it.singleFilePerLayer) }
422
+ data.hlsRecordingConfig?.let { input.putBoolean("videoOnDemand", it.videoOnDemand) }
423
+ }
424
+ return input
425
+ }
426
+
427
+ // private fun getHMSHlsRecordingConfig(data: HMSHlsRecordingConfig?): ReadableMap {
428
+ // val input = Arguments.createMap()
429
+ // if (data !== null) {
430
+ // input.putBoolean("singleFilePerLayer", data.singleFilePerLayer)
431
+ // input.putBoolean("videoOnDemand", data.videoOnDemand)
432
+ // }
433
+ // return input
434
+ // }
435
+
432
436
  private fun getHMSHLSVariant(data: ArrayList<HMSHLSVariant>?): ReadableArray {
433
437
  val variants = Arguments.createArray()
434
438
  if (data !== null) {
@@ -1,19 +1,35 @@
1
1
  package com.reactnativehmssdk
2
2
 
3
+ import android.content.Context
4
+ import android.graphics.Bitmap
5
+ import android.os.Build
6
+ import android.os.Handler
7
+ import android.util.Base64
8
+ import android.util.Log
9
+ import android.view.PixelCopy
10
+ import androidx.annotation.RequiresApi
11
+ import com.facebook.react.bridge.*
3
12
  import com.facebook.react.bridge.ReadableArray
4
13
  import com.facebook.react.bridge.ReadableMap
14
+ import com.facebook.react.uimanager.events.RCTEventEmitter
15
+ import java.io.ByteArrayOutputStream
16
+ import java.util.*
17
+ import live.hms.video.error.HMSException
5
18
  import live.hms.video.media.codec.HMSAudioCodec
6
19
  import live.hms.video.media.codec.HMSVideoCodec
7
20
  import live.hms.video.media.settings.HMSAudioTrackSettings
8
21
  import live.hms.video.media.settings.HMSTrackSettings
9
22
  import live.hms.video.media.settings.HMSVideoResolution
10
23
  import live.hms.video.media.settings.HMSVideoTrackSettings
11
- import live.hms.video.media.tracks.*
24
+ import live.hms.video.media.tracks.HMSRemoteAudioTrack
25
+ import live.hms.video.media.tracks.HMSRemoteVideoTrack
26
+ import live.hms.video.media.tracks.HMSTrack
12
27
  import live.hms.video.sdk.models.*
13
- import live.hms.video.sdk.models.role.*
28
+ import live.hms.video.sdk.models.role.HMSRole
14
29
  import live.hms.video.utils.HmsUtilities
30
+ import org.webrtc.SurfaceViewRenderer
15
31
 
16
- object HmsHelper {
32
+ object HMSHelper {
17
33
 
18
34
  fun areAllRequiredKeysAvailable(
19
35
  map: ReadableMap?,
@@ -48,6 +64,39 @@ object HmsHelper {
48
64
  return true
49
65
  }
50
66
 
67
+ fun getUnavailableRequiredKey(
68
+ map: ReadableMap?,
69
+ requiredKeys: Array<Pair<String, String>>
70
+ ): String? {
71
+ if (map == null) {
72
+ return "Object_Is_Null"
73
+ }
74
+ for ((key, value) in requiredKeys) {
75
+ if (map.hasKey(key)) {
76
+ when (value) {
77
+ "String" -> {
78
+ if (map.getString(key) == null) {
79
+ return key + "_Is_Null"
80
+ }
81
+ }
82
+ "Array" -> {
83
+ if (map.getArray(key) == null) {
84
+ return key + "_Is_Null"
85
+ }
86
+ }
87
+ "Map" -> {
88
+ if (map.getMap(key) == null) {
89
+ return key + "_Is_Null"
90
+ }
91
+ }
92
+ }
93
+ } else {
94
+ return key + "_Is_Required"
95
+ }
96
+ }
97
+ return null
98
+ }
99
+
51
100
  fun getPeerFromPeerId(peerId: String?, room: HMSRoom?): HMSPeer? {
52
101
  if (peerId != null && room != null) {
53
102
  return HmsUtilities.getPeer(peerId, room)
@@ -237,7 +286,7 @@ object HmsHelper {
237
286
  return HMSVideoTrackSettings.CameraFacing.FRONT
238
287
  }
239
288
 
240
- fun getHms(credentials: ReadableMap, hmsCollection: MutableMap<String, HmsSDK>): HmsSDK? {
289
+ fun getHms(credentials: ReadableMap, hmsCollection: MutableMap<String, HMSRNSDK>): HMSRNSDK? {
241
290
  val id = credentials.getString("id")
242
291
 
243
292
  return if (id != null) {
@@ -403,4 +452,64 @@ object HmsHelper {
403
452
  }
404
453
  return config
405
454
  }
455
+
456
+ @RequiresApi(Build.VERSION_CODES.N)
457
+ fun captureSurfaceView(
458
+ surfaceView: SurfaceViewRenderer,
459
+ sdkId: String,
460
+ args: ReadableArray?,
461
+ context: Context,
462
+ id: Int
463
+ ) {
464
+ val output = Arguments.createMap()
465
+ if (args != null) {
466
+ output.putInt("requestId", args.getInt(0))
467
+ } else {
468
+ output.putInt("requestId", -1)
469
+ }
470
+ val reactContext = context as ReactContext
471
+ try {
472
+ val bitmap: Bitmap =
473
+ Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
474
+ PixelCopy.request(
475
+ surfaceView,
476
+ bitmap,
477
+ { copyResult ->
478
+ if (copyResult == PixelCopy.SUCCESS) {
479
+ Log.d("captureSurfaceView", "bitmap: $bitmap")
480
+ val byteArrayOutputStream = ByteArrayOutputStream()
481
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
482
+ val byteArray = byteArrayOutputStream.toByteArray()
483
+ val encoded: String = Base64.encodeToString(byteArray, Base64.DEFAULT)
484
+ Log.d("captureSurfaceView", "Base64: $encoded")
485
+ output.putString("result", encoded)
486
+ reactContext
487
+ .getJSModule(RCTEventEmitter::class.java)
488
+ .receiveEvent(id, "captureFrame", output)
489
+ } else {
490
+ Log.e("captureSurfaceView", "copyResult: $copyResult")
491
+ HMSManager.hmsCollection[sdkId]?.emitHMSError(
492
+ HMSException(
493
+ 103,
494
+ copyResult.toString(),
495
+ copyResult.toString(),
496
+ copyResult.toString(),
497
+ copyResult.toString()
498
+ )
499
+ )
500
+ output.putString("error", copyResult.toString())
501
+ reactContext
502
+ .getJSModule(RCTEventEmitter::class.java)
503
+ .receiveEvent(id, "captureFrame", output)
504
+ }
505
+ },
506
+ Handler()
507
+ )
508
+ } catch (e: Exception) {
509
+ Log.e("captureSurfaceView", "error: $e")
510
+ HMSManager.hmsCollection[sdkId]?.emitHMSError(e as HMSException)
511
+ output.putString("error", e.message)
512
+ reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "captureFrame", output)
513
+ }
514
+ }
406
515
  }
@@ -6,21 +6,21 @@ import android.os.Bundle
6
6
  import com.facebook.react.bridge.*
7
7
  import com.facebook.react.module.annotations.ReactModule
8
8
  import com.facebook.react.modules.core.DeviceEventManagerModule
9
- import com.reactnativehmssdk.HmsModule.Companion.REACT_CLASS
9
+ import com.reactnativehmssdk.HMSManager.Companion.REACT_CLASS
10
10
  import java.util.UUID
11
11
 
12
12
  @ReactModule(name = REACT_CLASS)
13
- class HmsModule(reactContext: ReactApplicationContext) :
13
+ class HMSManager(reactContext: ReactApplicationContext) :
14
14
  ReactContextBaseJavaModule(reactContext), Application.ActivityLifecycleCallbacks {
15
15
  companion object {
16
- const val REACT_CLASS = "HmsManager"
17
- var hmsCollection = mutableMapOf<String, HmsSDK>()
16
+ const val REACT_CLASS = "HMSManager"
17
+ var hmsCollection = mutableMapOf<String, HMSRNSDK>()
18
18
  }
19
19
  override fun getName(): String {
20
- return "HmsManager"
20
+ return "HMSManager"
21
21
  }
22
22
 
23
- fun getHmsInstance(): MutableMap<String, HmsSDK> {
23
+ fun getHmsInstance(): MutableMap<String, HMSRNSDK> {
24
24
  return hmsCollection
25
25
  }
26
26
 
@@ -32,14 +32,14 @@ class HmsModule(reactContext: ReactApplicationContext) :
32
32
  if (hasItem) {
33
33
  val uuid = UUID.randomUUID()
34
34
  val randomUUIDString = uuid.toString()
35
- val sdkInstance = HmsSDK(data, this, randomUUIDString, reactApplicationContext)
35
+ val sdkInstance = HMSRNSDK(data, this, randomUUIDString, reactApplicationContext)
36
36
 
37
37
  hmsCollection[randomUUIDString] = sdkInstance
38
38
 
39
39
  callback?.resolve(randomUUIDString)
40
40
  } else {
41
41
  val randomUUIDString = "12345"
42
- val sdkInstance = HmsSDK(data, this, randomUUIDString, reactApplicationContext)
42
+ val sdkInstance = HMSRNSDK(data, this, randomUUIDString, reactApplicationContext)
43
43
 
44
44
  hmsCollection[randomUUIDString] = sdkInstance
45
45
 
@@ -49,168 +49,168 @@ class HmsModule(reactContext: ReactApplicationContext) :
49
49
 
50
50
  @ReactMethod
51
51
  fun preview(credentials: ReadableMap) {
52
- val hms = HmsHelper.getHms(credentials, hmsCollection)
52
+ val hms = HMSHelper.getHms(credentials, hmsCollection)
53
53
 
54
54
  hms?.preview(credentials)
55
55
  }
56
56
 
57
57
  @ReactMethod
58
58
  fun join(credentials: ReadableMap) {
59
- val hms = HmsHelper.getHms(credentials, hmsCollection)
59
+ val hms = HMSHelper.getHms(credentials, hmsCollection)
60
60
 
61
61
  hms?.join(credentials)
62
62
  }
63
63
 
64
64
  @ReactMethod
65
65
  fun setLocalMute(data: ReadableMap) {
66
- val hms = HmsHelper.getHms(data, hmsCollection)
66
+ val hms = HMSHelper.getHms(data, hmsCollection)
67
67
 
68
68
  hms?.setLocalMute(data)
69
69
  }
70
70
 
71
71
  @ReactMethod
72
72
  fun setLocalVideoMute(data: ReadableMap) {
73
- val hms = HmsHelper.getHms(data, hmsCollection)
73
+ val hms = HMSHelper.getHms(data, hmsCollection)
74
74
 
75
75
  hms?.setLocalVideoMute(data)
76
76
  }
77
77
 
78
78
  @ReactMethod
79
79
  fun switchCamera(data: ReadableMap) {
80
- val hms = HmsHelper.getHms(data, hmsCollection)
80
+ val hms = HMSHelper.getHms(data, hmsCollection)
81
81
 
82
82
  hms?.switchCamera()
83
83
  }
84
84
 
85
85
  @ReactMethod
86
86
  fun leave(data: ReadableMap, callback: Promise?) {
87
- val hms = HmsHelper.getHms(data, hmsCollection)
87
+ val hms = HMSHelper.getHms(data, hmsCollection)
88
88
 
89
89
  hms?.leave(callback)
90
90
  }
91
91
 
92
92
  @ReactMethod
93
93
  fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
94
- val hms = HmsHelper.getHms(data, hmsCollection)
94
+ val hms = HMSHelper.getHms(data, hmsCollection)
95
95
 
96
96
  hms?.sendBroadcastMessage(data, callback)
97
97
  }
98
98
 
99
99
  @ReactMethod
100
100
  fun sendGroupMessage(data: ReadableMap, callback: Promise?) {
101
- val hms = HmsHelper.getHms(data, hmsCollection)
101
+ val hms = HMSHelper.getHms(data, hmsCollection)
102
102
 
103
103
  hms?.sendGroupMessage(data, callback)
104
104
  }
105
105
 
106
106
  @ReactMethod
107
107
  fun sendDirectMessage(data: ReadableMap, callback: Promise?) {
108
- val hms = HmsHelper.getHms(data, hmsCollection)
108
+ val hms = HMSHelper.getHms(data, hmsCollection)
109
109
 
110
110
  hms?.sendDirectMessage(data, callback)
111
111
  }
112
112
 
113
113
  @ReactMethod
114
114
  fun changeRole(data: ReadableMap, callback: Promise?) {
115
- val hms = HmsHelper.getHms(data, hmsCollection)
115
+ val hms = HMSHelper.getHms(data, hmsCollection)
116
116
 
117
117
  hms?.changeRole(data, callback)
118
118
  }
119
119
 
120
120
  @ReactMethod
121
121
  fun changeTrackState(data: ReadableMap, callback: Promise?) {
122
- val hms = HmsHelper.getHms(data, hmsCollection)
122
+ val hms = HMSHelper.getHms(data, hmsCollection)
123
123
 
124
124
  hms?.changeTrackState(data, callback)
125
125
  }
126
126
 
127
127
  @ReactMethod
128
128
  fun changeTrackStateForRoles(data: ReadableMap, callback: Promise?) {
129
- val hms = HmsHelper.getHms(data, hmsCollection)
129
+ val hms = HMSHelper.getHms(data, hmsCollection)
130
130
 
131
131
  hms?.changeTrackStateForRoles(data, callback)
132
132
  }
133
133
 
134
134
  @ReactMethod
135
135
  fun isMute(data: ReadableMap, callback: Promise?) {
136
- val hms = HmsHelper.getHms(data, hmsCollection)
136
+ val hms = HMSHelper.getHms(data, hmsCollection)
137
137
 
138
138
  hms?.isMute(data, callback)
139
139
  }
140
140
 
141
141
  @ReactMethod
142
142
  fun removePeer(data: ReadableMap, callback: Promise?) {
143
- val hms = HmsHelper.getHms(data, hmsCollection)
143
+ val hms = HMSHelper.getHms(data, hmsCollection)
144
144
 
145
145
  hms?.removePeer(data, callback)
146
146
  }
147
147
 
148
148
  @ReactMethod
149
149
  fun isPlaybackAllowed(data: ReadableMap, callback: Promise?) {
150
- val hms = HmsHelper.getHms(data, hmsCollection)
150
+ val hms = HMSHelper.getHms(data, hmsCollection)
151
151
 
152
152
  hms?.isPlaybackAllowed(data, callback)
153
153
  }
154
154
 
155
155
  @ReactMethod
156
156
  fun getRoom(data: ReadableMap, callback: Promise?) {
157
- val hms = HmsHelper.getHms(data, hmsCollection)
157
+ val hms = HMSHelper.getHms(data, hmsCollection)
158
158
 
159
159
  hms?.getRoom(callback)
160
160
  }
161
161
 
162
162
  @ReactMethod
163
163
  fun setPlaybackAllowed(data: ReadableMap) {
164
- val hms = HmsHelper.getHms(data, hmsCollection)
164
+ val hms = HMSHelper.getHms(data, hmsCollection)
165
165
 
166
166
  hms?.setPlaybackAllowed(data)
167
167
  }
168
168
 
169
169
  @ReactMethod
170
170
  fun endRoom(data: ReadableMap, callback: Promise?) {
171
- val hms = HmsHelper.getHms(data, hmsCollection)
171
+ val hms = HMSHelper.getHms(data, hmsCollection)
172
172
 
173
173
  hms?.endRoom(data, callback)
174
174
  }
175
175
 
176
176
  @ReactMethod
177
177
  fun acceptRoleChange(data: ReadableMap, callback: Promise?) {
178
- val hms = HmsHelper.getHms(data, hmsCollection)
178
+ val hms = HMSHelper.getHms(data, hmsCollection)
179
179
 
180
180
  hms?.acceptRoleChange(callback)
181
181
  }
182
182
 
183
183
  @ReactMethod
184
184
  fun setVolume(data: ReadableMap) {
185
- val hms = HmsHelper.getHms(data, hmsCollection)
185
+ val hms = HMSHelper.getHms(data, hmsCollection)
186
186
 
187
187
  hms?.setVolume(data)
188
188
  }
189
189
 
190
190
  @ReactMethod
191
191
  fun getVolume(data: ReadableMap, callback: Promise?) {
192
- val hms = HmsHelper.getHms(data, hmsCollection)
192
+ val hms = HMSHelper.getHms(data, hmsCollection)
193
193
 
194
194
  hms?.getVolume(data, callback)
195
195
  }
196
196
 
197
197
  @ReactMethod
198
198
  fun setPlaybackForAllAudio(data: ReadableMap) {
199
- val hms = HmsHelper.getHms(data, hmsCollection)
199
+ val hms = HMSHelper.getHms(data, hmsCollection)
200
200
 
201
201
  hms?.setPlaybackForAllAudio(data)
202
202
  }
203
203
 
204
204
  @ReactMethod
205
205
  fun remoteMuteAllAudio(data: ReadableMap) {
206
- val hms = HmsHelper.getHms(data, hmsCollection)
206
+ val hms = HMSHelper.getHms(data, hmsCollection)
207
207
 
208
208
  hms?.remoteMuteAllAudio()
209
209
  }
210
210
 
211
211
  @ReactMethod
212
212
  fun changeMetadata(data: ReadableMap, callback: Promise?) {
213
- val hms = HmsHelper.getHms(data, hmsCollection)
213
+ val hms = HMSHelper.getHms(data, hmsCollection)
214
214
 
215
215
  hms?.changeMetadata(data, callback)
216
216
  }
@@ -218,21 +218,21 @@ class HmsModule(reactContext: ReactApplicationContext) :
218
218
  @ReactMethod
219
219
  fun startScreenshare(data: ReadableMap, callback: Promise?) {
220
220
  currentActivity?.application?.registerActivityLifecycleCallbacks(this)
221
- val hms = HmsHelper.getHms(data, hmsCollection)
221
+ val hms = HMSHelper.getHms(data, hmsCollection)
222
222
 
223
223
  hms?.startScreenshare(callback)
224
224
  }
225
225
 
226
226
  @ReactMethod
227
227
  fun isScreenShared(data: ReadableMap, callback: Promise?) {
228
- val hms = HmsHelper.getHms(data, hmsCollection)
228
+ val hms = HMSHelper.getHms(data, hmsCollection)
229
229
 
230
230
  hms?.isScreenShared(callback)
231
231
  }
232
232
 
233
233
  @ReactMethod
234
234
  fun stopScreenshare(data: ReadableMap, callback: Promise?) {
235
- val hms = HmsHelper.getHms(data, hmsCollection)
235
+ val hms = HMSHelper.getHms(data, hmsCollection)
236
236
 
237
237
  currentActivity?.application?.unregisterActivityLifecycleCallbacks(this)
238
238
  hms?.stopScreenshare(callback)
@@ -240,46 +240,56 @@ class HmsModule(reactContext: ReactApplicationContext) :
240
240
 
241
241
  @ReactMethod
242
242
  fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
243
- val hms = HmsHelper.getHms(data, hmsCollection)
243
+ val hms = HMSHelper.getHms(data, hmsCollection)
244
244
 
245
245
  hms?.startRTMPOrRecording(data, callback)
246
246
  }
247
247
 
248
248
  @ReactMethod
249
249
  fun stopRtmpAndRecording(data: ReadableMap, callback: Promise?) {
250
- val hms = HmsHelper.getHms(data, hmsCollection)
250
+ val hms = HMSHelper.getHms(data, hmsCollection)
251
251
 
252
252
  hms?.stopRtmpAndRecording(callback)
253
253
  }
254
254
 
255
255
  @ReactMethod
256
256
  fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
257
- val hms = HmsHelper.getHms(data, hmsCollection)
257
+ val hms = HMSHelper.getHms(data, hmsCollection)
258
258
 
259
259
  hms?.startHLSStreaming(data, callback)
260
260
  }
261
261
 
262
262
  @ReactMethod
263
263
  fun stopHLSStreaming(data: ReadableMap, callback: Promise?) {
264
- val hms = HmsHelper.getHms(data, hmsCollection)
264
+ val hms = HMSHelper.getHms(data, hmsCollection)
265
265
 
266
266
  hms?.stopHLSStreaming(callback)
267
267
  }
268
268
 
269
269
  @ReactMethod
270
270
  fun resetVolume(data: ReadableMap) {
271
- val hms = HmsHelper.getHms(data, hmsCollection)
271
+ val hms = HMSHelper.getHms(data, hmsCollection)
272
272
 
273
273
  hms?.resetVolume()
274
274
  }
275
275
 
276
276
  @ReactMethod
277
277
  fun changeName(data: ReadableMap, callback: Promise?) {
278
- val hms = HmsHelper.getHms(data, hmsCollection)
278
+ val hms = HMSHelper.getHms(data, hmsCollection)
279
279
 
280
280
  hms?.changeName(data, callback)
281
281
  }
282
282
 
283
+ @ReactMethod
284
+ fun destroy(data: ReadableMap, callback: Promise?) {
285
+ val id = data.getString("id")
286
+ hmsCollection.remove(id)
287
+ val result: WritableMap = Arguments.createMap()
288
+ result.putBoolean("success", true)
289
+ result.putString("message", "$id removed")
290
+ callback?.resolve(result)
291
+ }
292
+
283
293
  fun emitEvent(event: String, data: WritableMap) {
284
294
  reactApplicationContext
285
295
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)