@100mslive/react-native-hms 0.9.4 → 0.9.7

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 (216) hide show
  1. package/README.md +3 -5
  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 +3 -3
  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} +115 -75
  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} +171 -159
  14. package/android/src/main/java/com/reactnativehmssdk/{HmssdkViewManager.kt → HMSSDKViewManager.kt} +38 -17
  15. package/android/src/main/java/com/reactnativehmssdk/{HmsView.kt → HMSView.kt} +10 -10
  16. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +17 -18
  17. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +2 -2
  18. package/ios/{HmsDecoder.swift → HMSDecoder.swift} +27 -26
  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} +128 -128
  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 +42 -17
  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 +119 -239
  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/HMSSubscribeSettings.js.map +1 -1
  86. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  87. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  88. package/lib/commonjs/classes/HMSTrackSource.js +15 -0
  89. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -0
  90. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  91. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  92. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  93. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  94. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
  95. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  96. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  97. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  98. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  99. package/lib/commonjs/classes/HmsView.js +64 -16
  100. package/lib/commonjs/classes/HmsView.js.map +1 -1
  101. package/lib/commonjs/index.js +14 -28
  102. package/lib/commonjs/index.js.map +1 -1
  103. package/lib/module/classes/HMSAudioCodec.js.map +1 -1
  104. package/lib/module/classes/HMSAudioSettings.js.map +1 -1
  105. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  106. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  107. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  108. package/lib/module/classes/HMSCameraFacing.js.map +1 -1
  109. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  110. package/lib/module/classes/HMSConfig.js.map +1 -1
  111. package/lib/module/classes/HMSEncoder.js +30 -10
  112. package/lib/module/classes/HMSEncoder.js.map +1 -1
  113. package/lib/module/classes/HMSException.js.map +1 -1
  114. package/lib/module/classes/HMSHLSConfig.js.map +1 -1
  115. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  116. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -1
  117. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -1
  118. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
  119. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  120. package/lib/module/classes/HMSHelper.js.map +1 -1
  121. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -1
  122. package/lib/module/classes/HMSLocalAudioTrack.js +6 -6
  123. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  124. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  125. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
  126. package/lib/module/classes/HMSLocalVideoTrack.js +6 -6
  127. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  128. package/lib/module/classes/HMSLogLevel.js.map +1 -1
  129. package/lib/module/classes/HMSLogger.js +10 -0
  130. package/lib/module/classes/HMSLogger.js.map +1 -1
  131. package/lib/module/classes/HMSMessage.js +1 -1
  132. package/lib/module/classes/HMSMessage.js.map +1 -1
  133. package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
  134. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -1
  135. package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
  136. package/lib/module/classes/HMSPeer.js.map +1 -1
  137. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  138. package/lib/module/classes/HMSPermissions.js.map +1 -1
  139. package/lib/module/classes/HMSPublishSettings.js.map +1 -1
  140. package/lib/module/classes/HMSRTCStats.js.map +1 -1
  141. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -1
  142. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  143. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -1
  144. package/lib/module/classes/HMSRemoteAudioTrack.js +6 -6
  145. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  146. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  147. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -1
  148. package/lib/module/classes/HMSRemoteVideoTrack.js +6 -6
  149. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  150. package/lib/module/classes/HMSRole.js.map +1 -1
  151. package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
  152. package/lib/module/classes/HMSRoom.js +3 -0
  153. package/lib/module/classes/HMSRoom.js.map +1 -1
  154. package/lib/module/classes/HMSRoomUpdate.js +1 -3
  155. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  156. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  157. package/lib/module/classes/HMSSDK.js +118 -239
  158. package/lib/module/classes/HMSSDK.js.map +1 -1
  159. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  160. package/lib/module/classes/HMSSimulcastLayerSettings.js.map +1 -1
  161. package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
  162. package/lib/module/classes/HMSSpeaker.js.map +1 -1
  163. package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
  164. package/lib/module/classes/HMSTrack.js.map +1 -1
  165. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  166. package/lib/module/classes/HMSTrackSource.js +8 -0
  167. package/lib/module/classes/HMSTrackSource.js.map +1 -0
  168. package/lib/module/classes/HMSTrackType.js.map +1 -1
  169. package/lib/module/classes/HMSTrackUpdate.js.map +1 -1
  170. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  171. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  172. package/lib/module/classes/HMSVideoResolution.js.map +1 -1
  173. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  174. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  175. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  176. package/lib/module/classes/HMSVideoViewMode.js.map +1 -1
  177. package/lib/module/classes/HmsView.js +62 -16
  178. package/lib/module/classes/HmsView.js.map +1 -1
  179. package/lib/module/index.js +1 -2
  180. package/lib/module/index.js.map +1 -1
  181. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +2 -2
  182. package/lib/typescript/classes/HMSEncoder.d.ts +9 -3
  183. package/lib/typescript/classes/HMSLogger.d.ts +3 -0
  184. package/lib/typescript/classes/HMSMessage.d.ts +3 -3
  185. package/lib/typescript/classes/HMSRoom.d.ts +2 -0
  186. package/lib/typescript/classes/HMSRoomUpdate.d.ts +1 -3
  187. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +2 -2
  188. package/lib/typescript/classes/HMSSDK.d.ts +6 -10
  189. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -2
  190. package/lib/typescript/classes/HMSTrackSource.d.ts +5 -0
  191. package/lib/typescript/classes/HmsView.d.ts +5 -7
  192. package/lib/typescript/index.d.ts +1 -2
  193. package/package.json +2 -2
  194. package/react-native-hms.podspec +2 -2
  195. package/src/classes/HMSBrowserRecordingState.ts +2 -2
  196. package/src/classes/HMSEncoder.ts +30 -18
  197. package/src/classes/HMSLocalAudioTrack.ts +6 -6
  198. package/src/classes/HMSLocalVideoTrack.ts +6 -6
  199. package/src/classes/HMSLogger.ts +11 -0
  200. package/src/classes/HMSMessage.ts +4 -4
  201. package/src/classes/HMSRemoteAudioTrack.ts +6 -6
  202. package/src/classes/HMSRemoteVideoTrack.ts +6 -6
  203. package/src/classes/HMSRoom.ts +3 -0
  204. package/src/classes/HMSRoomUpdate.ts +1 -3
  205. package/src/classes/HMSRtmpStreamingState.ts +2 -2
  206. package/src/classes/HMSSDK.tsx +58 -69
  207. package/src/classes/HMSServerRecordingState.ts +2 -2
  208. package/src/classes/HMSTrackSource.ts +5 -0
  209. package/src/classes/HmsView.tsx +98 -48
  210. package/src/index.ts +1 -2
  211. package/lib/commonjs/classes/HMSSpeakerUpdate.js +0 -26
  212. package/lib/commonjs/classes/HMSSpeakerUpdate.js.map +0 -1
  213. package/lib/module/classes/HMSSpeakerUpdate.js +0 -17
  214. package/lib/module/classes/HMSSpeakerUpdate.js.map +0 -1
  215. package/lib/typescript/classes/HMSSpeakerUpdate.d.ts +0 -11
  216. package/src/classes/HMSSpeakerUpdate.ts +0 -17
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
  ```
@@ -355,15 +354,14 @@ hmsInstance?.startScreenshare();
355
354
  ```js
356
355
  import {
357
356
  HMSUpdateListenerActions,
358
- HMSSpeakerUpdate,
359
357
  HMSSpeaker,
360
358
  } from '@100mslive/react-native-hms';
361
359
 
362
360
  // hms instance acquired by build method
363
361
  hmsInstance?.addEventListener(HMSUpdateListenerActions.ON_SPEAKER, onSpeaker);
364
362
 
365
- const onSpeaker = (data: HMSSpeakerUpdate) => {
366
- data?.peers?.map((speaker: HMSSpeaker) =>
363
+ const onSpeaker = (data: HMSSpeaker[]) => {
364
+ data?.map((speaker: HMSSpeaker) =>
367
365
  console.log('speaker audio level: ', speaker?.level)
368
366
  );
369
367
  };
@@ -63,8 +63,8 @@ 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.5'
67
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
68
- implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
66
+ implementation 'com.github.100mslive.android-sdk:lib:2.4.1'
67
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
68
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
69
69
  implementation 'androidx.appcompat:appcompat:1.3.1'
70
70
  }
@@ -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) {
@@ -2,15 +2,18 @@ package com.reactnativehmssdk
2
2
 
3
3
  import android.content.Context
4
4
  import android.graphics.Bitmap
5
- import android.media.MediaScannerConnection
6
5
  import android.os.Build
7
- import android.os.Environment
8
6
  import android.os.Handler
7
+ import android.util.Base64
9
8
  import android.util.Log
10
9
  import android.view.PixelCopy
11
10
  import androidx.annotation.RequiresApi
11
+ import com.facebook.react.bridge.*
12
12
  import com.facebook.react.bridge.ReadableArray
13
13
  import com.facebook.react.bridge.ReadableMap
14
+ import com.facebook.react.uimanager.events.RCTEventEmitter
15
+ import java.io.ByteArrayOutputStream
16
+ import java.util.*
14
17
  import live.hms.video.error.HMSException
15
18
  import live.hms.video.media.codec.HMSAudioCodec
16
19
  import live.hms.video.media.codec.HMSVideoCodec
@@ -25,11 +28,8 @@ import live.hms.video.sdk.models.*
25
28
  import live.hms.video.sdk.models.role.HMSRole
26
29
  import live.hms.video.utils.HmsUtilities
27
30
  import org.webrtc.SurfaceViewRenderer
28
- import java.io.File
29
- import java.io.FileOutputStream
30
- import java.util.*
31
31
 
32
- object HmsHelper {
32
+ object HMSHelper {
33
33
 
34
34
  fun areAllRequiredKeysAvailable(
35
35
  map: ReadableMap?,
@@ -64,6 +64,39 @@ object HmsHelper {
64
64
  return true
65
65
  }
66
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
+
67
100
  fun getPeerFromPeerId(peerId: String?, room: HMSRoom?): HMSPeer? {
68
101
  if (peerId != null && room != null) {
69
102
  return HmsUtilities.getPeer(peerId, room)
@@ -136,7 +169,9 @@ object HmsHelper {
136
169
  var useHardwareEchoCancellation = false
137
170
  val requiredKeysUseHardwareEchoCancellation =
138
171
  this.areAllRequiredKeysAvailable(
139
- data, arrayOf(Pair("useHardwareEchoCancellation", "Boolean")))
172
+ data,
173
+ arrayOf(Pair("useHardwareEchoCancellation", "Boolean"))
174
+ )
140
175
  if (requiredKeysUseHardwareEchoCancellation) {
141
176
  useHardwareEchoCancellation = data.getBoolean("useHardwareEchoCancellation")
142
177
  }
@@ -251,7 +286,7 @@ object HmsHelper {
251
286
  return HMSVideoTrackSettings.CameraFacing.FRONT
252
287
  }
253
288
 
254
- fun getHms(credentials: ReadableMap, hmsCollection: MutableMap<String, HmsSDK>): HmsSDK? {
289
+ fun getHms(credentials: ReadableMap, hmsCollection: MutableMap<String, HMSRNSDK>): HMSRNSDK? {
255
290
  val id = credentials.getString("id")
256
291
 
257
292
  return if (id != null) {
@@ -291,11 +326,17 @@ object HmsHelper {
291
326
  var singleFilePerLayer = false
292
327
  var videoOnDemand = false
293
328
  if (areAllRequiredKeysAvailable(
294
- hmsHlsRecordingConfig, arrayOf(Pair("singleFilePerLayer", "Boolean")))) {
329
+ hmsHlsRecordingConfig,
330
+ arrayOf(Pair("singleFilePerLayer", "Boolean"))
331
+ )
332
+ ) {
295
333
  singleFilePerLayer = hmsHlsRecordingConfig.getBoolean("singleFilePerLayer")
296
334
  }
297
335
  if (areAllRequiredKeysAvailable(
298
- hmsHlsRecordingConfig, arrayOf(Pair("videoOnDemand", "Boolean")))) {
336
+ hmsHlsRecordingConfig,
337
+ arrayOf(Pair("videoOnDemand", "Boolean"))
338
+ )
339
+ ) {
299
340
  videoOnDemand = hmsHlsRecordingConfig.getBoolean("videoOnDemand")
300
341
  }
301
342
  return HMSHlsRecordingConfig(singleFilePerLayer, videoOnDemand)
@@ -329,7 +370,9 @@ object HmsHelper {
329
370
  arrayOf(
330
371
  Pair("endpoint", "String"),
331
372
  Pair("metadata", "String"),
332
- Pair("captureNetworkQualityInPreview", "Boolean"))) -> {
373
+ Pair("captureNetworkQualityInPreview", "Boolean")
374
+ )
375
+ ) -> {
333
376
  config =
334
377
  HMSConfig(
335
378
  credentials.getString("username") as String,
@@ -341,7 +384,9 @@ object HmsHelper {
341
384
  )
342
385
  }
343
386
  areAllRequiredKeysAvailable(
344
- credentials, arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))) -> {
387
+ credentials,
388
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
389
+ ) -> {
345
390
  config =
346
391
  HMSConfig(
347
392
  credentials.getString("username") as String,
@@ -352,8 +397,8 @@ object HmsHelper {
352
397
  }
353
398
  areAllRequiredKeysAvailable(
354
399
  credentials,
355
- arrayOf(
356
- Pair("endpoint", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))) -> {
400
+ arrayOf(Pair("endpoint", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
401
+ ) -> {
357
402
  config =
358
403
  HMSConfig(
359
404
  credentials.getString("username") as String,
@@ -365,8 +410,8 @@ object HmsHelper {
365
410
  }
366
411
  areAllRequiredKeysAvailable(
367
412
  credentials,
368
- arrayOf(
369
- Pair("metadata", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))) -> {
413
+ arrayOf(Pair("metadata", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
414
+ ) -> {
370
415
  config =
371
416
  HMSConfig(
372
417
  credentials.getString("username") as String,
@@ -393,83 +438,78 @@ object HmsHelper {
393
438
  )
394
439
  }
395
440
  areAllRequiredKeysAvailable(
396
- credentials, arrayOf(Pair("captureNetworkQualityInPreview", "Boolean"))) -> {
441
+ credentials,
442
+ arrayOf(Pair("captureNetworkQualityInPreview", "Boolean"))
443
+ ) -> {
397
444
  config =
398
445
  HMSConfig(
399
446
  credentials.getString("username") as String,
400
447
  credentials.getString("authToken") as String,
401
448
  captureNetworkQualityInPreview =
402
- credentials.getBoolean("captureNetworkQualityInPreview"))
449
+ credentials.getBoolean("captureNetworkQualityInPreview")
450
+ )
403
451
  }
404
452
  }
405
453
  return config
406
454
  }
407
455
 
408
456
  @RequiresApi(Build.VERSION_CODES.N)
409
- fun captureSurfaceView(surfaceView: SurfaceViewRenderer, context: Context, id: String?) {
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
410
471
  try {
411
472
  val bitmap: Bitmap =
412
- Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
473
+ Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
413
474
  PixelCopy.request(
414
- surfaceView,
415
- bitmap,
416
- { copyResult ->
417
- if (copyResult === PixelCopy.SUCCESS) {
418
- Log.d("captureSurfaceView", "bitmap: $bitmap")
419
- saveImage(bitmap, context, id)
420
- } else {
421
- HmsModule.hmsCollection[id]?.emitHMSError(
422
- HMSException(
423
- 103,
424
- copyResult.toString(),
425
- copyResult.toString(),
426
- copyResult.toString(),
427
- copyResult.toString()
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
+ )
428
499
  )
429
- )
430
- Log.e("captureSurfaceView", "copyResult: $copyResult")
431
- }
432
- },
433
- Handler()
500
+ output.putString("error", copyResult.toString())
501
+ reactContext
502
+ .getJSModule(RCTEventEmitter::class.java)
503
+ .receiveEvent(id, "captureFrame", output)
504
+ }
505
+ },
506
+ Handler()
434
507
  )
435
508
  } catch (e: Exception) {
436
509
  Log.e("captureSurfaceView", "error: $e")
437
- }
438
- }
439
-
440
- private fun saveImage(finalBitmap: Bitmap, context: Context, id: String?) {
441
- val folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
442
- if (!folder.exists()) {
443
- folder.mkdir()
444
- }
445
- val generator = Random()
446
- var n = 10000
447
- n = generator.nextInt(n)
448
- val fileName = "Image-$n.jpg"
449
- val file = File(folder.absolutePath, fileName)
450
- if (file.exists()) file.delete()
451
- try {
452
- val out = FileOutputStream(file)
453
- finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)
454
- out.flush()
455
- out.close()
456
- } catch (e: Exception) {
457
- HmsModule.hmsCollection[id]?.emitHMSError(
458
- HMSException(
459
- 103,
460
- e.message.toString(),
461
- e.message.toString(),
462
- e.message.toString(),
463
- e.message.toString()
464
- )
465
- )
466
- Log.e("saveImage", "error: $e")
467
- }
468
- // Tell the media scanner about the new file so that it is
469
- // immediately available to the user.
470
- MediaScannerConnection.scanFile(context, arrayOf(file.toString()), null) { path, uri ->
471
- Log.i("ExternalStorage", "Scanned $path:")
472
- Log.i("ExternalStorage", "-> uri=$uri")
510
+ HMSManager.hmsCollection[sdkId]?.emitHMSError(e as HMSException)
511
+ output.putString("error", e.message)
512
+ reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "captureFrame", output)
473
513
  }
474
514
  }
475
515
  }