@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.
- package/README.md +3 -5
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/reactnativehmssdk/{HmsDecoder.kt → HMSDecoder.kt} +38 -34
- package/android/src/main/java/com/reactnativehmssdk/{HmsHelper.kt → HMSHelper.kt} +115 -75
- package/android/src/main/java/com/reactnativehmssdk/{HmsModule.kt → HMSManager.kt} +51 -41
- package/android/src/main/java/com/reactnativehmssdk/{HmsSDK.kt → HMSRNSDK.kt} +171 -159
- package/android/src/main/java/com/reactnativehmssdk/{HmssdkViewManager.kt → HMSSDKViewManager.kt} +38 -17
- package/android/src/main/java/com/reactnativehmssdk/{HmsView.kt → HMSView.kt} +10 -10
- package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +17 -18
- package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +2 -2
- package/ios/{HmsDecoder.swift → HMSDecoder.swift} +27 -26
- package/ios/{HmsHelper.swift → HMSHelper.swift} +13 -7
- package/ios/{HmsManager.m → HMSManager.m} +2 -1
- package/ios/{HmsManager.swift → HMSManager.swift} +46 -38
- package/ios/{HmsSDK.swift → HMSRNSDK.swift} +128 -128
- package/ios/{HmsView.m → HMSView.m} +1 -1
- package/ios/{HmsView.swift → HMSView.swift} +9 -20
- package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
- package/lib/commonjs/classes/HMSAudioSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
- package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
- package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
- package/lib/commonjs/classes/HMSConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSEncoder.js +42 -17
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSException.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
- package/lib/commonjs/classes/HMSHelper.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalAudioTrack.js +6 -8
- package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalVideoTrack.js +6 -8
- package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
- package/lib/commonjs/classes/HMSLogger.js +19 -1
- package/lib/commonjs/classes/HMSLogger.js.map +1 -1
- package/lib/commonjs/classes/HMSMessage.js +1 -1
- package/lib/commonjs/classes/HMSMessage.js.map +1 -1
- package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -1
- package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
- package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
- package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSRTCStats.js.map +1 -1
- package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -1
- package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteAudioTrack.js +6 -8
- package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js +6 -8
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRole.js.map +1 -1
- package/lib/commonjs/classes/HMSRoleChangeRequest.js.map +1 -1
- package/lib/commonjs/classes/HMSRoom.js +3 -0
- package/lib/commonjs/classes/HMSRoom.js.map +1 -1
- package/lib/commonjs/classes/HMSRoomUpdate.js +1 -3
- package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +119 -239
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
- package/lib/commonjs/classes/HMSSimulcastLayerSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSSpeaker.js.map +1 -1
- package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSTrackSource.js +15 -0
- package/lib/commonjs/classes/HMSTrackSource.js.map +1 -0
- package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
- package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
- package/lib/commonjs/classes/HmsView.js +64 -16
- package/lib/commonjs/classes/HmsView.js.map +1 -1
- package/lib/commonjs/index.js +14 -28
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/classes/HMSAudioCodec.js.map +1 -1
- package/lib/module/classes/HMSAudioSettings.js.map +1 -1
- package/lib/module/classes/HMSAudioTrack.js.map +1 -1
- package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
- package/lib/module/classes/HMSCameraFacing.js.map +1 -1
- package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
- package/lib/module/classes/HMSConfig.js.map +1 -1
- package/lib/module/classes/HMSEncoder.js +30 -10
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSException.js.map +1 -1
- package/lib/module/classes/HMSHLSConfig.js.map +1 -1
- package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -1
- package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -1
- package/lib/module/classes/HMSHLSRecordingState.js.map +1 -1
- package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
- package/lib/module/classes/HMSHLSVariant.js.map +1 -1
- package/lib/module/classes/HMSHelper.js.map +1 -1
- package/lib/module/classes/HMSLocalAudioStats.js.map +1 -1
- package/lib/module/classes/HMSLocalAudioTrack.js +6 -6
- package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
- package/lib/module/classes/HMSLocalPeer.js.map +1 -1
- package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/module/classes/HMSLocalVideoTrack.js +6 -6
- package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSLogLevel.js.map +1 -1
- package/lib/module/classes/HMSLogger.js +10 -0
- package/lib/module/classes/HMSLogger.js.map +1 -1
- package/lib/module/classes/HMSMessage.js +1 -1
- package/lib/module/classes/HMSMessage.js.map +1 -1
- package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
- package/lib/module/classes/HMSMessageRecipientType.js.map +1 -1
- package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/module/classes/HMSPermissions.js.map +1 -1
- package/lib/module/classes/HMSPublishSettings.js.map +1 -1
- package/lib/module/classes/HMSRTCStats.js.map +1 -1
- package/lib/module/classes/HMSRTCStatsReport.js.map +1 -1
- package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -1
- package/lib/module/classes/HMSRemoteAudioTrack.js +6 -6
- package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
- package/lib/module/classes/HMSRemotePeer.js.map +1 -1
- package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -1
- package/lib/module/classes/HMSRemoteVideoTrack.js +6 -6
- package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSRole.js.map +1 -1
- package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
- package/lib/module/classes/HMSRoom.js +3 -0
- package/lib/module/classes/HMSRoom.js.map +1 -1
- package/lib/module/classes/HMSRoomUpdate.js +1 -3
- package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +118 -239
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
- package/lib/module/classes/HMSSimulcastLayerSettings.js.map +1 -1
- package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/module/classes/HMSSpeaker.js.map +1 -1
- package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/module/classes/HMSTrack.js.map +1 -1
- package/lib/module/classes/HMSTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSTrackSource.js +8 -0
- package/lib/module/classes/HMSTrackSource.js.map +1 -0
- package/lib/module/classes/HMSTrackType.js.map +1 -1
- package/lib/module/classes/HMSTrackUpdate.js.map +1 -1
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/classes/HMSVideoCodec.js.map +1 -1
- package/lib/module/classes/HMSVideoResolution.js.map +1 -1
- package/lib/module/classes/HMSVideoSettings.js.map +1 -1
- package/lib/module/classes/HMSVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSVideoViewMode.js.map +1 -1
- package/lib/module/classes/HmsView.js +62 -16
- package/lib/module/classes/HmsView.js.map +1 -1
- package/lib/module/index.js +1 -2
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +2 -2
- package/lib/typescript/classes/HMSEncoder.d.ts +9 -3
- package/lib/typescript/classes/HMSLogger.d.ts +3 -0
- package/lib/typescript/classes/HMSMessage.d.ts +3 -3
- package/lib/typescript/classes/HMSRoom.d.ts +2 -0
- package/lib/typescript/classes/HMSRoomUpdate.d.ts +1 -3
- package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +2 -2
- package/lib/typescript/classes/HMSSDK.d.ts +6 -10
- package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -2
- package/lib/typescript/classes/HMSTrackSource.d.ts +5 -0
- package/lib/typescript/classes/HmsView.d.ts +5 -7
- package/lib/typescript/index.d.ts +1 -2
- package/package.json +2 -2
- package/react-native-hms.podspec +2 -2
- package/src/classes/HMSBrowserRecordingState.ts +2 -2
- package/src/classes/HMSEncoder.ts +30 -18
- package/src/classes/HMSLocalAudioTrack.ts +6 -6
- package/src/classes/HMSLocalVideoTrack.ts +6 -6
- package/src/classes/HMSLogger.ts +11 -0
- package/src/classes/HMSMessage.ts +4 -4
- package/src/classes/HMSRemoteAudioTrack.ts +6 -6
- package/src/classes/HMSRemoteVideoTrack.ts +6 -6
- package/src/classes/HMSRoom.ts +3 -0
- package/src/classes/HMSRoomUpdate.ts +1 -3
- package/src/classes/HMSRtmpStreamingState.ts +2 -2
- package/src/classes/HMSSDK.tsx +58 -69
- package/src/classes/HMSServerRecordingState.ts +2 -2
- package/src/classes/HMSTrackSource.ts +5 -0
- package/src/classes/HmsView.tsx +98 -48
- package/src/index.ts +1 -2
- package/lib/commonjs/classes/HMSSpeakerUpdate.js +0 -26
- package/lib/commonjs/classes/HMSSpeakerUpdate.js.map +0 -1
- package/lib/module/classes/HMSSpeakerUpdate.js +0 -17
- package/lib/module/classes/HMSSpeakerUpdate.js.map +0 -1
- package/lib/typescript/classes/HMSSpeakerUpdate.d.ts +0 -11
- 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
|
|
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:
|
|
366
|
-
data?.
|
|
363
|
+
const onSpeaker = (data: HMSSpeaker[]) => {
|
|
364
|
+
data?.map((speaker: HMSSpeaker) =>
|
|
367
365
|
console.log('speaker audio level: ', speaker?.level)
|
|
368
366
|
);
|
|
369
367
|
};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/android/build.gradle
CHANGED
|
@@ -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.
|
|
67
|
-
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.
|
|
68
|
-
implementation 'androidx.constraintlayout:constraintlayout:2.1.
|
|
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
|
|
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
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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",
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
|
|
329
|
+
hmsHlsRecordingConfig,
|
|
330
|
+
arrayOf(Pair("singleFilePerLayer", "Boolean"))
|
|
331
|
+
)
|
|
332
|
+
) {
|
|
295
333
|
singleFilePerLayer = hmsHlsRecordingConfig.getBoolean("singleFilePerLayer")
|
|
296
334
|
}
|
|
297
335
|
if (areAllRequiredKeysAvailable(
|
|
298
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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(
|
|
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
|
-
|
|
473
|
+
Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
|
|
413
474
|
PixelCopy.request(
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
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
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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
|
}
|