@100mslive/react-native-hms 0.9.9 → 0.9.91
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 +50 -43
- 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/.idea/libraries/{Gradle__com_github_100mslive_android_sdk_lib_2_4_2_aar.xml → Gradle__com_github_100mslive_android_sdk_lib_2_4_7_aar.xml} +4 -4
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m97_hms_1_1_aar.xml +11 -0
- package/android/.idea/modules/android.androidTest.iml +4 -4
- package/android/.idea/modules/android.main.iml +4 -4
- package/android/.idea/modules/android.unitTest.iml +4 -4
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +84 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +77 -8
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +95 -22
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +86 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +255 -34
- package/ios/HMSDecoder.swift +9 -8
- package/ios/HMSHelper.swift +5 -8
- package/ios/HMSManager.swift +5 -4
- package/ios/HMSRNSDK.swift +27 -32
- package/lib/commonjs/classes/HMSAudioDevice.js +17 -0
- package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioMixingMode.js +15 -0
- package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -0
- package/lib/commonjs/classes/HMSAudioMode.js +17 -0
- package/lib/commonjs/classes/HMSAudioMode.js.map +1 -0
- package/lib/commonjs/classes/HMSEncoder.js +15 -0
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSException.js +18 -13
- package/lib/commonjs/classes/HMSException.js.map +1 -1
- package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSPermissions.js +7 -4
- package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +184 -9
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSUpdateListenerActions.js +1 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/index.js +42 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/classes/HMSAudioDevice.js +10 -0
- package/lib/module/classes/HMSAudioDevice.js.map +1 -0
- package/lib/module/classes/HMSAudioMixingMode.js +8 -0
- package/lib/module/classes/HMSAudioMixingMode.js.map +1 -0
- package/lib/module/classes/HMSAudioMode.js +10 -0
- package/lib/module/classes/HMSAudioMode.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +14 -0
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSException.js +18 -13
- package/lib/module/classes/HMSException.js.map +1 -1
- package/lib/module/classes/HMSHLSConfig.js.map +1 -1
- package/lib/module/classes/HMSPermissions.js +7 -4
- package/lib/module/classes/HMSPermissions.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +184 -9
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/classes/HMSAudioDevice.d.ts +7 -0
- package/lib/typescript/classes/HMSAudioMixingMode.d.ts +5 -0
- package/lib/typescript/classes/HMSAudioMode.d.ts +7 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +2 -0
- package/lib/typescript/classes/HMSException.d.ts +8 -14
- package/lib/typescript/classes/HMSHLSConfig.d.ts +2 -2
- package/lib/typescript/classes/HMSPermissions.d.ts +6 -4
- package/lib/typescript/classes/HMSSDK.d.ts +105 -7
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
- package/lib/typescript/index.d.ts +3 -0
- package/package.json +1 -1
- package/react-native-hms.podspec +1 -1
- package/src/classes/HMSAudioDevice.ts +7 -0
- package/src/classes/HMSAudioMixingMode.ts +5 -0
- package/src/classes/HMSAudioMode.ts +7 -0
- package/src/classes/HMSEncoder.ts +12 -0
- package/src/classes/HMSException.ts +15 -24
- package/src/classes/HMSHLSConfig.ts +2 -2
- package/src/classes/HMSPermissions.ts +9 -6
- package/src/classes/HMSSDK.tsx +250 -16
- package/src/classes/HMSUpdateListenerActions.ts +1 -0
- package/src/index.ts +3 -0
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m97_aar.xml +0 -11
package/README.md
CHANGED
|
@@ -70,7 +70,7 @@ You will also need to request Camera and Record Audio permissions at runtime bef
|
|
|
70
70
|
|
|
71
71
|
We suggest using [react-native-permission](https://www.npmjs.com/package/react-native-permissions) to acquire permissions from both platforms.
|
|
72
72
|
|
|
73
|
-
## QuickStart
|
|
73
|
+
## [QuickStart](https://www.100ms.live/docs/react-native/v2/guides/quickstart)
|
|
74
74
|
|
|
75
75
|
The package exports all the classes and a HMSSDK class that manages everything.
|
|
76
76
|
|
|
@@ -88,7 +88,7 @@ const hmsInstance = await HMSSDK.build();
|
|
|
88
88
|
...
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
## Add event listeners
|
|
91
|
+
## [Add event listeners](https://www.100ms.live/docs/react-native/v2/features/event-listeners)
|
|
92
92
|
|
|
93
93
|
add event listeners for all the events such as onPreview, onJoin, onPeerUpdate etc. the actions can be found in HMSUpdateListenerActions class
|
|
94
94
|
|
|
@@ -107,7 +107,7 @@ hmsInstance.addEventListener(
|
|
|
107
107
|
|
|
108
108
|
The event handlers are the way of handling any update happening in hms all events can be found in HMSUpdateListenerActions class
|
|
109
109
|
|
|
110
|
-
## Error handling
|
|
110
|
+
## [Error handling](https://www.100ms.live/docs/react-native/v2/features/error-handling)
|
|
111
111
|
|
|
112
112
|
```js
|
|
113
113
|
import { HMSUpdateListenerActions } from '@100mslive/react-native-hms';
|
|
@@ -116,7 +116,7 @@ import { HMSUpdateListenerActions } from '@100mslive/react-native-hms';
|
|
|
116
116
|
hmsInstance.addEventListener(HMSUpdateListenerActions.ON_ERROR, onError);
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
## Join the room
|
|
119
|
+
## [Join the room](https://www.100ms.live/docs/react-native/v2/features/join)
|
|
120
120
|
|
|
121
121
|
Joining the room connects you to the remote peer and broadcasts your stream to other peers, we need instance of HMSConfig in order to pass the details of room and user to join function
|
|
122
122
|
|
|
@@ -178,7 +178,7 @@ remotePeers.map((remotePeer: HMSRemotePeer) => {
|
|
|
178
178
|
...
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
## Display a video in HmsView
|
|
181
|
+
## [Display a video in HmsView](https://www.100ms.live/docs/react-native/v2/features/render-video)
|
|
182
182
|
|
|
183
183
|
```js
|
|
184
184
|
import { HMSVideoViewMode } from '@100mslive/react-native-hms';
|
|
@@ -201,7 +201,7 @@ const styles = StyleSheet.create({
|
|
|
201
201
|
...
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
-
## Mute/Unmute others
|
|
204
|
+
## [Mute/Unmute others](https://www.100ms.live/docs/react-native/v2/features/change-track-state)
|
|
205
205
|
|
|
206
206
|
```js
|
|
207
207
|
const mute: boolean = true;
|
|
@@ -211,21 +211,21 @@ hmsInstance?.changeTrackState(videoTrack as HMSTrack, mute);
|
|
|
211
211
|
|
|
212
212
|
const unmute: boolean = false;
|
|
213
213
|
|
|
214
|
-
hmsInstance?.changeTrackState(audioTrack as HMSTrack, unmute);
|
|
215
|
-
hmsInstance?.changeTrackState(videoTrack as HMSTrack, unmute);
|
|
214
|
+
await hmsInstance?.changeTrackState(audioTrack as HMSTrack, unmute);
|
|
215
|
+
await hmsInstance?.changeTrackState(videoTrack as HMSTrack, unmute);
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
## End Room for all
|
|
218
|
+
## [End Room for all](https://www.100ms.live/docs/react-native/v2/features/end-room)
|
|
219
219
|
|
|
220
220
|
```js
|
|
221
221
|
const reason = 'Host ended the room';
|
|
222
222
|
const lock = false; // optional parameter
|
|
223
223
|
|
|
224
224
|
// hms instance acquired by build method
|
|
225
|
-
hmsInstance.endRoom(reason, lock);
|
|
225
|
+
await hmsInstance.endRoom(reason, lock);
|
|
226
226
|
```
|
|
227
227
|
|
|
228
|
-
## Remove Peer
|
|
228
|
+
## [Remove Peer](https://www.100ms.live/docs/react-native/v2/features/remove-peer)
|
|
229
229
|
|
|
230
230
|
```js
|
|
231
231
|
import { HMSPeer } from '@100mslive/react-native-hms';
|
|
@@ -235,10 +235,10 @@ const reason = 'removed from room';
|
|
|
235
235
|
// hms instance acquired by build method
|
|
236
236
|
const peer: HMSPeer = hmsInstance?.remotePeers[0];
|
|
237
237
|
|
|
238
|
-
hmsInstance.removePeer(peer, reason);
|
|
238
|
+
await hmsInstance.removePeer(peer, reason);
|
|
239
239
|
```
|
|
240
240
|
|
|
241
|
-
## Sending messages
|
|
241
|
+
## [Sending messages](https://www.100ms.live/docs/react-native/v2/features/chat)
|
|
242
242
|
|
|
243
243
|
```js
|
|
244
244
|
import { HMSRole, HMSPeer } from '@100mslive/react-native-hms';
|
|
@@ -249,12 +249,12 @@ const roles: HMSRole[] = hmsInstance?.knownRoles
|
|
|
249
249
|
const peer: HMSPeer = hmsInstance?.remotePeers[0]
|
|
250
250
|
|
|
251
251
|
// send a different type of messages
|
|
252
|
-
hmsInstance?.sendBroadcastMessage(message);
|
|
253
|
-
hmsInstance?.sendGroupMessage(message, [role[0]);
|
|
254
|
-
hmsInstance?.sendDirectMessage(message, peer);
|
|
252
|
+
await hmsInstance?.sendBroadcastMessage(message);
|
|
253
|
+
await hmsInstance?.sendGroupMessage(message, [role[0]);
|
|
254
|
+
await hmsInstance?.sendDirectMessage(message, peer);
|
|
255
255
|
```
|
|
256
256
|
|
|
257
|
-
## Role Change
|
|
257
|
+
## [Role Change](https://www.100ms.live/docs/react-native/v2/features/change-role)
|
|
258
258
|
|
|
259
259
|
```js
|
|
260
260
|
import { HMSRole, HMSRemotePeer } from '@100mslive/react-native-hms';
|
|
@@ -267,18 +267,18 @@ const peer: HMSRemotePeer = hmsInstance?.remotePeers[0];
|
|
|
267
267
|
|
|
268
268
|
const force = false;
|
|
269
269
|
|
|
270
|
-
hmsInstance.changeRole(peer, newRole, force); // request role change
|
|
271
|
-
hmsInstance.changeRole(peer, newRole, !force); // force role change
|
|
270
|
+
await hmsInstance.changeRole(peer, newRole, force); // request role change
|
|
271
|
+
await hmsInstance.changeRole(peer, newRole, !force); // force role change
|
|
272
272
|
```
|
|
273
273
|
|
|
274
|
-
## Raise Hand & BRB
|
|
274
|
+
## [Raise Hand & BRB](https://www.100ms.live/docs/react-native/v2/advanced-features/change-metadata)
|
|
275
275
|
|
|
276
276
|
```js
|
|
277
277
|
const parsedMetadata = JSON.parse(hmsInstance?.localPeer?.metadata);
|
|
278
278
|
|
|
279
279
|
// Raise Hand
|
|
280
280
|
// hms instance acquired by build method
|
|
281
|
-
hmsInstance?.changeMetadata(
|
|
281
|
+
await hmsInstance?.changeMetadata(
|
|
282
282
|
JSON.stringify({
|
|
283
283
|
...parsedMetadata,
|
|
284
284
|
isHandRaised: true,
|
|
@@ -287,7 +287,7 @@ hmsInstance?.changeMetadata(
|
|
|
287
287
|
|
|
288
288
|
// BRB
|
|
289
289
|
// hms instance acquired by build method
|
|
290
|
-
hmsInstance?.changeMetadata(
|
|
290
|
+
await hmsInstance?.changeMetadata(
|
|
291
291
|
JSON.stringify({
|
|
292
292
|
...parsedMetadata,
|
|
293
293
|
isBRBOn: true,
|
|
@@ -295,7 +295,7 @@ hmsInstance?.changeMetadata(
|
|
|
295
295
|
);
|
|
296
296
|
```
|
|
297
297
|
|
|
298
|
-
## HLS Streaming
|
|
298
|
+
## [HLS Streaming](https://www.100ms.live/docs/react-native/v2/features/hls-streaming)
|
|
299
299
|
|
|
300
300
|
```js
|
|
301
301
|
import {
|
|
@@ -304,25 +304,32 @@ import {
|
|
|
304
304
|
} from '@100mslive/react-native-hms';
|
|
305
305
|
|
|
306
306
|
const startHLSStreaming = () => {
|
|
307
|
+
// Default Settings
|
|
308
|
+
await hmsInstance.startHLSStreaming()
|
|
309
|
+
|
|
310
|
+
// Custom Settings
|
|
307
311
|
const hmsHLSMeetingURLVariant = new HMSHLSMeetingURLVariant({
|
|
308
|
-
meetingUrl:
|
|
309
|
-
'https://yogi.app.100ms.live/preview/nih-bkn-vek?token=beam_recording',
|
|
312
|
+
meetingUrl: 'https://yogi.app.100ms.live/preview/nih-bkn-vek?skip_preview=true',
|
|
310
313
|
metadata: '',
|
|
311
314
|
});
|
|
312
315
|
|
|
316
|
+
const hmsHLSRecordingConfig = new HMSHLSRecordingConfig({
|
|
317
|
+
singleFilePerLayer: false,
|
|
318
|
+
videoOnDemand: false,
|
|
319
|
+
});
|
|
320
|
+
|
|
313
321
|
const hmsHLSConfig = new HMSHLSConfig({
|
|
322
|
+
hlsRecordingConfig: hmsHLSRecordingConfig,
|
|
314
323
|
meetingURLVariants: [hlsStreamingDetails],
|
|
315
324
|
});
|
|
316
325
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
.
|
|
320
|
-
.then((r) => console.log(r))
|
|
321
|
-
.catch((e) => console.log(e));
|
|
326
|
+
await hmsInstance.startHLSStreaming(hmsHLSConfig)
|
|
327
|
+
.then(d => console.log('Start Hls Success: ', d))
|
|
328
|
+
.catch(e => console.log('Start Hls Error: ', e));
|
|
322
329
|
};
|
|
323
330
|
```
|
|
324
331
|
|
|
325
|
-
## Start Streaming / Recording
|
|
332
|
+
## [Start Streaming / Recording](https://www.100ms.live/docs/react-native/v2/features/recording)
|
|
326
333
|
|
|
327
334
|
```js
|
|
328
335
|
import { HMSRTMPConfig } from '@100mslive/react-native-hms';
|
|
@@ -344,24 +351,24 @@ const recordingDetails = HMSRTMPConfig({
|
|
|
344
351
|
});
|
|
345
352
|
|
|
346
353
|
// hms instance acquired by build method
|
|
347
|
-
|
|
354
|
+
await hmsInstance?.startRTMPOrRecording(recordingDetails);
|
|
348
355
|
```
|
|
349
356
|
|
|
350
|
-
## Get RTC Stats
|
|
357
|
+
## [Get RTC Stats](https://www.100ms.live/docs/react-native/v2/features/rtc-stats)
|
|
351
358
|
|
|
352
359
|
```js
|
|
353
360
|
// hms instance acquired by build method
|
|
354
361
|
hmsInstance?.enableRTCStats();
|
|
355
362
|
```
|
|
356
363
|
|
|
357
|
-
## Screenshare
|
|
364
|
+
## [Screenshare](https://www.100ms.live/docs/react-native/v2/features/screenshare)
|
|
358
365
|
|
|
359
366
|
```js
|
|
360
367
|
// hms instance acquired by build method
|
|
361
|
-
hmsInstance?.startScreenshare();
|
|
368
|
+
await hmsInstance?.startScreenshare();
|
|
362
369
|
```
|
|
363
370
|
|
|
364
|
-
## Getting Audio Levels for all speaking peers
|
|
371
|
+
## [Getting Audio Levels for all speaking peers](https://www.100ms.live/docs/react-native/v2/advanced-features/show-audio-level)
|
|
365
372
|
|
|
366
373
|
```js
|
|
367
374
|
import {
|
|
@@ -379,7 +386,7 @@ const onSpeaker = (data: HMSSpeaker[]) => {
|
|
|
379
386
|
};
|
|
380
387
|
```
|
|
381
388
|
|
|
382
|
-
## Local mute others
|
|
389
|
+
## [Local mute others](https://www.100ms.live/docs/react-native/v2/features/playback-allowed)
|
|
383
390
|
|
|
384
391
|
```js
|
|
385
392
|
const remotePeer: HMSRemotePeer;
|
|
@@ -387,11 +394,11 @@ const isAudioPlaybackAllowed = remotePeer.remoteAudioTrack().setPlaybackAllowed(
|
|
|
387
394
|
const isVideoPlaybackAllowed = remotePeer.remoteVideoTrack().setPlaybackAllowed(true);
|
|
388
395
|
|
|
389
396
|
// hms instance acquired by build method
|
|
390
|
-
hmsInstance.
|
|
391
|
-
hmsInstance.
|
|
397
|
+
hmsInstance.setPlaybackForAllAudio(true) // mute
|
|
398
|
+
hmsInstance.setPlaybackForAllAudio(false) // unmute
|
|
392
399
|
```
|
|
393
400
|
|
|
394
|
-
## Locally Set Volume
|
|
401
|
+
## [Locally Set Volume](https://www.100ms.live/docs/react-native/v2/advanced-features/set-volume)
|
|
395
402
|
|
|
396
403
|
```js
|
|
397
404
|
const volume: Float = 1.0;
|
|
@@ -401,16 +408,16 @@ const track: HMSTrack = remotePeer.audioTrack as HMSTrack;
|
|
|
401
408
|
hmsInstance?.setVolume(track, volume);
|
|
402
409
|
```
|
|
403
410
|
|
|
404
|
-
## Change name
|
|
411
|
+
## [Change name](https://www.100ms.live/docs/react-native/v2/features/change-name)
|
|
405
412
|
|
|
406
413
|
```js
|
|
407
414
|
const newName: string = 'new name';
|
|
408
415
|
|
|
409
416
|
// hms instance acquired by build method
|
|
410
|
-
hmsInstance.changeName(newName);
|
|
417
|
+
await hmsInstance.changeName(newName);
|
|
411
418
|
```
|
|
412
419
|
|
|
413
|
-
## Join with specific Track Settings
|
|
420
|
+
## [Join with specific Track Settings](https://www.100ms.live/docs/react-native/v2/advanced-features/track-settings)
|
|
414
421
|
|
|
415
422
|
```js
|
|
416
423
|
const getTrackSettings = () => {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<component name="libraryTable">
|
|
2
|
-
<library name="Gradle: com.github.100mslive.android-sdk:lib:2.4.
|
|
2
|
+
<library name="Gradle: com.github.100mslive.android-sdk:lib:2.4.7@aar">
|
|
3
3
|
<CLASSES>
|
|
4
|
-
<root url="jar://$USER_HOME$/.gradle/caches/transforms-3/
|
|
5
|
-
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/
|
|
6
|
-
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/
|
|
4
|
+
<root url="jar://$USER_HOME$/.gradle/caches/transforms-3/5eda8611962fc3f6160e95738ded2f29/transformed/lib-2.4.7/jars/classes.jar!/" />
|
|
5
|
+
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/5eda8611962fc3f6160e95738ded2f29/transformed/lib-2.4.7/res" />
|
|
6
|
+
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/5eda8611962fc3f6160e95738ded2f29/transformed/lib-2.4.7/AndroidManifest.xml" />
|
|
7
7
|
</CLASSES>
|
|
8
8
|
<JAVADOC />
|
|
9
9
|
<SOURCES />
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<component name="libraryTable">
|
|
2
|
+
<library name="Gradle: com.github.100mslive:webrtc:m97-hms-1.1@aar">
|
|
3
|
+
<CLASSES>
|
|
4
|
+
<root url="jar://$USER_HOME$/.gradle/caches/transforms-3/5c14d42daa2863604d702fd4b5f380df/transformed/webrtc-m97-hms-1.1/jars/classes.jar!/" />
|
|
5
|
+
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/5c14d42daa2863604d702fd4b5f380df/transformed/webrtc-m97-hms-1.1/res" />
|
|
6
|
+
<root url="file://$USER_HOME$/.gradle/caches/transforms-3/5c14d42daa2863604d702fd4b5f380df/transformed/webrtc-m97-hms-1.1/AndroidManifest.xml" />
|
|
7
|
+
</CLASSES>
|
|
8
|
+
<JAVADOC />
|
|
9
|
+
<SOURCES />
|
|
10
|
+
</library>
|
|
11
|
+
</component>
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar</arg>
|
|
76
76
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.10/c118700e3a33c8a0d9adc920e9dec0831171925/kotlin-stdlib-common-1.6.10.jar</arg>
|
|
77
77
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fbjni/fbjni-java-only/0.2.2/de5152e6b7ce18dd242be23994e702309e66e7da/fbjni-java-only-0.2.2.jar</arg>
|
|
78
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
79
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
78
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/4a362e6d697339a1c01b7cf380bcacc1/transformed/lib-2.4.7-api.jar</arg>
|
|
79
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/dcda581ceda31a81a19055e711e75c70/transformed/webrtc-m97-hms-1.1-api.jar</arg>
|
|
80
80
|
<arg>$USER_HOME$/.gradle/caches/transforms-3/43630e9b70fd1a26e124ad5eff187a73/transformed/constraintlayout-2.1.3-api.jar</arg>
|
|
81
81
|
<arg>$USER_HOME$/Library/Android/sdk/platforms/android-30/android.jar</arg>
|
|
82
82
|
<arg>$USER_HOME$/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar</arg>
|
|
@@ -193,8 +193,8 @@
|
|
|
193
193
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:nativeimagefilters:2.5.0@aar" level="project" />
|
|
194
194
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:nativeimagetranscoder:2.5.0@aar" level="project" />
|
|
195
195
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:imagepipeline-okhttp3:2.5.0@aar" level="project" />
|
|
196
|
-
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.
|
|
197
|
-
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive:webrtc:m97@aar" level="project" />
|
|
196
|
+
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.7@aar" level="project" />
|
|
197
|
+
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive:webrtc:m97-hms-1.1@aar" level="project" />
|
|
198
198
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.constraintlayout:constraintlayout:2.1.3@aar" level="project" />
|
|
199
199
|
</component>
|
|
200
200
|
<component name="TestModuleProperties" production-module="android.main" />
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar</arg>
|
|
76
76
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.10/c118700e3a33c8a0d9adc920e9dec0831171925/kotlin-stdlib-common-1.6.10.jar</arg>
|
|
77
77
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fbjni/fbjni-java-only/0.2.2/de5152e6b7ce18dd242be23994e702309e66e7da/fbjni-java-only-0.2.2.jar</arg>
|
|
78
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
79
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
78
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/4a362e6d697339a1c01b7cf380bcacc1/transformed/lib-2.4.7-api.jar</arg>
|
|
79
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/dcda581ceda31a81a19055e711e75c70/transformed/webrtc-m97-hms-1.1-api.jar</arg>
|
|
80
80
|
<arg>$USER_HOME$/.gradle/caches/transforms-3/43630e9b70fd1a26e124ad5eff187a73/transformed/constraintlayout-2.1.3-api.jar</arg>
|
|
81
81
|
<arg>$USER_HOME$/Library/Android/sdk/platforms/android-30/android.jar</arg>
|
|
82
82
|
<arg>$USER_HOME$/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar</arg>
|
|
@@ -189,8 +189,8 @@
|
|
|
189
189
|
<orderEntry type="library" name="Gradle: com.facebook.fresco:nativeimagefilters:2.5.0@aar" level="project" />
|
|
190
190
|
<orderEntry type="library" name="Gradle: com.facebook.fresco:nativeimagetranscoder:2.5.0@aar" level="project" />
|
|
191
191
|
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-okhttp3:2.5.0@aar" level="project" />
|
|
192
|
-
<orderEntry type="library" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.
|
|
193
|
-
<orderEntry type="library" name="Gradle: com.github.100mslive:webrtc:m97@aar" level="project" />
|
|
192
|
+
<orderEntry type="library" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.7@aar" level="project" />
|
|
193
|
+
<orderEntry type="library" name="Gradle: com.github.100mslive:webrtc:m97-hms-1.1@aar" level="project" />
|
|
194
194
|
<orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:2.1.3@aar" level="project" />
|
|
195
195
|
</component>
|
|
196
196
|
</module>
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar</arg>
|
|
76
76
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.10/c118700e3a33c8a0d9adc920e9dec0831171925/kotlin-stdlib-common-1.6.10.jar</arg>
|
|
77
77
|
<arg>$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.fbjni/fbjni-java-only/0.2.2/de5152e6b7ce18dd242be23994e702309e66e7da/fbjni-java-only-0.2.2.jar</arg>
|
|
78
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
79
|
-
<arg>$USER_HOME$/.gradle/caches/transforms-3/
|
|
78
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/4a362e6d697339a1c01b7cf380bcacc1/transformed/lib-2.4.7-api.jar</arg>
|
|
79
|
+
<arg>$USER_HOME$/.gradle/caches/transforms-3/dcda581ceda31a81a19055e711e75c70/transformed/webrtc-m97-hms-1.1-api.jar</arg>
|
|
80
80
|
<arg>$USER_HOME$/.gradle/caches/transforms-3/43630e9b70fd1a26e124ad5eff187a73/transformed/constraintlayout-2.1.3-api.jar</arg>
|
|
81
81
|
<arg>$USER_HOME$/Library/Android/sdk/platforms/android-30/android.jar</arg>
|
|
82
82
|
<arg>$USER_HOME$/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar</arg>
|
|
@@ -187,8 +187,8 @@
|
|
|
187
187
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:nativeimagefilters:2.5.0@aar" level="project" />
|
|
188
188
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:nativeimagetranscoder:2.5.0@aar" level="project" />
|
|
189
189
|
<orderEntry type="library" scope="TEST" name="Gradle: com.facebook.fresco:imagepipeline-okhttp3:2.5.0@aar" level="project" />
|
|
190
|
-
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.
|
|
191
|
-
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive:webrtc:m97@aar" level="project" />
|
|
190
|
+
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive.android-sdk:lib:2.4.7@aar" level="project" />
|
|
191
|
+
<orderEntry type="library" scope="TEST" name="Gradle: com.github.100mslive:webrtc:m97-hms-1.1@aar" level="project" />
|
|
192
192
|
<orderEntry type="library" scope="TEST" name="Gradle: androidx.constraintlayout:constraintlayout:2.1.3@aar" level="project" />
|
|
193
193
|
</component>
|
|
194
194
|
<component name="TestModuleProperties" production-module="android.main" />
|
package/android/build.gradle
CHANGED
|
@@ -36,7 +36,7 @@ android {
|
|
|
36
36
|
|
|
37
37
|
buildTypes {
|
|
38
38
|
release {
|
|
39
|
-
minifyEnabled
|
|
39
|
+
minifyEnabled true
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
lintOptions {
|
|
@@ -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.4.
|
|
66
|
+
implementation 'com.github.100mslive.android-sdk:lib:2.4.8'
|
|
67
67
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
|
|
68
68
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
|
69
69
|
implementation 'androidx.appcompat:appcompat:1.3.1'
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
package com.reactnativehmssdk
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import android.media.projection.MediaProjectionManager
|
|
7
|
+
import android.os.Bundle
|
|
8
|
+
import androidx.activity.ComponentActivity
|
|
9
|
+
import androidx.activity.result.ActivityResultLauncher
|
|
10
|
+
import androidx.activity.result.contract.ActivityResultContracts
|
|
11
|
+
import live.hms.video.error.HMSException
|
|
12
|
+
import live.hms.video.sdk.HMSActionResultListener
|
|
13
|
+
|
|
14
|
+
class HMSAudioshareActivity : ComponentActivity() {
|
|
15
|
+
private var resultLauncher: ActivityResultLauncher<Intent> =
|
|
16
|
+
this.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
|
17
|
+
if (result.resultCode == Activity.RESULT_OK) {
|
|
18
|
+
val mediaProjectionPermissionResultData: Intent? = result.data
|
|
19
|
+
val id = intent.getStringExtra("id")
|
|
20
|
+
val audioMixingMode = intent.getStringExtra("audioMixingMode")
|
|
21
|
+
HMSManager.hmsCollection[id]?.hmsSDK?.startAudioshare(
|
|
22
|
+
object : HMSActionResultListener {
|
|
23
|
+
override fun onError(error: HMSException) {
|
|
24
|
+
finish()
|
|
25
|
+
HMSManager.hmsCollection[id]?.audioshareCallback?.reject(error)
|
|
26
|
+
HMSManager.hmsCollection[id]?.emitHMSError(error)
|
|
27
|
+
}
|
|
28
|
+
override fun onSuccess() {
|
|
29
|
+
HMSManager.hmsCollection[id]?.isAudioSharing = true
|
|
30
|
+
HMSManager.hmsCollection[id]?.audioshareCallback?.resolve(
|
|
31
|
+
HMSManager.hmsCollection[id]?.emitHMSSuccess()
|
|
32
|
+
)
|
|
33
|
+
finish()
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
mediaProjectionPermissionResultData,
|
|
37
|
+
HMSHelper.getAudioMixingMode(audioMixingMode)
|
|
38
|
+
)
|
|
39
|
+
} else {
|
|
40
|
+
val id = intent.getStringExtra("id")
|
|
41
|
+
val error =
|
|
42
|
+
HMSException(
|
|
43
|
+
103,
|
|
44
|
+
"RESULT_CANCELED",
|
|
45
|
+
"RESULT_CANCELED",
|
|
46
|
+
"RESULT_CANCELED",
|
|
47
|
+
"RESULT_CANCELED"
|
|
48
|
+
)
|
|
49
|
+
HMSManager.hmsCollection[id]?.audioshareCallback?.reject(error)
|
|
50
|
+
HMSManager.hmsCollection[id]?.emitHMSError(error)
|
|
51
|
+
finish()
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
56
|
+
super.onCreate(savedInstanceState)
|
|
57
|
+
startAudioshare()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private fun startAudioshare() {
|
|
61
|
+
val id = intent.getStringExtra("id")
|
|
62
|
+
val isAudioShared = HMSManager.hmsCollection[id]?.isAudioSharing
|
|
63
|
+
if (isAudioShared !== null && !isAudioShared) {
|
|
64
|
+
try {
|
|
65
|
+
val mediaProjectionManager =
|
|
66
|
+
getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
|
|
67
|
+
resultLauncher.launch(mediaProjectionManager.createScreenCaptureIntent())
|
|
68
|
+
} catch (e: Exception) {
|
|
69
|
+
println(e)
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
HMSManager.hmsCollection[id]?.emitHMSError(
|
|
73
|
+
HMSException(
|
|
74
|
+
103,
|
|
75
|
+
"AUDIOSHARE_IS_ALREADY_RUNNING",
|
|
76
|
+
"AUDIOSHARE_IS_ALREADY_RUNNING",
|
|
77
|
+
"AUDIOSHARE_IS_ALREADY_RUNNING",
|
|
78
|
+
"AUDIOSHARE_IS_ALREADY_RUNNING"
|
|
79
|
+
)
|
|
80
|
+
)
|
|
81
|
+
finish()
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.reactnativehmssdk
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.*
|
|
4
|
+
import live.hms.video.connection.stats.*
|
|
4
5
|
import live.hms.video.connection.stats.quality.HMSNetworkQuality
|
|
5
6
|
import live.hms.video.error.HMSException
|
|
6
7
|
import live.hms.video.media.settings.HMSAudioTrackSettings
|
|
@@ -125,10 +126,10 @@ object HMSDecoder {
|
|
|
125
126
|
permissions.putBoolean("endRoom", hmsPermissions.endRoom)
|
|
126
127
|
permissions.putBoolean("removeOthers", hmsPermissions.removeOthers)
|
|
127
128
|
permissions.putBoolean("mute", hmsPermissions.mute)
|
|
128
|
-
permissions.putBoolean("
|
|
129
|
+
permissions.putBoolean("browserRecording", hmsPermissions.browserRecording)
|
|
129
130
|
permissions.putBoolean("unmute", hmsPermissions.unmute)
|
|
130
|
-
permissions.putBoolean("
|
|
131
|
-
permissions.putBoolean("
|
|
131
|
+
permissions.putBoolean("hlsStreaming", hmsPermissions.hlsStreaming)
|
|
132
|
+
permissions.putBoolean("rtmpStreaming", hmsPermissions.rtmpStreaming)
|
|
132
133
|
permissions.putBoolean("changeRole", hmsPermissions.changeRole)
|
|
133
134
|
}
|
|
134
135
|
return permissions
|
|
@@ -197,7 +198,7 @@ object HMSDecoder {
|
|
|
197
198
|
return peer
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
|
|
201
|
+
fun getHmsLocalAudioTrack(track: HMSLocalAudioTrack?): WritableMap {
|
|
201
202
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
202
203
|
if (track != null) {
|
|
203
204
|
hmsTrack.putDouble("volume", track.volume)
|
|
@@ -211,7 +212,7 @@ object HMSDecoder {
|
|
|
211
212
|
return hmsTrack
|
|
212
213
|
}
|
|
213
214
|
|
|
214
|
-
|
|
215
|
+
fun getHmsLocalVideoTrack(track: HMSLocalVideoTrack?): WritableMap {
|
|
215
216
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
216
217
|
if (track != null) {
|
|
217
218
|
hmsTrack.putBoolean("isDegraded", track.isDegraded)
|
|
@@ -292,7 +293,7 @@ object HMSDecoder {
|
|
|
292
293
|
return peer
|
|
293
294
|
}
|
|
294
295
|
|
|
295
|
-
|
|
296
|
+
fun getHmsRemoteAudioTrack(track: HMSRemoteAudioTrack?): WritableMap {
|
|
296
297
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
297
298
|
if (track != null) {
|
|
298
299
|
hmsTrack.putBoolean("isPlaybackAllowed", track.isPlaybackAllowed)
|
|
@@ -305,7 +306,7 @@ object HMSDecoder {
|
|
|
305
306
|
return hmsTrack
|
|
306
307
|
}
|
|
307
308
|
|
|
308
|
-
|
|
309
|
+
fun getHmsRemoteVideoTrack(track: HMSRemoteVideoTrack?): WritableMap {
|
|
309
310
|
val hmsTrack: WritableMap = Arguments.createMap()
|
|
310
311
|
if (track != null) {
|
|
311
312
|
hmsTrack.putBoolean("isDegraded", track.isDegraded)
|
|
@@ -360,11 +361,11 @@ object HMSDecoder {
|
|
|
360
361
|
if (error !== null) {
|
|
361
362
|
val decodedError: WritableMap = Arguments.createMap()
|
|
362
363
|
decodedError.putInt("code", error.code)
|
|
363
|
-
decodedError.putString("localizedDescription", error.localizedMessage)
|
|
364
364
|
decodedError.putString("description", error.description)
|
|
365
365
|
decodedError.putString("message", error.message)
|
|
366
366
|
decodedError.putString("name", error.name)
|
|
367
367
|
decodedError.putString("action", error.action)
|
|
368
|
+
decodedError.putBoolean("isTerminal", error.isTerminal)
|
|
368
369
|
return decodedError
|
|
369
370
|
}
|
|
370
371
|
return null
|
|
@@ -524,4 +525,72 @@ object HMSDecoder {
|
|
|
524
525
|
}
|
|
525
526
|
return hmsNetworkQuality
|
|
526
527
|
}
|
|
528
|
+
|
|
529
|
+
fun getHMSRTCStats(hmsRtcStats: HMSRTCStats?): WritableMap {
|
|
530
|
+
val rtcStats: WritableMap = Arguments.createMap()
|
|
531
|
+
if (hmsRtcStats != null) {
|
|
532
|
+
rtcStats.putDouble("bitrateReceived", hmsRtcStats.bitrateReceived)
|
|
533
|
+
rtcStats.putDouble("bitrateSent", hmsRtcStats.bitrateSent)
|
|
534
|
+
rtcStats.putString("bytesSent", hmsRtcStats.bytesSent.toString())
|
|
535
|
+
rtcStats.putString("bytesReceived", hmsRtcStats.bytesReceived.toString())
|
|
536
|
+
rtcStats.putString("packetsLost", hmsRtcStats.packetsLost.toString())
|
|
537
|
+
rtcStats.putString("packetsReceived", hmsRtcStats.packetsReceived.toString())
|
|
538
|
+
rtcStats.putDouble("roundTripTime", hmsRtcStats.roundTripTime)
|
|
539
|
+
}
|
|
540
|
+
return rtcStats
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
fun getLocalAudioStats(hmsLocalAudioStats: HMSLocalAudioStats?): WritableMap {
|
|
544
|
+
val localAudioStats: WritableMap = Arguments.createMap()
|
|
545
|
+
if (hmsLocalAudioStats != null) {
|
|
546
|
+
hmsLocalAudioStats.bitrate?.let { localAudioStats.putDouble("bitrate", it) }
|
|
547
|
+
localAudioStats.putString("bytesSent", hmsLocalAudioStats.bytesSent.toString())
|
|
548
|
+
hmsLocalAudioStats.roundTripTime?.let { localAudioStats.putDouble("roundTripTime", it) }
|
|
549
|
+
}
|
|
550
|
+
return localAudioStats
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
fun getLocalVideoStats(hmsLocalVideoStats: HMSLocalVideoStats?): WritableMap {
|
|
554
|
+
val localVideoStats: WritableMap = Arguments.createMap()
|
|
555
|
+
if (hmsLocalVideoStats != null) {
|
|
556
|
+
localVideoStats.putString("bytesSent", hmsLocalVideoStats.bytesSent.toString())
|
|
557
|
+
localVideoStats.putMap(
|
|
558
|
+
"resolution",
|
|
559
|
+
hmsLocalVideoStats.resolution?.let { this.getHmsVideoTrackResolution(it) }
|
|
560
|
+
)
|
|
561
|
+
hmsLocalVideoStats.bitrate?.let { localVideoStats.putDouble("bitrate", it) }
|
|
562
|
+
hmsLocalVideoStats.roundTripTime?.let { localVideoStats.putDouble("roundTripTime", it) }
|
|
563
|
+
hmsLocalVideoStats.frameRate?.let { localVideoStats.putDouble("frameRate", it) }
|
|
564
|
+
}
|
|
565
|
+
return localVideoStats
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
fun getRemoteAudioStats(hmsRemoteAudioStats: HMSRemoteAudioStats?): WritableMap {
|
|
569
|
+
val remoteAudioStats: WritableMap = Arguments.createMap()
|
|
570
|
+
if (hmsRemoteAudioStats != null) {
|
|
571
|
+
hmsRemoteAudioStats.bitrate?.let { remoteAudioStats.putDouble("bitrate", it) }
|
|
572
|
+
remoteAudioStats.putString("bytesReceived", hmsRemoteAudioStats.bytesReceived.toString())
|
|
573
|
+
hmsRemoteAudioStats.jitter?.let { remoteAudioStats.putDouble("jitter", it) }
|
|
574
|
+
hmsRemoteAudioStats.packetsLost?.let { remoteAudioStats.putInt("packetsLost", it) }
|
|
575
|
+
remoteAudioStats.putString("packetsReceived", hmsRemoteAudioStats.packetsReceived.toString())
|
|
576
|
+
}
|
|
577
|
+
return remoteAudioStats
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
fun getRemoteVideoStats(hmsRemoteVideoStats: HMSRemoteVideoStats?): WritableMap {
|
|
581
|
+
val remoteVideoStats: WritableMap = Arguments.createMap()
|
|
582
|
+
if (hmsRemoteVideoStats != null) {
|
|
583
|
+
remoteVideoStats.putString("bytesReceived", hmsRemoteVideoStats.bytesReceived.toString())
|
|
584
|
+
remoteVideoStats.putString("packetsReceived", hmsRemoteVideoStats.packetsReceived.toString())
|
|
585
|
+
hmsRemoteVideoStats.bitrate?.let { remoteVideoStats.putDouble("bitrate", it) }
|
|
586
|
+
remoteVideoStats.putMap(
|
|
587
|
+
"resolution",
|
|
588
|
+
hmsRemoteVideoStats.resolution?.let { this.getHmsVideoTrackResolution(it) }
|
|
589
|
+
)
|
|
590
|
+
hmsRemoteVideoStats.frameRate?.let { remoteVideoStats.putDouble("frameRate", it) }
|
|
591
|
+
hmsRemoteVideoStats.jitter?.let { remoteVideoStats.putDouble("jitter", it) }
|
|
592
|
+
hmsRemoteVideoStats.packetsLost?.let { remoteVideoStats.putInt("packetsLost", it) }
|
|
593
|
+
}
|
|
594
|
+
return remoteVideoStats
|
|
595
|
+
}
|
|
527
596
|
}
|