@fishjam-cloud/react-native-client 0.6.0 → 0.8.0
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 +6 -6
- package/android/build.gradle +6 -2
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +4 -2
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +60 -39
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +11 -19
- package/build/RNFishjamClientModule.d.ts +24 -8
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js +0 -1
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/common/client.d.ts +4 -4
- package/build/common/client.d.ts.map +1 -1
- package/build/common/client.js +4 -4
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +1 -0
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +1 -0
- package/build/common/metadata.js.map +1 -1
- package/build/components/FishjamRoom/index.d.ts +21 -0
- package/build/components/FishjamRoom/index.d.ts.map +1 -1
- package/build/components/FishjamRoom/index.js +29 -9
- package/build/components/FishjamRoom/index.js.map +1 -1
- package/build/components/VideoPreviewView.d.ts +7 -3
- package/build/components/VideoPreviewView.d.ts.map +1 -1
- package/build/components/VideoPreviewView.js +5 -1
- package/build/components/VideoPreviewView.js.map +1 -1
- package/build/components/VideoRendererView.d.ts +13 -0
- package/build/components/VideoRendererView.d.ts.map +1 -1
- package/build/components/VideoRendererView.js +13 -0
- package/build/components/VideoRendererView.js.map +1 -1
- package/build/hooks/internal/useFishjamEvent.d.ts +3 -2
- package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -1
- package/build/hooks/internal/useFishjamEvent.js +25 -1
- package/build/hooks/internal/useFishjamEvent.js.map +1 -1
- package/build/hooks/internal/useFishjamEventState.d.ts +2 -2
- package/build/hooks/internal/useFishjamEventState.d.ts.map +1 -1
- package/build/hooks/internal/useFishjamEventState.js.map +1 -1
- package/build/hooks/useAppScreenShare.d.ts +10 -1
- package/build/hooks/useAppScreenShare.d.ts.map +1 -1
- package/build/hooks/useAppScreenShare.js +9 -7
- package/build/hooks/useAppScreenShare.js.map +1 -1
- package/build/hooks/useAudioSettings.d.ts +4 -0
- package/build/hooks/useAudioSettings.d.ts.map +1 -1
- package/build/hooks/useAudioSettings.js.map +1 -1
- package/build/hooks/useBandwidthEstimation.d.ts +3 -0
- package/build/hooks/useBandwidthEstimation.d.ts.map +1 -1
- package/build/hooks/useBandwidthEstimation.js +6 -1
- package/build/hooks/useBandwidthEstimation.js.map +1 -1
- package/build/hooks/useCamera.d.ts +12 -35
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +11 -60
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useConnection.d.ts +29 -13
- package/build/hooks/useConnection.d.ts.map +1 -1
- package/build/hooks/useConnection.js +11 -5
- package/build/hooks/useConnection.js.map +1 -1
- package/build/hooks/useForegroundService.d.ts +20 -11
- package/build/hooks/useForegroundService.d.ts.map +1 -1
- package/build/hooks/useForegroundService.js +2 -3
- package/build/hooks/useForegroundService.js.map +1 -1
- package/build/hooks/useMicrophone.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +2 -10
- package/build/hooks/usePeerStatus.d.ts.map +1 -1
- package/build/hooks/usePeerStatus.js +1 -0
- package/build/hooks/usePeerStatus.js.map +1 -1
- package/build/hooks/usePeers.d.ts +19 -22
- package/build/hooks/usePeers.d.ts.map +1 -1
- package/build/hooks/usePeers.js +17 -5
- package/build/hooks/usePeers.js.map +1 -1
- package/build/hooks/useReconnection.d.ts +2 -2
- package/build/hooks/useReconnection.d.ts.map +1 -1
- package/build/hooks/useReconnection.js +1 -0
- package/build/hooks/useReconnection.js.map +1 -1
- package/build/hooks/useScreenShare.d.ts +2 -23
- package/build/hooks/useScreenShare.d.ts.map +1 -1
- package/build/hooks/useScreenShare.js +1 -36
- package/build/hooks/useScreenShare.js.map +1 -1
- package/build/index.d.ts +6 -7
- package/build/index.d.ts.map +1 -1
- package/build/index.js +0 -2
- package/build/index.js.map +1 -1
- package/build/types.d.ts +3 -19
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils/eventPayloadValidator.d.ts +3 -0
- package/build/utils/eventPayloadValidator.d.ts.map +1 -0
- package/build/utils/eventPayloadValidator.js +85 -0
- package/build/utils/eventPayloadValidator.js.map +1 -0
- package/ios/Events.swift +4 -1
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +60 -48
- package/ios/RNFishjamClientModule.swift +5 -10
- package/ios/VideoPreviewView.swift +5 -0
- package/ios/VideoRendererView.swift +5 -0
- package/package.json +21 -14
- package/plugin/build/withFishjamAndroid.js +1 -0
- package/plugin/build/withFishjamIos.js +17 -7
- package/build/common/webRTC.d.ts +0 -14
- package/build/common/webRTC.d.ts.map +0 -1
- package/build/common/webRTC.js +0 -15
- package/build/common/webRTC.js.map +0 -1
- /package/{LICENSE → LICENSE.txt} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<img src="../../.github/images/fishjam-card.png" width="100%"
|
|
1
|
+
<img src="../../.github/images/fishjam-card.png" width="100%" />
|
|
2
2
|
|
|
3
|
-
# Fishjam
|
|
3
|
+
# Fishjam React Native client
|
|
4
4
|
|
|
5
5
|
`@fishjam-cloud/react-native-client` is an easiest way to add video streaming to your React Native app.
|
|
6
6
|
|
|
@@ -10,9 +10,9 @@ Check out the [installation](https://docs.fishjam.io/react-native/installation)
|
|
|
10
10
|
|
|
11
11
|
# Documentation
|
|
12
12
|
|
|
13
|
-
Check out our [documentation](https://docs.fishjam.io/) on how Fishjam
|
|
13
|
+
Check out our [documentation](https://docs.fishjam.io/) on how Fishjam work and how to integrate our service with your app.
|
|
14
14
|
|
|
15
|
-
There is also [API documentation](https://fishjam
|
|
15
|
+
There is also [API documentation](https://docs.fishjam.io/category/api) available.
|
|
16
16
|
|
|
17
17
|
# Examples
|
|
18
18
|
|
|
@@ -20,9 +20,9 @@ There is simple example app, that allows you to test our service. To run it loca
|
|
|
20
20
|
|
|
21
21
|
## License
|
|
22
22
|
|
|
23
|
-
Licensed under the [Apache License, Version 2.0](LICENSE)
|
|
23
|
+
Licensed under the [Apache License, Version 2.0](./LICENSE.txt)
|
|
24
24
|
|
|
25
|
-
## Fishjam
|
|
25
|
+
## Fishjam is created by Software Mansion
|
|
26
26
|
|
|
27
27
|
Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=fishjam&utm_medium=mobile-readme).
|
|
28
28
|
|
package/android/build.gradle
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import groovy.json.JsonSlurper
|
|
2
|
+
|
|
1
3
|
apply plugin: 'com.android.library'
|
|
2
4
|
apply plugin: 'kotlin-android'
|
|
3
5
|
apply plugin: 'maven-publish'
|
|
4
6
|
|
|
5
|
-
def
|
|
7
|
+
def inputFile = new File("$projectDir/../package.json")
|
|
8
|
+
def packageJson = new JsonSlurper().parseText(inputFile.text)
|
|
9
|
+
def packageVersion = packageJson["version"]
|
|
6
10
|
|
|
7
11
|
group = 'io.fishjam.reactnative'
|
|
8
12
|
version = "${packageVersion}"
|
|
@@ -63,6 +67,7 @@ android {
|
|
|
63
67
|
versionCode 1
|
|
64
68
|
versionName "${packageVersion}"
|
|
65
69
|
}
|
|
70
|
+
|
|
66
71
|
lintOptions {
|
|
67
72
|
abortOnError false
|
|
68
73
|
}
|
|
@@ -83,7 +88,6 @@ dependencies {
|
|
|
83
88
|
if (findProject(':fishjam-cloud-android-client')) {
|
|
84
89
|
implementation project(':fishjam-cloud-android-client')
|
|
85
90
|
} else {
|
|
86
|
-
// update version number when releasing
|
|
87
91
|
implementation "com.github.fishjam-cloud:mobile-client-sdk:${packageVersion}"
|
|
88
92
|
}
|
|
89
93
|
implementation 'com.twilio:audioswitch:1.2.0'
|
|
@@ -53,12 +53,14 @@ class EmitableEvent private constructor(
|
|
|
53
53
|
|
|
54
54
|
fun currentCameraChanged(
|
|
55
55
|
localCamera: LocalCamera?,
|
|
56
|
-
isCameraOn: Boolean
|
|
56
|
+
isCameraOn: Boolean,
|
|
57
|
+
isCameraInitialized: Boolean
|
|
57
58
|
) = EmitableEvent(
|
|
58
59
|
EventName.CurrentCameraChanged,
|
|
59
60
|
mapOf(
|
|
60
61
|
"currentCamera" to localCamera,
|
|
61
|
-
"isCameraOn" to isCameraOn
|
|
62
|
+
"isCameraOn" to isCameraOn,
|
|
63
|
+
"isCameraInitialized" to isCameraInitialized
|
|
62
64
|
)
|
|
63
65
|
)
|
|
64
66
|
|
|
@@ -25,6 +25,7 @@ import com.fishjamcloud.client.models.RTCOutboundStats
|
|
|
25
25
|
import com.fishjamcloud.client.models.ReconnectConfig
|
|
26
26
|
import com.fishjamcloud.client.models.SimulcastConfig
|
|
27
27
|
import com.fishjamcloud.client.models.TrackBandwidthLimit
|
|
28
|
+
import com.fishjamcloud.client.models.TrackEncoding
|
|
28
29
|
import com.fishjamcloud.client.models.VideoParameters
|
|
29
30
|
import com.twilio.audioswitch.AudioDevice
|
|
30
31
|
import expo.modules.kotlin.AppContext
|
|
@@ -40,6 +41,7 @@ import io.fishjam.reactnative.utils.PermissionUtils
|
|
|
40
41
|
import kotlinx.coroutines.CoroutineScope
|
|
41
42
|
import kotlinx.coroutines.Dispatchers
|
|
42
43
|
import kotlinx.coroutines.SupervisorJob
|
|
44
|
+
import kotlinx.coroutines.delay
|
|
43
45
|
import kotlinx.coroutines.launch
|
|
44
46
|
import org.webrtc.Logging
|
|
45
47
|
|
|
@@ -54,9 +56,37 @@ class RNFishjamClient(
|
|
|
54
56
|
var isScreenShareOn = false
|
|
55
57
|
var isConnected = false
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
var isCameraInitialized = false
|
|
60
|
+
private set(value) {
|
|
61
|
+
field = value
|
|
62
|
+
emitEvent(
|
|
63
|
+
EmitableEvent.currentCameraChanged(
|
|
64
|
+
getCurrentCaptureDevice(),
|
|
65
|
+
isCameraOn,
|
|
66
|
+
value
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
}
|
|
58
70
|
|
|
59
71
|
private var connectPromise: Promise? = null
|
|
72
|
+
private set(value) {
|
|
73
|
+
field = value
|
|
74
|
+
if (value == null) {
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
coroutineScope.launch {
|
|
78
|
+
delay(15000)
|
|
79
|
+
// If promise is still assigned it means it was not resolved in that time,
|
|
80
|
+
// so close the client and reject it with timeout error
|
|
81
|
+
connectPromise?.let { promise ->
|
|
82
|
+
fishjamClient.leave {
|
|
83
|
+
promise.reject(SocketError("Failed to connect: Fishjam server is not responding"))
|
|
84
|
+
connectPromise = null
|
|
85
|
+
peerStatus = PeerStatus.Error
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
60
90
|
private var screenSharePermissionPromise: Promise? = null
|
|
61
91
|
|
|
62
92
|
var videoSimulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
@@ -64,7 +94,6 @@ class RNFishjamClient(
|
|
|
64
94
|
|
|
65
95
|
var screenShareQuality: String? = null
|
|
66
96
|
var screenShareSimulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
67
|
-
var screenShareMaxBandwidth: TrackBandwidthLimit = TrackBandwidthLimit.BandwidthLimit(0)
|
|
68
97
|
|
|
69
98
|
var screenShareMetadata: Map<String, Any> = mutableMapOf()
|
|
70
99
|
|
|
@@ -141,27 +170,13 @@ class RNFishjamClient(
|
|
|
141
170
|
|
|
142
171
|
private fun getSimulcastConfigFromOptions(simulcastConfigMap: io.fishjam.reactnative.SimulcastConfig): SimulcastConfig {
|
|
143
172
|
val simulcastEnabled = simulcastConfigMap.enabled
|
|
144
|
-
val activeEncodings =
|
|
173
|
+
val activeEncodings = listOf(TrackEncoding.L, TrackEncoding.M, TrackEncoding.H)
|
|
145
174
|
return SimulcastConfig(
|
|
146
175
|
enabled = simulcastEnabled,
|
|
147
176
|
activeEncodings = activeEncodings
|
|
148
177
|
)
|
|
149
178
|
}
|
|
150
179
|
|
|
151
|
-
private fun getMaxBandwidthFromOptions(
|
|
152
|
-
maxBandwidthMap: Map<String, Int>?,
|
|
153
|
-
maxBandwidthInt: Int
|
|
154
|
-
): TrackBandwidthLimit {
|
|
155
|
-
if (maxBandwidthMap != null) {
|
|
156
|
-
val maxBandwidthSimulcast = mutableMapOf<String, TrackBandwidthLimit.BandwidthLimit>()
|
|
157
|
-
maxBandwidthMap.forEach {
|
|
158
|
-
maxBandwidthSimulcast[it.key] = TrackBandwidthLimit.BandwidthLimit(it.value)
|
|
159
|
-
}
|
|
160
|
-
return TrackBandwidthLimit.SimulcastBandwidthLimit(maxBandwidthSimulcast)
|
|
161
|
-
}
|
|
162
|
-
return TrackBandwidthLimit.BandwidthLimit(maxBandwidthInt)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
180
|
private fun create() {
|
|
166
181
|
audioSwitchManager = AudioSwitchManager(appContext?.reactContext!!)
|
|
167
182
|
fishjamClient =
|
|
@@ -172,8 +187,6 @@ class RNFishjamClient(
|
|
|
172
187
|
}
|
|
173
188
|
|
|
174
189
|
private fun getVideoParametersFromOptions(createOptions: CameraConfig): VideoParameters {
|
|
175
|
-
val videoMaxBandwidth =
|
|
176
|
-
getMaxBandwidthFromOptions(createOptions.maxBandwidthMap, createOptions.maxBandwidthInt)
|
|
177
190
|
var videoParameters =
|
|
178
191
|
when (createOptions.quality) {
|
|
179
192
|
"QVGA169" -> VideoParameters.presetQVGA169
|
|
@@ -192,7 +205,7 @@ class RNFishjamClient(
|
|
|
192
205
|
videoParameters.copy(
|
|
193
206
|
dimensions = if (createOptions.flipDimensions) videoParameters.dimensions.flip() else videoParameters.dimensions,
|
|
194
207
|
simulcastConfig = getSimulcastConfigFromOptions(createOptions.simulcastConfig),
|
|
195
|
-
maxBitrate =
|
|
208
|
+
maxBitrate = videoParameters.maxBitrate
|
|
196
209
|
)
|
|
197
210
|
return videoParameters
|
|
198
211
|
}
|
|
@@ -293,7 +306,6 @@ class RNFishjamClient(
|
|
|
293
306
|
|
|
294
307
|
suspend fun startCamera(config: CameraConfig): Boolean {
|
|
295
308
|
if (isCameraInitialized) {
|
|
296
|
-
emitEvent(EmitableEvent.warning("Camera already started. You may only call startCamera once before leaveRoom is called."))
|
|
297
309
|
return true
|
|
298
310
|
}
|
|
299
311
|
if (!PermissionUtils.requestCameraPermission(appContext)) {
|
|
@@ -325,7 +337,13 @@ class RNFishjamClient(
|
|
|
325
337
|
) {
|
|
326
338
|
cameraTrack.setEnabled(isEnabled)
|
|
327
339
|
isCameraOn = isEnabled
|
|
328
|
-
emitEvent(
|
|
340
|
+
emitEvent(
|
|
341
|
+
EmitableEvent.currentCameraChanged(
|
|
342
|
+
cameraTrack.getCaptureDevice()?.toLocalCamera(),
|
|
343
|
+
isEnabled,
|
|
344
|
+
isCameraInitialized
|
|
345
|
+
)
|
|
346
|
+
)
|
|
329
347
|
localCameraTracksChangedListenersManager.notifyListeners()
|
|
330
348
|
}
|
|
331
349
|
|
|
@@ -355,7 +373,7 @@ class RNFishjamClient(
|
|
|
355
373
|
return
|
|
356
374
|
}
|
|
357
375
|
|
|
358
|
-
val microphoneTrack = fishjamClient.createAudioTrack(
|
|
376
|
+
val microphoneTrack = fishjamClient.createAudioTrack(getMicrophoneTrackMetadata())
|
|
359
377
|
setMicrophoneTrackState(microphoneTrack, true)
|
|
360
378
|
emitEndpoints()
|
|
361
379
|
}
|
|
@@ -376,17 +394,18 @@ class RNFishjamClient(
|
|
|
376
394
|
getLocalAudioTrack()?.let { setMicrophoneTrackState(it, !isMicrophoneOn) }
|
|
377
395
|
}
|
|
378
396
|
|
|
379
|
-
updateLocalAudioTrackMetadata(
|
|
380
|
-
mapOf(
|
|
381
|
-
"active" to isMicrophoneOn,
|
|
382
|
-
"paused" to !isMicrophoneOn, // TODO: FCE-711,
|
|
383
|
-
"type" to "microphone"
|
|
384
|
-
)
|
|
385
|
-
)
|
|
397
|
+
updateLocalAudioTrackMetadata(getMicrophoneTrackMetadata())
|
|
386
398
|
|
|
387
399
|
return isMicrophoneOn
|
|
388
400
|
}
|
|
389
401
|
|
|
402
|
+
private fun getMicrophoneTrackMetadata(): Map<String, Any> =
|
|
403
|
+
mapOf(
|
|
404
|
+
"active" to isMicrophoneOn,
|
|
405
|
+
"paused" to !isMicrophoneOn, // TODO: FCE-711,
|
|
406
|
+
"type" to "microphone"
|
|
407
|
+
)
|
|
408
|
+
|
|
390
409
|
fun handleScreenSharePermission(promise: Promise) {
|
|
391
410
|
screenSharePermissionPromise = promise
|
|
392
411
|
if (!isScreenShareOn) {
|
|
@@ -416,11 +435,6 @@ class RNFishjamClient(
|
|
|
416
435
|
this.screenShareQuality = screenShareOptions.quality
|
|
417
436
|
this.screenShareSimulcastConfig =
|
|
418
437
|
getSimulcastConfigFromOptions(screenShareOptions.simulcastConfig)
|
|
419
|
-
this.screenShareMaxBandwidth =
|
|
420
|
-
getMaxBandwidthFromOptions(
|
|
421
|
-
screenShareOptions.maxBandwidthMap,
|
|
422
|
-
screenShareOptions.maxBandwidthInt
|
|
423
|
-
)
|
|
424
438
|
|
|
425
439
|
if (!isScreenShareOn) {
|
|
426
440
|
ensureConnected()
|
|
@@ -704,9 +718,10 @@ class RNFishjamClient(
|
|
|
704
718
|
return res
|
|
705
719
|
}
|
|
706
720
|
|
|
707
|
-
fun getStatistics():
|
|
721
|
+
suspend fun getStatistics(): Map<String, Map<String, Any?>> {
|
|
708
722
|
val newMap = mutableMapOf<String, Map<String, Any?>>()
|
|
709
|
-
fishjamClient.getStats()
|
|
723
|
+
val stats = fishjamClient.getStats()
|
|
724
|
+
stats.forEach { entry ->
|
|
710
725
|
newMap[entry.key] =
|
|
711
726
|
if (entry.value is RTCInboundStats) {
|
|
712
727
|
rtcInboundStatsToRNMap(
|
|
@@ -753,7 +768,7 @@ class RNFishjamClient(
|
|
|
753
768
|
return videoParameters.copy(
|
|
754
769
|
dimensions = dimensions,
|
|
755
770
|
simulcastConfig = screenShareSimulcastConfig,
|
|
756
|
-
maxBitrate =
|
|
771
|
+
maxBitrate = videoParameters.maxBitrate
|
|
757
772
|
)
|
|
758
773
|
}
|
|
759
774
|
|
|
@@ -904,6 +919,12 @@ class RNFishjamClient(
|
|
|
904
919
|
}
|
|
905
920
|
|
|
906
921
|
override fun onCaptureDeviceChanged(captureDevice: CaptureDevice?) {
|
|
907
|
-
emitEvent(
|
|
922
|
+
emitEvent(
|
|
923
|
+
EmitableEvent.currentCameraChanged(
|
|
924
|
+
captureDevice?.toLocalCamera(),
|
|
925
|
+
isCameraOn,
|
|
926
|
+
isCameraInitialized
|
|
927
|
+
)
|
|
928
|
+
)
|
|
908
929
|
}
|
|
909
930
|
}
|
|
@@ -16,9 +16,6 @@ import kotlinx.coroutines.withContext
|
|
|
16
16
|
class SimulcastConfig : Record {
|
|
17
17
|
@Field
|
|
18
18
|
val enabled: Boolean = false
|
|
19
|
-
|
|
20
|
-
@Field
|
|
21
|
-
val activeEncodings: List<String> = emptyList()
|
|
22
19
|
}
|
|
23
20
|
|
|
24
21
|
class CameraConfig : Record {
|
|
@@ -34,13 +31,6 @@ class CameraConfig : Record {
|
|
|
34
31
|
@Field
|
|
35
32
|
val simulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
36
33
|
|
|
37
|
-
// expo-modules on Android don't support Either type
|
|
38
|
-
@Field
|
|
39
|
-
val maxBandwidthMap: Map<String, Int> = emptyMap()
|
|
40
|
-
|
|
41
|
-
@Field
|
|
42
|
-
val maxBandwidthInt: Int = 0
|
|
43
|
-
|
|
44
34
|
@Field
|
|
45
35
|
val cameraEnabled: Boolean = true
|
|
46
36
|
|
|
@@ -57,12 +47,6 @@ class ScreenShareOptions : Record {
|
|
|
57
47
|
|
|
58
48
|
@Field
|
|
59
49
|
val simulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
60
|
-
|
|
61
|
-
@Field
|
|
62
|
-
val maxBandwidthMap: Map<String, Int> = emptyMap()
|
|
63
|
-
|
|
64
|
-
@Field
|
|
65
|
-
val maxBandwidthInt: Int = 0
|
|
66
50
|
}
|
|
67
51
|
|
|
68
52
|
class ReconnectConfig : Record {
|
|
@@ -159,6 +143,10 @@ class RNFishjamClientModule : Module() {
|
|
|
159
143
|
return@Property rnFishjamClient.reconnectionStatus.status
|
|
160
144
|
}
|
|
161
145
|
|
|
146
|
+
Property("isCameraInitialized") {
|
|
147
|
+
return@Property rnFishjamClient.isCameraInitialized
|
|
148
|
+
}
|
|
149
|
+
|
|
162
150
|
Function("getPeers") {
|
|
163
151
|
return@Function rnFishjamClient.getPeers()
|
|
164
152
|
}
|
|
@@ -178,8 +166,10 @@ class RNFishjamClientModule : Module() {
|
|
|
178
166
|
}
|
|
179
167
|
|
|
180
168
|
AsyncFunction("startCamera") Coroutine { config: CameraConfig ->
|
|
181
|
-
|
|
182
|
-
return@withContext
|
|
169
|
+
mutex.withLock {
|
|
170
|
+
return@Coroutine withContext(Dispatchers.Main) {
|
|
171
|
+
return@withContext rnFishjamClient.startCamera(config)
|
|
172
|
+
}
|
|
183
173
|
}
|
|
184
174
|
}
|
|
185
175
|
|
|
@@ -301,7 +291,9 @@ class RNFishjamClientModule : Module() {
|
|
|
301
291
|
}
|
|
302
292
|
}
|
|
303
293
|
|
|
304
|
-
AsyncFunction("getStatistics") {
|
|
294
|
+
AsyncFunction("getStatistics") Coroutine { ->
|
|
295
|
+
return@Coroutine rnFishjamClient.getStatistics()
|
|
296
|
+
}
|
|
305
297
|
|
|
306
298
|
AsyncFunction("startForegroundService") Coroutine { config: ForegroundServiceConfig ->
|
|
307
299
|
rnFishjamClient.startForegroundService(config)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { NativeModule } from 'expo-modules-core/types';
|
|
2
|
+
import type { ConnectionConfig } from './common/client';
|
|
2
3
|
import type { RTCStats } from './debug/stats/types';
|
|
3
|
-
import type {
|
|
4
|
-
import type { CameraConfigInternal,
|
|
4
|
+
import type { OnAudioDeviceEvent } from './hooks/useAudioSettings';
|
|
5
|
+
import type { Camera, CameraConfigInternal, CurrentCameraChangedType } from './hooks/useCamera';
|
|
6
|
+
import type { PeerStatus, ReconnectionStatus } from './hooks/useConnection';
|
|
7
|
+
import type { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
5
8
|
import type { Peer } from './hooks/usePeers';
|
|
6
9
|
import type { ScreenShareOptionsInternal } from './hooks/useScreenShare';
|
|
7
|
-
import type {
|
|
8
|
-
import { PeerStatus } from './hooks/usePeerStatus';
|
|
9
|
-
import { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
10
|
-
import { ReconnectionStatus } from './hooks/useReconnection';
|
|
10
|
+
import type { GenericMetadata, SimulcastConfig } from './types';
|
|
11
11
|
type Metadata = {
|
|
12
12
|
[key: string]: unknown;
|
|
13
13
|
};
|
|
@@ -20,6 +20,7 @@ type RNFishjamClient = {
|
|
|
20
20
|
currentCamera: Camera | null;
|
|
21
21
|
peerStatus: PeerStatus;
|
|
22
22
|
reconnectionStatus: ReconnectionStatus;
|
|
23
|
+
isCameraInitialized: boolean;
|
|
23
24
|
getPeers: <PeerMetadataType extends Metadata, ServerMetadata extends Metadata = GenericMetadata>() => Peer<PeerMetadataType, ServerMetadata>[];
|
|
24
25
|
joinRoom: (url: string, peerToken: string, peerMetadata: Metadata, config: ConnectionConfig) => Promise<void>;
|
|
25
26
|
leaveRoom: () => Promise<void>;
|
|
@@ -58,7 +59,6 @@ export declare const ReceivableEvents: {
|
|
|
58
59
|
readonly SimulcastConfigUpdate: "SimulcastConfigUpdate";
|
|
59
60
|
readonly PeersUpdate: "PeersUpdate";
|
|
60
61
|
readonly AudioDeviceUpdate: "AudioDeviceUpdate";
|
|
61
|
-
readonly SendMediaEvent: "SendMediaEvent";
|
|
62
62
|
readonly BandwidthEstimation: "BandwidthEstimation";
|
|
63
63
|
readonly ReconnectionRetriesLimitReached: "ReconnectionRetriesLimitReached";
|
|
64
64
|
readonly ReconnectionStarted: "ReconnectionStarted";
|
|
@@ -68,6 +68,22 @@ export declare const ReceivableEvents: {
|
|
|
68
68
|
readonly ReconnectionStatusChanged: "ReconnectionStatusChanged";
|
|
69
69
|
readonly CurrentCameraChanged: "CurrentCameraChanged";
|
|
70
70
|
};
|
|
71
|
-
|
|
71
|
+
export type ReceivableEventPayloads = {
|
|
72
|
+
[ReceivableEvents.IsMicrophoneOn]: boolean;
|
|
73
|
+
[ReceivableEvents.IsScreenShareOn]: boolean;
|
|
74
|
+
[ReceivableEvents.IsAppScreenShareOn]: boolean;
|
|
75
|
+
[ReceivableEvents.SimulcastConfigUpdate]: SimulcastConfig;
|
|
76
|
+
[ReceivableEvents.PeersUpdate]: Peer<GenericMetadata, GenericMetadata>[];
|
|
77
|
+
[ReceivableEvents.AudioDeviceUpdate]: OnAudioDeviceEvent;
|
|
78
|
+
[ReceivableEvents.BandwidthEstimation]: number | null;
|
|
79
|
+
[ReceivableEvents.ReconnectionRetriesLimitReached]: void;
|
|
80
|
+
[ReceivableEvents.ReconnectionStarted]: void;
|
|
81
|
+
[ReceivableEvents.Reconnected]: void;
|
|
82
|
+
[ReceivableEvents.Warning]: string;
|
|
83
|
+
[ReceivableEvents.PeerStatusChanged]: PeerStatus;
|
|
84
|
+
[ReceivableEvents.ReconnectionStatusChanged]: ReconnectionStatus;
|
|
85
|
+
[ReceivableEvents.CurrentCameraChanged]: CurrentCameraChangedType;
|
|
86
|
+
};
|
|
87
|
+
declare const _default: RNFishjamClient & NativeModule<Record<keyof typeof ReceivableEvents, (payload: ReceivableEventPayloads) => void>>;
|
|
72
88
|
export default _default;
|
|
73
89
|
//# sourceMappingURL=RNFishjamClientModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@ export const ReceivableEvents = {
|
|
|
6
6
|
SimulcastConfigUpdate: 'SimulcastConfigUpdate',
|
|
7
7
|
PeersUpdate: 'PeersUpdate',
|
|
8
8
|
AudioDeviceUpdate: 'AudioDeviceUpdate',
|
|
9
|
-
SendMediaEvent: 'SendMediaEvent',
|
|
10
9
|
BandwidthEstimation: 'BandwidthEstimation',
|
|
11
10
|
ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',
|
|
12
11
|
ReconnectionStarted: 'ReconnectionStarted',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAyFxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB,EAAE,eAAe;IACzD,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;IACtC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;CACpC,CAAC;AAmBX,eAAe,mBAAmB,CAAC,iBAAiB,CAMjD,CAAC","sourcesContent":["import { requireNativeModule } from 'expo-modules-core';\n\nimport type { NativeModule } from 'expo-modules-core/types';\nimport type { ConnectionConfig } from './common/client';\nimport type { RTCStats } from './debug/stats/types';\nimport type { OnAudioDeviceEvent } from './hooks/useAudioSettings';\nimport type {\n Camera,\n CameraConfigInternal,\n CurrentCameraChangedType,\n} from './hooks/useCamera';\nimport type { PeerStatus, ReconnectionStatus } from './hooks/useConnection';\nimport type { ForegroundServiceConfig } from './hooks/useForegroundService';\nimport type { Peer } from './hooks/usePeers';\nimport type { ScreenShareOptionsInternal } from './hooks/useScreenShare';\nimport type { GenericMetadata, SimulcastConfig } from './types';\n\ntype Metadata = { [key: string]: unknown };\n\ntype RNFishjamClient = {\n isMicrophoneOn: boolean;\n isCameraOn: boolean;\n isScreenShareOn: boolean;\n isAppScreenShareOn: boolean; // only available on ios\n cameras: ReadonlyArray<Camera>;\n currentCamera: Camera | null;\n peerStatus: PeerStatus;\n reconnectionStatus: ReconnectionStatus;\n isCameraInitialized: boolean;\n\n getPeers: <\n PeerMetadataType extends Metadata,\n ServerMetadata extends Metadata = GenericMetadata,\n >() => Peer<PeerMetadataType, ServerMetadata>[];\n\n joinRoom: (\n url: string,\n peerToken: string,\n peerMetadata: Metadata,\n config: ConnectionConfig,\n ) => Promise<void>;\n leaveRoom: () => Promise<void>;\n startCamera: (config: CameraConfigInternal) => Promise<boolean>;\n toggleMicrophone: () => Promise<boolean>;\n toggleCamera: () => Promise<boolean>;\n flipCamera: () => Promise<void>;\n switchCamera: (cameraId: string) => Promise<void>;\n handleScreenSharePermission: () => Promise<'granted' | 'denied'>;\n toggleScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n toggleAppScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n updatePeerMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateVideoTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateScreenShareTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n setOutputAudioDevice: (audioDevice: string) => Promise<void>;\n startAudioSwitcher: () => Promise<void>;\n stopAudioSwitcher: () => Promise<void>;\n selectAudioSessionMode: (sessionMode: string) => Promise<void>;\n showAudioRoutePicker: () => Promise<void>;\n toggleScreenShareTrackEncoding: (\n encoding: string,\n ) => Promise<SimulcastConfig>;\n setScreenShareTrackBandwidth: (bandwidth: number) => Promise<void>;\n setScreenShareTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setTargetTrackEncoding: (trackId: string, encoding: string) => Promise<void>;\n toggleVideoTrackEncoding: (encoding: string) => Promise<SimulcastConfig>;\n setVideoTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setVideoTrackBandwidth: (bandwidth: number) => Promise<void>;\n changeWebRTCLoggingSeverity: (severity: string) => Promise<void>;\n getStatistics: () => Promise<RTCStats>;\n startForegroundService: (config: ForegroundServiceConfig) => Promise<void>;\n stopForegroundService: () => void;\n};\n\nexport const ReceivableEvents = {\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreenShareOn: 'IsScreenShareOn',\n IsAppScreenShareOn: 'IsAppScreenShareOn', // only for iOS\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n PeerStatusChanged: 'PeerStatusChanged',\n ReconnectionStatusChanged: 'ReconnectionStatusChanged',\n CurrentCameraChanged: 'CurrentCameraChanged',\n} as const;\n\nexport type ReceivableEventPayloads = {\n [ReceivableEvents.IsMicrophoneOn]: boolean;\n [ReceivableEvents.IsScreenShareOn]: boolean;\n [ReceivableEvents.IsAppScreenShareOn]: boolean;\n [ReceivableEvents.SimulcastConfigUpdate]: SimulcastConfig;\n [ReceivableEvents.PeersUpdate]: Peer<GenericMetadata, GenericMetadata>[];\n [ReceivableEvents.AudioDeviceUpdate]: OnAudioDeviceEvent;\n [ReceivableEvents.BandwidthEstimation]: number | null;\n [ReceivableEvents.ReconnectionRetriesLimitReached]: void;\n [ReceivableEvents.ReconnectionStarted]: void;\n [ReceivableEvents.Reconnected]: void;\n [ReceivableEvents.Warning]: string;\n [ReceivableEvents.PeerStatusChanged]: PeerStatus;\n [ReceivableEvents.ReconnectionStatusChanged]: ReconnectionStatus;\n [ReceivableEvents.CurrentCameraChanged]: CurrentCameraChangedType;\n};\n\nexport default requireNativeModule('RNFishjamClient') as RNFishjamClient &\n NativeModule<\n Record<\n keyof typeof ReceivableEvents,\n (payload: ReceivableEventPayloads) => void\n >\n >;\n"]}
|
package/build/common/client.d.ts
CHANGED
|
@@ -15,11 +15,11 @@ export type ConnectionConfig = {
|
|
|
15
15
|
};
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
-
* @
|
|
19
|
-
* @param peerToken token received from server (or Room Manager)
|
|
20
|
-
* @param peerMetadata string indexed record with metadata, that will be available to all other peers
|
|
21
|
-
* @param config additional connection configuration
|
|
18
|
+
* @ignore
|
|
22
19
|
*/
|
|
23
20
|
export declare function joinRoom<PeerMetadata extends GenericMetadata = GenericMetadata>(url: string, peerToken: string, peerMetadata?: PeerMetadata, config?: ConnectionConfig): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* @ignore
|
|
23
|
+
*/
|
|
24
24
|
export declare function leaveRoom(): Promise<void>;
|
|
25
25
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/common/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/common/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,YAAY,SAAS,eAAe,GAAG,eAAe,EAEtD,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,YAAY,EAC3B,MAAM,CAAC,EAAE,gBAAgB,iBAQ1B;AACD;;GAEG;AACH,wBAAsB,SAAS,kBAE9B"}
|
package/build/common/client.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
2
2
|
/**
|
|
3
|
-
* @
|
|
4
|
-
* @param peerToken token received from server (or Room Manager)
|
|
5
|
-
* @param peerMetadata string indexed record with metadata, that will be available to all other peers
|
|
6
|
-
* @param config additional connection configuration
|
|
3
|
+
* @ignore
|
|
7
4
|
*/
|
|
8
5
|
export async function joinRoom(url, peerToken, peerMetadata, config) {
|
|
9
6
|
await RNFishjamClientModule.joinRoom(url, peerToken, peerMetadata ?? {}, config ?? {});
|
|
10
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* @ignore
|
|
10
|
+
*/
|
|
11
11
|
export async function leaveRoom() {
|
|
12
12
|
await RNFishjamClientModule.leaveRoom();
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/common/client.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAkB7D
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/common/client.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAkB7D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAG5B,GAAW,EACX,SAAiB,EACjB,YAA2B,EAC3B,MAAyB;IAEzB,MAAM,qBAAqB,CAAC,QAAQ,CAClC,GAAG,EACH,SAAS,EACT,YAAY,IAAI,EAAE,EAClB,MAAM,IAAI,EAAE,CACb,CAAC;AACJ,CAAC;AACD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,qBAAqB,CAAC,SAAS,EAAE,CAAC;AAC1C,CAAC","sourcesContent":["import { GenericMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\nexport type ConnectionConfig = {\n /**\n * Configuration for automatic reconnection\n * sdk uses a linear backoff algorithm, that is the formula\n * for the delay of the nth attempt is\n * n * delayMs + initialDelayMs\n *\n * Pass 0 for maxAttempts to disable automatic reconnection\n */\n reconnectConfig?: {\n maxAttempts?: number;\n initialDelayMs?: number;\n delayMs?: number;\n };\n};\n\n/**\n * @ignore\n */\nexport async function joinRoom<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(\n url: string,\n peerToken: string,\n peerMetadata?: PeerMetadata,\n config?: ConnectionConfig,\n) {\n await RNFishjamClientModule.joinRoom(\n url,\n peerToken,\n peerMetadata ?? {},\n config ?? {},\n );\n}\n/**\n * @ignore\n */\nexport async function leaveRoom() {\n await RNFishjamClientModule.leaveRoom();\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import { GenericMetadata } from '../types';
|
|
|
3
3
|
* Updates metadata send to other peers
|
|
4
4
|
* @param peerMetadata string indexed record with metadata, that will be available to all other peers
|
|
5
5
|
* @deprecated
|
|
6
|
+
* @ignore
|
|
6
7
|
*/
|
|
7
8
|
export declare function updatePeerMetadata<PeerMetadata extends GenericMetadata = GenericMetadata>(peerMetadata: PeerMetadata): Promise<void>;
|
|
8
9
|
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/common/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/common/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,SAAS,eAAe,GAAG,eAAe,EACtD,YAAY,EAAE,YAAY,iBAE3B"}
|
package/build/common/metadata.js
CHANGED
|
@@ -3,6 +3,7 @@ import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
|
3
3
|
* Updates metadata send to other peers
|
|
4
4
|
* @param peerMetadata string indexed record with metadata, that will be available to all other peers
|
|
5
5
|
* @deprecated
|
|
6
|
+
* @ignore
|
|
6
7
|
*/
|
|
7
8
|
export async function updatePeerMetadata(peerMetadata) {
|
|
8
9
|
await RNFishjamClientModule.updatePeerMetadata(peerMetadata);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/common/metadata.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/common/metadata.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAEtC,YAA0B;IAC1B,MAAM,qBAAqB,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["import { GenericMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * Updates metadata send to other peers\n * @param peerMetadata string indexed record with metadata, that will be available to all other peers\n * @deprecated\n * @ignore\n */\nexport async function updatePeerMetadata<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(peerMetadata: PeerMetadata) {\n await RNFishjamClientModule.updatePeerMetadata(peerMetadata);\n}\n"]}
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
export type FishjamRoomProps = {
|
|
2
|
+
/**
|
|
3
|
+
* URL to your fishjam instance
|
|
4
|
+
*/
|
|
2
5
|
fishjamUrl: string;
|
|
6
|
+
/**
|
|
7
|
+
* Peer Token
|
|
8
|
+
*/
|
|
3
9
|
peerToken: string;
|
|
4
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Simple component that enables your camera and show all tracks
|
|
13
|
+
*
|
|
14
|
+
* Example usage:
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <FishjamRoom
|
|
17
|
+
* fishjamUrl={FISHJAM_URL}
|
|
18
|
+
* peerToken={PEER_TOKEN}
|
|
19
|
+
* />
|
|
20
|
+
* ```
|
|
21
|
+
* @category Components
|
|
22
|
+
* @param {object} props
|
|
23
|
+
* @param {string} props.fishjamUrl
|
|
24
|
+
* @param {string} props.peerToken
|
|
25
|
+
*/
|
|
5
26
|
export declare const FishjamRoom: ({ fishjamUrl, peerToken }: FishjamRoomProps) => import("react").JSX.Element;
|
|
6
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,WAAW,8BAA+B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,8BAA+B,gBAAgB,gCA8BtE,CAAC"}
|
|
@@ -3,19 +3,39 @@ import { joinRoom, leaveRoom } from '../../common/client';
|
|
|
3
3
|
import { useCamera } from '../../hooks/useCamera';
|
|
4
4
|
import { VideosGrid } from './VideosGrid';
|
|
5
5
|
import { SafeAreaView } from 'react-native';
|
|
6
|
+
/**
|
|
7
|
+
* Simple component that enables your camera and show all tracks
|
|
8
|
+
*
|
|
9
|
+
* Example usage:
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <FishjamRoom
|
|
12
|
+
* fishjamUrl={FISHJAM_URL}
|
|
13
|
+
* peerToken={PEER_TOKEN}
|
|
14
|
+
* />
|
|
15
|
+
* ```
|
|
16
|
+
* @category Components
|
|
17
|
+
* @param {object} props
|
|
18
|
+
* @param {string} props.fishjamUrl
|
|
19
|
+
* @param {string} props.peerToken
|
|
20
|
+
*/
|
|
6
21
|
export const FishjamRoom = ({ fishjamUrl, peerToken }) => {
|
|
7
22
|
const { prepareCamera } = useCamera();
|
|
8
23
|
useEffect(() => {
|
|
9
24
|
const join = async () => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
try {
|
|
26
|
+
await prepareCamera({
|
|
27
|
+
simulcastEnabled: true,
|
|
28
|
+
quality: 'HD169',
|
|
29
|
+
cameraEnabled: true,
|
|
30
|
+
});
|
|
31
|
+
await joinRoom(fishjamUrl, peerToken, {
|
|
32
|
+
peer: {},
|
|
33
|
+
server: {},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
console.warn(e);
|
|
38
|
+
}
|
|
19
39
|
};
|
|
20
40
|
join();
|
|
21
41
|
return () => {
|