@fishjam-cloud/react-native-client 0.1.1 → 0.2.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.
Files changed (110) hide show
  1. package/README.md +403 -0
  2. package/android/build.gradle +6 -6
  3. package/app.plugin.js +1 -1
  4. package/build/RNFishjamClientModule.d.ts +7 -5
  5. package/build/RNFishjamClientModule.d.ts.map +1 -1
  6. package/build/RNFishjamClientModule.js.map +1 -1
  7. package/build/common/client.d.ts +8 -1
  8. package/build/common/client.d.ts.map +1 -1
  9. package/build/common/client.js +9 -2
  10. package/build/common/client.js.map +1 -1
  11. package/build/components/VideoPreviewView.d.ts +3 -3
  12. package/build/components/VideoPreviewView.d.ts.map +1 -1
  13. package/build/components/VideoPreviewView.js +1 -1
  14. package/build/components/VideoPreviewView.js.map +1 -1
  15. package/build/hooks/useAudioSettings.d.ts.map +1 -1
  16. package/build/hooks/useAudioSettings.js +4 -5
  17. package/build/hooks/useAudioSettings.js.map +1 -1
  18. package/build/hooks/useBandwidthEstimation.d.ts +0 -3
  19. package/build/hooks/useBandwidthEstimation.d.ts.map +1 -1
  20. package/build/hooks/useBandwidthEstimation.js +3 -6
  21. package/build/hooks/useBandwidthEstimation.js.map +1 -1
  22. package/build/hooks/useCamera.d.ts +12 -21
  23. package/build/hooks/useCamera.d.ts.map +1 -1
  24. package/build/hooks/useCamera.js +52 -52
  25. package/build/hooks/useCamera.js.map +1 -1
  26. package/build/{common/eventEmitter.d.ts → hooks/useFishjamEvent.d.ts} +2 -3
  27. package/build/hooks/useFishjamEvent.d.ts.map +1 -0
  28. package/build/{common/eventEmitter.js → hooks/useFishjamEvent.js} +11 -2
  29. package/build/hooks/useFishjamEvent.js.map +1 -0
  30. package/build/hooks/useMicrophone.d.ts.map +1 -1
  31. package/build/hooks/useMicrophone.js +3 -7
  32. package/build/hooks/useMicrophone.js.map +1 -1
  33. package/build/hooks/useParticipants.d.ts +0 -3
  34. package/build/hooks/useParticipants.d.ts.map +1 -1
  35. package/build/hooks/useParticipants.js +6 -6
  36. package/build/hooks/useParticipants.js.map +1 -1
  37. package/build/hooks/useReconnection.d.ts.map +1 -1
  38. package/build/hooks/useReconnection.js +8 -18
  39. package/build/hooks/useReconnection.js.map +1 -1
  40. package/build/hooks/useScreencast.d.ts.map +1 -1
  41. package/build/hooks/useScreencast.js +3 -7
  42. package/build/hooks/useScreencast.js.map +1 -1
  43. package/build/index.d.ts +4 -3
  44. package/build/index.d.ts.map +1 -1
  45. package/build/index.js +3 -1
  46. package/build/index.js.map +1 -1
  47. package/build/types.d.ts +25 -0
  48. package/build/types.d.ts.map +1 -1
  49. package/build/types.js +10 -1
  50. package/build/types.js.map +1 -1
  51. package/build/utils/foregroundService.d.ts +30 -0
  52. package/build/utils/foregroundService.d.ts.map +1 -0
  53. package/build/utils/foregroundService.js +41 -0
  54. package/build/utils/foregroundService.js.map +1 -0
  55. package/ios/RNFishjamClient.swift +34 -29
  56. package/ios/RNFishjamClientModule.swift +11 -7
  57. package/package.json +19 -17
  58. package/.eslintignore +0 -7
  59. package/.eslintrc +0 -6
  60. package/.prettierrc +0 -9
  61. package/.watchmanconfig +0 -1
  62. package/android/.editorconfig +0 -9
  63. package/android/src/main/AndroidManifest.xml +0 -2
  64. package/android/src/main/java/org/membraneframework/reactnative/AudioDeviceKind.kt +0 -34
  65. package/android/src/main/java/org/membraneframework/reactnative/AudioSwitchManager.kt +0 -61
  66. package/android/src/main/java/org/membraneframework/reactnative/EmitableEvents.kt +0 -14
  67. package/android/src/main/java/org/membraneframework/reactnative/Errors.kt +0 -31
  68. package/android/src/main/java/org/membraneframework/reactnative/RNFishjamClient.kt +0 -866
  69. package/android/src/main/java/org/membraneframework/reactnative/RNFishjamClientModule.kt +0 -294
  70. package/android/src/main/java/org/membraneframework/reactnative/Utils.kt +0 -11
  71. package/android/src/main/java/org/membraneframework/reactnative/VideoPreviewView.kt +0 -40
  72. package/android/src/main/java/org/membraneframework/reactnative/VideoPreviewViewModule.kt +0 -17
  73. package/android/src/main/java/org/membraneframework/reactnative/VideoRendererView.kt +0 -58
  74. package/android/src/main/java/org/membraneframework/reactnative/VideoRendererViewModule.kt +0 -25
  75. package/android/src/main/java/org/membraneframework/reactnative/VideoView.kt +0 -77
  76. package/babel.config.js +0 -2
  77. package/build/common/eventEmitter.d.ts.map +0 -1
  78. package/build/common/eventEmitter.js.map +0 -1
  79. package/expo-module.config.json +0 -17
  80. package/ios/RNFishjamClient.podspec +0 -30
  81. package/ios/swift-format-config.json +0 -56
  82. package/plugin/broadcastExtensionFiles/Info.plist +0 -27
  83. package/plugin/broadcastExtensionFiles/MembraneBroadcastSampleHandler.swift +0 -50
  84. package/plugin/broadcastExtensionFiles/MembraneScreenBroadcastExtension.entitlements +0 -10
  85. package/plugin/src/withMembrane.ts +0 -310
  86. package/plugin/tsconfig.json +0 -9
  87. package/scripts/lint.sh +0 -18
  88. package/scripts/lint_check.sh +0 -14
  89. package/src/RNFishjamClientModule.ts +0 -73
  90. package/src/__tests__/index.test.tsx +0 -199
  91. package/src/common/client.ts +0 -33
  92. package/src/common/eventEmitter.ts +0 -21
  93. package/src/common/metadata.ts +0 -12
  94. package/src/common/webRTC.ts +0 -31
  95. package/src/components/VideoPreviewView.tsx +0 -33
  96. package/src/components/VideoRendererView.tsx +0 -31
  97. package/src/hooks/useAudioSettings.ts +0 -115
  98. package/src/hooks/useBandwidthEstimation.ts +0 -24
  99. package/src/hooks/useCamera.ts +0 -270
  100. package/src/hooks/useMicrophone.ts +0 -38
  101. package/src/hooks/useParticipants.ts +0 -118
  102. package/src/hooks/useReconnection.ts +0 -41
  103. package/src/hooks/useScreencast.ts +0 -146
  104. package/src/index.tsx +0 -63
  105. package/src/protos/fishjam/peer_notifications.ts +0 -299
  106. package/src/stats/types.ts +0 -56
  107. package/src/stats/useRTCStatistics.ts +0 -97
  108. package/src/types.ts +0 -49
  109. package/tsconfig.json +0 -9
  110. package/typedoc.json +0 -5
@@ -1,294 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import expo.modules.kotlin.Promise
4
- import expo.modules.kotlin.functions.Coroutine
5
- import expo.modules.kotlin.modules.Module
6
- import expo.modules.kotlin.modules.ModuleDefinition
7
- import expo.modules.kotlin.records.Field
8
- import expo.modules.kotlin.records.Record
9
- import kotlinx.coroutines.CoroutineScope
10
- import kotlinx.coroutines.Dispatchers
11
- import kotlinx.coroutines.launch
12
- import kotlinx.coroutines.sync.Mutex
13
- import kotlinx.coroutines.sync.withLock
14
- import kotlinx.coroutines.withContext
15
-
16
- class SimulcastConfig : Record {
17
- @Field
18
- val enabled: Boolean = false
19
-
20
- @Field
21
- val activeEncodings: List<String> = emptyList()
22
- }
23
-
24
- class CameraConfig : Record {
25
- @Field
26
- val quality: String = "VGA169"
27
-
28
- @Field
29
- val flipVideo: Boolean = false
30
-
31
- @Field
32
- val videoTrackMetadata: Map<String, Any> = emptyMap()
33
-
34
- @Field
35
- val simulcastConfig: SimulcastConfig = SimulcastConfig()
36
-
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
- @Field
45
- val cameraEnabled: Boolean = true
46
-
47
- @Field
48
- val captureDeviceId: String? = null
49
- }
50
-
51
- class ScreencastOptions : Record {
52
- @Field
53
- val quality: String = "HD15"
54
-
55
- @Field
56
- val screencastMetadata: Map<String, Any> = emptyMap()
57
-
58
- @Field
59
- val simulcastConfig: SimulcastConfig = SimulcastConfig()
60
-
61
- @Field
62
- val maxBandwidthMap: Map<String, Int> = emptyMap()
63
-
64
- @Field
65
- val maxBandwidthInt: Int = 0
66
- }
67
-
68
- class ReconnectConfig : Record {
69
- @Field
70
- val maxAttempts: Int = 5
71
-
72
- @Field
73
- val initialDelayMs: Long = 1000
74
-
75
- @Field
76
- val delayMs: Long = 1000
77
- }
78
-
79
- class ConnectConfig : Record {
80
- @Field
81
- val reconnectConfig: ReconnectConfig = ReconnectConfig()
82
- }
83
-
84
- class RNFishjamClientModule : Module() {
85
- override fun definition() =
86
- ModuleDefinition {
87
- Name("RNFishjamClient")
88
-
89
- Events(
90
- "IsCameraOn",
91
- "IsMicrophoneOn",
92
- "IsScreencastOn",
93
- "SimulcastConfigUpdate",
94
- "PeersUpdate",
95
- "AudioDeviceUpdate",
96
- "SendMediaEvent",
97
- "BandwidthEstimation",
98
- "ReconnectionRetriesLimitReached",
99
- "ReconnectionStarted",
100
- "Reconnected"
101
- )
102
-
103
- val rnFishjamClient =
104
- RNFishjamClient { name: String, data: Map<String, Any?> ->
105
- sendEvent(name, data)
106
- }
107
-
108
- val mutex = Mutex()
109
-
110
- OnCreate {
111
- rnFishjamClient.onModuleCreate(appContext)
112
- }
113
-
114
- OnDestroy {
115
- rnFishjamClient.onModuleDestroy()
116
- }
117
-
118
- OnActivityDestroys {
119
- rnFishjamClient.leaveRoom()
120
- }
121
-
122
- OnActivityResult { _, result ->
123
- rnFishjamClient.onActivityResult(result.requestCode, result.resultCode, result.data)
124
- }
125
-
126
- AsyncFunction("connect") { url: String, peerToken: String, peerMetadata: Map<String, Any>, config: ConnectConfig, promise: Promise ->
127
- CoroutineScope(Dispatchers.Main).launch {
128
- rnFishjamClient.connect(url, peerToken, peerMetadata, config, promise)
129
- }
130
- }
131
-
132
- AsyncFunction("leaveRoom") Coroutine { ->
133
- withContext(Dispatchers.Main) {
134
- rnFishjamClient.leaveRoom()
135
- }
136
- }
137
-
138
- AsyncFunction("startCamera") Coroutine { config: CameraConfig ->
139
- withContext(Dispatchers.Main) {
140
- rnFishjamClient.startCamera(config)
141
- }
142
- }
143
-
144
- Property("isMicrophoneOn") {
145
- return@Property rnFishjamClient.isMicrophoneOn
146
- }
147
-
148
- AsyncFunction("toggleMicrophone") Coroutine { ->
149
- withContext(Dispatchers.Main) {
150
- rnFishjamClient.toggleMicrophone()
151
- }
152
- }
153
-
154
- Property("isCameraOn") {
155
- return@Property rnFishjamClient.isCameraOn
156
- }
157
-
158
- AsyncFunction("toggleCamera") Coroutine { ->
159
- withContext(Dispatchers.Main) {
160
- rnFishjamClient.toggleCamera()
161
- }
162
- }
163
-
164
- AsyncFunction("flipCamera") Coroutine { ->
165
- mutex.withLock {
166
- withContext(Dispatchers.Main) {
167
- rnFishjamClient.flipCamera()
168
- }
169
- }
170
- }
171
-
172
- AsyncFunction("switchCamera") Coroutine { captureDeviceId: String ->
173
- mutex.withLock {
174
- withContext(Dispatchers.Main) {
175
- rnFishjamClient.switchCamera(captureDeviceId)
176
- }
177
- }
178
- }
179
-
180
- AsyncFunction("getCaptureDevices") Coroutine { ->
181
- withContext(Dispatchers.Main) {
182
- rnFishjamClient.getCaptureDevices()
183
- }
184
- }
185
-
186
- AsyncFunction("handleScreencastPermission") { promise: Promise ->
187
- CoroutineScope(Dispatchers.Main).launch {
188
- rnFishjamClient.handleScreencastPermission(promise)
189
- }
190
- }
191
-
192
- AsyncFunction("toggleScreencast") Coroutine { screencastOptions: ScreencastOptions ->
193
- withContext(Dispatchers.Main) {
194
- rnFishjamClient.toggleScreencast(screencastOptions)
195
- }
196
- }
197
-
198
- Property("isScreencastOn") {
199
- return@Property rnFishjamClient.isScreencastOn
200
- }
201
-
202
- AsyncFunction("getPeers") Coroutine { ->
203
- withContext(Dispatchers.Main) {
204
- rnFishjamClient.getPeers()
205
- }
206
- }
207
-
208
- AsyncFunction("updatePeerMetadata") Coroutine { metadata: Map<String, Any> ->
209
- withContext(Dispatchers.Main) {
210
- rnFishjamClient.updatePeerMetadata(metadata)
211
- }
212
- }
213
-
214
- AsyncFunction("updateVideoTrackMetadata") Coroutine { metadata: Map<String, Any> ->
215
- withContext(Dispatchers.Main) {
216
- rnFishjamClient.updateLocalVideoTrackMetadata(metadata)
217
- }
218
- }
219
-
220
- AsyncFunction("updateAudioTrackMetadata") Coroutine { metadata: Map<String, Any> ->
221
- withContext(Dispatchers.Main) {
222
- rnFishjamClient.updateLocalAudioTrackMetadata(metadata)
223
- }
224
- }
225
-
226
- AsyncFunction("updateScreencastTrackMetadata") Coroutine { metadata: Map<String, Any> ->
227
- withContext(Dispatchers.Main) {
228
- rnFishjamClient.updateLocalScreencastTrackMetadata(metadata)
229
- }
230
- }
231
-
232
- AsyncFunction("setOutputAudioDevice") { audioDevice: String ->
233
- rnFishjamClient.setOutputAudioDevice(audioDevice)
234
- }
235
-
236
- AsyncFunction("startAudioSwitcher") {
237
- rnFishjamClient.startAudioSwitcher()
238
- }
239
-
240
- AsyncFunction("stopAudioSwitcher") {
241
- rnFishjamClient.stopAudioSwitcher()
242
- }
243
-
244
- AsyncFunction("toggleScreencastTrackEncoding") Coroutine { encoding: String ->
245
- withContext(Dispatchers.Main) {
246
- rnFishjamClient.toggleScreencastTrackEncoding(encoding)
247
- }
248
- }
249
-
250
- AsyncFunction("setScreencastTrackBandwidth") Coroutine { bandwidth: Int ->
251
- withContext(Dispatchers.Main) {
252
- rnFishjamClient.setScreencastTrackBandwidth(bandwidth)
253
- }
254
- }
255
-
256
- AsyncFunction("setScreencastTrackEncodingBandwidth") Coroutine { encoding: String, bandwidth: Int ->
257
- withContext(Dispatchers.Main) {
258
- rnFishjamClient.setScreencastTrackEncodingBandwidth(encoding, bandwidth)
259
- }
260
- }
261
-
262
- AsyncFunction("setTargetTrackEncoding") Coroutine { trackId: String, encoding: String ->
263
- withContext(Dispatchers.Main) {
264
- rnFishjamClient.setTargetTrackEncoding(trackId, encoding)
265
- }
266
- }
267
-
268
- AsyncFunction("toggleVideoTrackEncoding") Coroutine { encoding: String ->
269
- withContext(Dispatchers.Main) {
270
- rnFishjamClient.toggleVideoTrackEncoding(encoding)
271
- }
272
- }
273
-
274
- AsyncFunction("setVideoTrackEncodingBandwidth") Coroutine { encoding: String, bandwidth: Int ->
275
- withContext(Dispatchers.Main) {
276
- rnFishjamClient.setVideoTrackEncodingBandwidth(encoding, bandwidth)
277
- }
278
- }
279
-
280
- AsyncFunction("setVideoTrackBandwidth") Coroutine { bandwidth: Int ->
281
- withContext(Dispatchers.Main) {
282
- rnFishjamClient.setVideoTrackBandwidth(bandwidth)
283
- }
284
- }
285
-
286
- AsyncFunction("changeWebRTCLoggingSeverity") Coroutine { severity: String ->
287
- CoroutineScope(Dispatchers.Main).launch {
288
- rnFishjamClient.changeWebRTCLoggingSeverity(severity)
289
- }
290
- }
291
-
292
- AsyncFunction("getStatistics") { rnFishjamClient.getStatistics() }
293
- }
294
- }
@@ -1,11 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import com.fishjamcloud.client.models.TrackEncoding
4
-
5
- internal fun String.toTrackEncoding(): TrackEncoding =
6
- when (this) {
7
- "l" -> TrackEncoding.L
8
- "m" -> TrackEncoding.M
9
- "h" -> TrackEncoding.H
10
- else -> throw IllegalArgumentException("Invalid encoding specified: $this")
11
- }
@@ -1,40 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import android.content.Context
4
- import com.fishjamcloud.client.media.LocalVideoTrack
5
- import com.fishjamcloud.client.media.VideoTrack
6
- import expo.modules.kotlin.AppContext
7
-
8
- class VideoPreviewView(
9
- context: Context,
10
- appContext: AppContext
11
- ) : VideoView(context, appContext) {
12
- private var localVideoTrack: LocalVideoTrack? = null
13
-
14
- private fun initialize() {
15
- localVideoTrack =
16
- RNFishjamClient.fishjamClient.getLocalEndpoint().tracks.values.firstOrNull { track ->
17
- track is LocalVideoTrack
18
- } as? LocalVideoTrack?
19
-
20
- videoView.let { localVideoTrack?.addRenderer(it) }
21
- super.setupTrack()
22
- }
23
-
24
- override fun dispose() {
25
- videoView.let { localVideoTrack?.removeRenderer(it) }
26
- super.dispose()
27
- }
28
-
29
- override fun onDetachedFromWindow() {
30
- super.onDetachedFromWindow()
31
- dispose()
32
- }
33
-
34
- override fun onAttachedToWindow() {
35
- super.onAttachedToWindow()
36
- initialize()
37
- }
38
-
39
- override fun getVideoTrack(): VideoTrack? = localVideoTrack
40
- }
@@ -1,17 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import expo.modules.kotlin.modules.Module
4
- import expo.modules.kotlin.modules.ModuleDefinition
5
-
6
- class VideoPreviewViewModule : Module() {
7
- override fun definition() =
8
- ModuleDefinition {
9
- Name("VideoPreviewViewModule")
10
-
11
- View(VideoPreviewView::class) {
12
- Prop("videoLayout") { view: VideoPreviewView, videoLayout: String ->
13
- view.setVideoLayout(videoLayout)
14
- }
15
- }
16
- }
17
- }
@@ -1,58 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import android.content.Context
4
- import com.fishjamcloud.client.media.VideoTrack
5
- import expo.modules.kotlin.AppContext
6
- import kotlinx.coroutines.CoroutineScope
7
- import kotlinx.coroutines.Dispatchers
8
- import kotlinx.coroutines.launch
9
-
10
- class VideoRendererView(
11
- context: Context,
12
- appContext: AppContext
13
- ) : VideoView(context, appContext),
14
- RNFishjamClient.OnTrackUpdateListener {
15
- private var activeVideoTrack: VideoTrack? = null
16
- private var trackId: String? = null
17
-
18
- init {
19
- RNFishjamClient.onTracksUpdateListeners.add(this)
20
- }
21
-
22
- private fun setupTrack(videoTrack: VideoTrack) {
23
- if (activeVideoTrack == videoTrack) return
24
-
25
- activeVideoTrack?.removeRenderer(videoView)
26
- activeVideoTrack = videoTrack
27
-
28
- videoTrack.addRenderer(videoView)
29
-
30
- super.setupTrack()
31
- }
32
-
33
- private fun update() {
34
- CoroutineScope(Dispatchers.Main).launch {
35
- val peers = RNFishjamClient.getAllPeers()
36
- val endpoint = peers.firstOrNull { it.tracks[trackId] != null } ?: return@launch
37
- val videoTrack = endpoint.tracks[trackId] as? VideoTrack ?: return@launch
38
- setupTrack(videoTrack)
39
- }
40
- }
41
-
42
- fun init(trackId: String) {
43
- this.trackId = trackId
44
- update()
45
- }
46
-
47
- override fun dispose() {
48
- activeVideoTrack?.removeRenderer(videoView)
49
- RNFishjamClient.onTracksUpdateListeners.remove(this)
50
- super.dispose()
51
- }
52
-
53
- override fun onTracksUpdate() {
54
- update()
55
- }
56
-
57
- override fun getVideoTrack(): VideoTrack? = activeVideoTrack
58
- }
@@ -1,25 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import expo.modules.kotlin.modules.Module
4
- import expo.modules.kotlin.modules.ModuleDefinition
5
-
6
- class VideoRendererViewModule : Module() {
7
- override fun definition() =
8
- ModuleDefinition {
9
- Name("VideoRendererViewModule")
10
-
11
- View(VideoRendererView::class) {
12
- OnViewDestroys { view: VideoRendererView ->
13
- view.dispose()
14
- }
15
-
16
- Prop("trackId") { view: VideoRendererView, trackId: String ->
17
- view.init(trackId)
18
- }
19
-
20
- Prop("videoLayout") { view: VideoRendererView, videoLayout: String ->
21
- view.setVideoLayout(videoLayout)
22
- }
23
- }
24
- }
25
- }
@@ -1,77 +0,0 @@
1
- package org.membraneframework.reactnative
2
-
3
- import android.animation.ValueAnimator
4
- import android.content.Context
5
- import android.graphics.Color
6
- import android.graphics.drawable.ColorDrawable
7
- import android.view.animation.LinearInterpolator
8
- import com.fishjamcloud.client.media.LocalVideoTrack
9
- import com.fishjamcloud.client.media.VideoTrack
10
- import expo.modules.kotlin.AppContext
11
- import expo.modules.kotlin.views.ExpoView
12
- import kotlinx.coroutines.CoroutineScope
13
- import kotlinx.coroutines.Dispatchers
14
- import kotlinx.coroutines.delay
15
- import org.webrtc.RendererCommon
16
-
17
- abstract class VideoView(
18
- context: Context,
19
- appContext: AppContext
20
- ) : ExpoView(context, appContext),
21
- RNFishjamClient.OnLocalTrackSwitchListener {
22
- protected val videoView =
23
- RNFishjamClient.fishjamClient.createVideoViewRenderer().also {
24
- addView(it)
25
- }
26
-
27
- private val fadeAnimation: ValueAnimator =
28
- ValueAnimator.ofArgb(Color.TRANSPARENT, Color.BLACK).apply {
29
- duration = 200
30
- interpolator = LinearInterpolator()
31
- addUpdateListener {
32
- val colorValue = it.animatedValue as Int
33
- foreground = ColorDrawable(colorValue)
34
- }
35
- }
36
-
37
- val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.Main)
38
-
39
- init {
40
- RNFishjamClient.onLocalTrackSwitchListener.add(this)
41
- }
42
-
43
- fun setVideoLayout(videoLayout: String) {
44
- val scalingType =
45
- when (videoLayout) {
46
- "FILL" -> RendererCommon.ScalingType.SCALE_ASPECT_FILL
47
- "FIT" -> RendererCommon.ScalingType.SCALE_ASPECT_FIT
48
- else -> RendererCommon.ScalingType.SCALE_ASPECT_FILL
49
- }
50
- videoView.setScalingType(scalingType)
51
- videoView.setEnableHardwareScaler(true)
52
- }
53
-
54
- open fun dispose() {
55
- videoView.release()
56
- }
57
-
58
- protected abstract fun getVideoTrack(): VideoTrack?
59
-
60
- override suspend fun onLocalTrackWillSwitch() {
61
- if (getVideoTrack() is LocalVideoTrack) {
62
- fadeAnimation.start()
63
- }
64
- }
65
-
66
- override suspend fun onLocalTrackSwitched() {
67
- if (getVideoTrack() is LocalVideoTrack) {
68
- videoView.setMirror((getVideoTrack() as? LocalVideoTrack)?.isFrontCamera() ?: false)
69
- delay(500)
70
- fadeAnimation.reverse()
71
- }
72
- }
73
-
74
- fun setupTrack() {
75
- videoView.setMirror((getVideoTrack() as? LocalVideoTrack)?.isFrontCamera() ?: false)
76
- }
77
- }
package/babel.config.js DELETED
@@ -1,2 +0,0 @@
1
- // @generated by expo-module-scripts
2
- module.exports = require('expo-module-scripts/babel.config.base');
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventEmitter.d.ts","sourceRoot":"","sources":["../../src/common/eventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIrE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAYnB,CAAC;AAEX,eAAO,MAAM,YAAY,cAExB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventEmitter.js","sourceRoot":"","sources":["../../src/common/eventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,CAC1C,qBAAqB,IAAI,kBAAkB,CAAC,eAAe,CAC5D,CAAC","sourcesContent":["import { NativeModulesProxy, EventEmitter } from 'expo-modules-core';\n\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\nexport const ReceivableEvents = {\n IsCameraOn: 'IsCameraOn',\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreencastOn: 'IsScreencastOn',\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n SendMediaEvent: 'SendMediaEvent',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n} as const;\n\nexport const eventEmitter = new EventEmitter(\n RNFishjamClientModule ?? NativeModulesProxy.RNFishjamClient,\n);\n"]}
@@ -1,17 +0,0 @@
1
- {
2
- "platforms": ["ios", "android", "web"],
3
- "ios": {
4
- "modules": [
5
- "RNFishjamClientModule",
6
- "VideoPreviewViewModule",
7
- "VideoRendererViewModule"
8
- ]
9
- },
10
- "android": {
11
- "modules": [
12
- "org.membraneframework.reactnative.RNFishjamClientModule",
13
- "org.membraneframework.reactnative.VideoPreviewViewModule",
14
- "org.membraneframework.reactnative.VideoRendererViewModule"
15
- ]
16
- }
17
- }
@@ -1,30 +0,0 @@
1
- require 'json'
2
-
3
- package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
4
-
5
- Pod::Spec.new do |s|
6
- s.name = 'RNFishjamClient'
7
- s.version = package['version']
8
- s.summary = package['description']
9
- s.description = package['description']
10
- s.license = package['license']
11
- s.author = package['author']
12
- s.homepage = package['homepage']
13
- s.platform = :ios, '13.0'
14
- s.swift_version = '5.4'
15
- s.source = { git: 'https://github.com/fishjam-cloud/mobile-client-sdk/tree/main/packages/react-native-client/ios' }
16
- s.static_framework = true
17
-
18
- s.dependency 'ExpoModulesCore'
19
-
20
- # Swift/Objective-C compatibility
21
- s.pod_target_xcconfig = {
22
- 'DEFINES_MODULE' => 'YES',
23
- 'SWIFT_COMPILATION_MODE' => 'wholemodule'
24
- }
25
-
26
- s.source_files = '**/*.{h,m,swift}'
27
-
28
- s.dependency 'FishjamCloudClient', '>= 0.1'
29
-
30
- end
@@ -1,56 +0,0 @@
1
- {
2
- "fileScopedDeclarationPrivacy": {
3
- "accessLevel": "private"
4
- },
5
- "indentation": {
6
- "spaces": 4
7
- },
8
- "indentConditionalCompilationBlocks": true,
9
- "indentSwitchCaseLabels": false,
10
- "lineBreakAroundMultilineExpressionChainComponents": false,
11
- "lineBreakBeforeControlFlowKeywords": false,
12
- "lineBreakBeforeEachArgument": false,
13
- "lineBreakBeforeEachGenericRequirement": false,
14
- "lineLength": 120,
15
- "maximumBlankLines": 1,
16
- "prioritizeKeepingFunctionOutputTogether": false,
17
- "respectsExistingLineBreaks": true,
18
- "rules": {
19
- "AllPublicDeclarationsHaveDocumentation": false,
20
- "AlwaysUseLowerCamelCase": false,
21
- "AmbiguousTrailingClosureOverload": true,
22
- "BeginDocumentationCommentWithOneLineSummary": false,
23
- "DoNotUseSemicolons": true,
24
- "DontRepeatTypeInStaticProperties": true,
25
- "FileScopedDeclarationPrivacy": true,
26
- "FullyIndirectEnum": true,
27
- "GroupNumericLiterals": true,
28
- "IdentifiersMustBeASCII": true,
29
- "NeverForceUnwrap": false,
30
- "NeverUseForceTry": false,
31
- "NeverUseImplicitlyUnwrappedOptionals": false,
32
- "NoAccessLevelOnExtensionDeclaration": true,
33
- "NoBlockComments": false,
34
- "NoCasesWithOnlyFallthrough": true,
35
- "NoEmptyTrailingClosureParentheses": true,
36
- "NoLabelsInCasePatterns": true,
37
- "NoLeadingUnderscores": false,
38
- "NoParensAroundConditions": true,
39
- "NoVoidReturnOnFunctionSignature": true,
40
- "OneCasePerLine": true,
41
- "OneVariableDeclarationPerLine": true,
42
- "OnlyOneTrailingClosureArgument": false,
43
- "OrderedImports": true,
44
- "ReturnVoidInsteadOfEmptyTuple": true,
45
- "UseEarlyExits": false,
46
- "UseLetInEveryBoundCaseVariable": true,
47
- "UseShorthandTypeNames": true,
48
- "UseSingleLinePropertyGetter": true,
49
- "UseSynthesizedInitializer": true,
50
- "UseTripleSlashForDocumentationComments": false,
51
- "UseWhereClausesInForLoops": false,
52
- "ValidateDocumentationComments": false
53
- },
54
- "tabWidth": 8,
55
- "version": 1
56
- }
@@ -1,27 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>CFBundleDisplayName</key>
6
- <string>MembraneScreenBroadcast</string>
7
- <key>CFBundleExecutable</key>
8
- <string>$(EXECUTABLE_NAME)</string>
9
- <key>CFBundleIdentifier</key>
10
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
- <key>CFBundleName</key>
12
- <string>$(PRODUCT_NAME)</string>
13
- <key>CFBundlePackageType</key>
14
- <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
15
- <key>CFBundleVersion</key>
16
- <string>$(CURRENT_PROJECT_VERSION)</string>
17
- <key>NSExtension</key>
18
- <dict>
19
- <key>NSExtensionPointIdentifier</key>
20
- <string>com.apple.broadcast-services-upload</string>
21
- <key>NSExtensionPrincipalClass</key>
22
- <string>$(PRODUCT_MODULE_NAME).MembraneBroadcastSampleHandler</string>
23
- <key>RPBroadcastProcessMode</key>
24
- <string>RPBroadcastProcessModeSampleBuffer</string>
25
- </dict>
26
- </dict>
27
- </plist>