@fishjam-cloud/react-native-client 0.5.0 → 0.7.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 +17 -16
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +64 -49
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +16 -24
- package/build/RNFishjamClientModule.d.ts +44 -11
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js +18 -4
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/common/client.d.ts +3 -8
- package/build/common/client.d.ts.map +1 -1
- package/build/common/client.js +2 -6
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +2 -1
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +2 -1
- 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 +16 -1
- package/build/components/FishjamRoom/index.js.map +1 -1
- package/build/components/FishjamRoom/parsePeersToTracks.d.ts.map +1 -1
- package/build/components/FishjamRoom/parsePeersToTracks.js +4 -6
- package/build/components/FishjamRoom/parsePeersToTracks.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/debug/stats/useRTCStatistics.d.ts.map +1 -1
- package/build/debug/stats/useRTCStatistics.js +13 -13
- package/build/debug/stats/useRTCStatistics.js.map +1 -1
- package/build/hooks/internal/useFishjamEvent.d.ts +4 -0
- package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -0
- package/build/hooks/internal/useFishjamEvent.js +35 -0
- package/build/hooks/internal/useFishjamEvent.js.map +1 -0
- package/build/hooks/internal/useFishjamEventState.d.ts +3 -0
- package/build/hooks/internal/useFishjamEventState.d.ts.map +1 -0
- package/build/hooks/{useFishjamEventState.js → internal/useFishjamEventState.js} +3 -1
- package/build/hooks/internal/useFishjamEventState.js.map +1 -0
- package/build/hooks/useAppScreenShare.d.ts +9 -0
- package/build/hooks/useAppScreenShare.d.ts.map +1 -1
- package/build/hooks/useAppScreenShare.js +14 -14
- 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 +8 -11
- 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 +9 -5
- package/build/hooks/useBandwidthEstimation.js.map +1 -1
- package/build/hooks/useCamera.d.ts +11 -33
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +18 -68
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useConnection.d.ts +58 -0
- package/build/hooks/useConnection.d.ts.map +1 -0
- package/build/hooks/useConnection.js +39 -0
- package/build/hooks/useConnection.js.map +1 -0
- 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.d.ts.map +1 -1
- package/build/hooks/useMicrophone.js +2 -3
- package/build/hooks/useMicrophone.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +3 -12
- package/build/hooks/usePeerStatus.d.ts.map +1 -1
- package/build/hooks/usePeerStatus.js +5 -10
- 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 +21 -20
- package/build/hooks/usePeers.js.map +1 -1
- package/build/hooks/useReconnection.d.ts +3 -3
- package/build/hooks/useReconnection.d.ts.map +1 -1
- package/build/hooks/useReconnection.js +5 -10
- 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 +6 -45
- package/build/hooks/useScreenShare.js.map +1 -1
- package/build/hooks/useUpdatePeerMetadata.d.ts +15 -0
- package/build/hooks/useUpdatePeerMetadata.d.ts.map +1 -0
- package/build/hooks/useUpdatePeerMetadata.js +21 -0
- package/build/hooks/useUpdatePeerMetadata.js.map +1 -0
- package/build/index.d.ts +21 -16
- package/build/index.d.ts.map +1 -1
- package/build/index.js +15 -6
- package/build/index.js.map +1 -1
- package/build/types.d.ts +0 -19
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils/errorListener.d.ts.map +1 -1
- package/build/utils/errorListener.js +2 -3
- package/build/utils/errorListener.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 +94 -0
- package/build/utils/eventPayloadValidator.js.map +1 -0
- package/ios/Events.swift +8 -8
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +45 -48
- package/ios/RNFishjamClientModule.swift +13 -14
- package/ios/Utils.swift +0 -20
- package/package.json +21 -13
- package/plugin/build/withFishjamAndroid.js +18 -20
- package/plugin/build/withFishjamIos.js +116 -110
- 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/build/hooks/useFishjamEvent.d.ts +0 -18
- package/build/hooks/useFishjamEvent.d.ts.map +0 -1
- package/build/hooks/useFishjamEvent.js +0 -27
- package/build/hooks/useFishjamEvent.js.map +0 -1
- package/build/hooks/useFishjamEventState.d.ts +0 -3
- package/build/hooks/useFishjamEventState.d.ts.map +0 -1
- package/build/hooks/useFishjamEventState.js.map +0 -1
- /package/{LICENSE → LICENSE.txt} +0 -0
package/build/index.d.ts
CHANGED
|
@@ -1,28 +1,33 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export {
|
|
1
|
+
export type { SimulcastConfig, VideoLayout } from './types';
|
|
2
|
+
export type { ConnectionConfig } from './common/client';
|
|
3
|
+
export { updatePeerMetadata } from './common/metadata';
|
|
4
|
+
export {
|
|
5
|
+
/** @deprecated */
|
|
6
|
+
joinRoom,
|
|
7
|
+
/** @deprecated */
|
|
8
|
+
leaveRoom, } from './common/client';
|
|
9
|
+
export type { VideoPreviewViewProps } from './components/VideoPreviewView';
|
|
10
|
+
export type { VideoRendererProps } from './components/VideoRendererView';
|
|
11
|
+
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
12
|
+
export { VideoRendererView } from './components/VideoRendererView';
|
|
13
|
+
export type { Peer, PeerId, Track, TrackId, TrackType, VadStatus, EncodingReason, TrackBase, AudioTrack, VideoTrack, UsePeersResult, PeerWithTracks, PeerTrackMetadata, } from './hooks/usePeers';
|
|
3
14
|
export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
|
|
15
|
+
export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
|
|
16
|
+
export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
|
|
17
|
+
export type { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
18
|
+
export type { JoinRoomConfig, ReconnectionStatus, PeerStatus, } from './hooks/useConnection';
|
|
4
19
|
export { useAudioSettings } from './hooks/useAudioSettings';
|
|
5
20
|
export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
|
|
6
|
-
export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
|
|
7
21
|
export { useCamera } from './hooks/useCamera';
|
|
8
22
|
export { useMicrophone } from './hooks/useMicrophone';
|
|
9
|
-
export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
|
|
10
23
|
export { useScreenShare } from './hooks/useScreenShare';
|
|
11
24
|
export { useAppScreenShare } from './hooks/useAppScreenShare';
|
|
12
|
-
export type { ReconnectionStatus } from './hooks/useReconnection';
|
|
13
25
|
export { useReconnection } from './hooks/useReconnection';
|
|
14
|
-
export { updatePeerMetadata } from './common/metadata';
|
|
15
|
-
export { setTargetTrackEncoding } from './common/webRTC';
|
|
16
|
-
export type { ConnectionConfig } from './common/client';
|
|
17
|
-
export { joinRoom, leaveRoom } from './common/client';
|
|
18
|
-
export type { VideoPreviewViewProps } from './components/VideoPreviewView';
|
|
19
|
-
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
20
|
-
export type { VideoRendererProps } from './components/VideoRendererView';
|
|
21
|
-
export { VideoRendererView } from './components/VideoRendererView';
|
|
22
|
-
export type { PeerStatus } from './hooks/usePeerStatus';
|
|
23
26
|
export { usePeerStatus } from './hooks/usePeerStatus';
|
|
24
|
-
export
|
|
27
|
+
export { usePeers } from './hooks/usePeers';
|
|
25
28
|
export { useForegroundService } from './hooks/useForegroundService';
|
|
29
|
+
export { useConnection } from './hooks/useConnection';
|
|
30
|
+
export { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';
|
|
31
|
+
export type { FishjamRoomProps } from './components/FishjamRoom';
|
|
26
32
|
export { FishjamRoom } from './components/FishjamRoom';
|
|
27
|
-
export type { TrackBandwidthLimit, TrackEncoding, SimulcastBandwidthLimit, BandwidthLimit, SimulcastConfig, VideoLayout, } from './types';
|
|
28
33
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAGA,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO;AACL,kBAAkB;AAClB,QAAQ;AACR,kBAAkB;AAClB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAIzB,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE,YAAY,EACV,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { initializeWarningListener } from './utils/errorListener';
|
|
2
|
-
|
|
2
|
+
// #endregion
|
|
3
|
+
// #region methods
|
|
4
|
+
export { updatePeerMetadata } from './common/metadata';
|
|
5
|
+
export {
|
|
6
|
+
/** @deprecated */
|
|
7
|
+
joinRoom,
|
|
8
|
+
/** @deprecated */
|
|
9
|
+
leaveRoom, } from './common/client';
|
|
10
|
+
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
11
|
+
export { VideoRendererView } from './components/VideoRendererView';
|
|
12
|
+
// #endregion
|
|
13
|
+
// #region hooks
|
|
3
14
|
export { useAudioSettings } from './hooks/useAudioSettings';
|
|
4
15
|
export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
|
|
5
16
|
export { useCamera } from './hooks/useCamera';
|
|
@@ -7,13 +18,11 @@ export { useMicrophone } from './hooks/useMicrophone';
|
|
|
7
18
|
export { useScreenShare } from './hooks/useScreenShare';
|
|
8
19
|
export { useAppScreenShare } from './hooks/useAppScreenShare';
|
|
9
20
|
export { useReconnection } from './hooks/useReconnection';
|
|
10
|
-
export { updatePeerMetadata } from './common/metadata';
|
|
11
|
-
export { setTargetTrackEncoding } from './common/webRTC';
|
|
12
|
-
export { joinRoom, leaveRoom } from './common/client';
|
|
13
|
-
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
14
|
-
export { VideoRendererView } from './components/VideoRendererView';
|
|
15
21
|
export { usePeerStatus } from './hooks/usePeerStatus';
|
|
22
|
+
export { usePeers } from './hooks/usePeers';
|
|
16
23
|
export { useForegroundService } from './hooks/useForegroundService';
|
|
24
|
+
export { useConnection } from './hooks/useConnection';
|
|
25
|
+
export { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';
|
|
17
26
|
export { FishjamRoom } from './components/FishjamRoom';
|
|
18
27
|
initializeWarningListener();
|
|
19
28
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAKlE,aAAa;AAEb,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO;AACL,kBAAkB;AAClB,QAAQ;AACR,kBAAkB;AAClB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AA4CnE,aAAa;AAEb,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\n// #region types\nexport type { SimulcastConfig, VideoLayout } from './types';\nexport type { ConnectionConfig } from './common/client';\n// #endregion\n\n// #region methods\nexport { updatePeerMetadata } from './common/metadata';\nexport {\n /** @deprecated */\n joinRoom,\n /** @deprecated */\n leaveRoom,\n} from './common/client';\n// #endregion\n\n// #region components\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport type { VideoRendererProps } from './components/VideoRendererView';\n\nexport { VideoPreviewView } from './components/VideoPreviewView';\nexport { VideoRendererView } from './components/VideoRendererView';\n// #endregion\n\n// #region types for hooks\nexport type {\n Peer,\n PeerId,\n Track,\n TrackId,\n TrackType,\n VadStatus,\n EncodingReason,\n TrackBase,\n AudioTrack,\n VideoTrack,\n UsePeersResult,\n PeerWithTracks,\n PeerTrackMetadata,\n} from './hooks/usePeers';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport type { ForegroundServiceConfig } from './hooks/useForegroundService';\nexport type {\n JoinRoomConfig,\n ReconnectionStatus,\n PeerStatus,\n} from './hooks/useConnection';\n// #endregion\n\n// #region hooks\nexport { useAudioSettings } from './hooks/useAudioSettings';\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\nexport { useCamera } from './hooks/useCamera';\nexport { useMicrophone } from './hooks/useMicrophone';\nexport { useScreenShare } from './hooks/useScreenShare';\nexport { useAppScreenShare } from './hooks/useAppScreenShare';\nexport { useReconnection } from './hooks/useReconnection';\nexport { usePeerStatus } from './hooks/usePeerStatus';\nexport { usePeers } from './hooks/usePeers';\nexport { useForegroundService } from './hooks/useForegroundService';\nexport { useConnection } from './hooks/useConnection';\nexport { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';\n// #endregion\n\nexport type { FishjamRoomProps } from './components/FishjamRoom';\nexport { FishjamRoom } from './components/FishjamRoom';\n\ninitializeWarningListener();\n"]}
|
package/build/types.d.ts
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
* `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view
|
|
3
3
|
* with video and it may cut some parts of the video. `FIT` scales the video so the whole
|
|
4
4
|
* video is visible, but it may leave some empty space in the view.
|
|
5
|
-
* @category Components
|
|
6
5
|
*/
|
|
7
6
|
export type VideoLayout = 'FILL' | 'FIT';
|
|
8
|
-
export type TrackEncoding = 'l' | 'm' | 'h';
|
|
9
7
|
/**
|
|
10
8
|
* A type describing simulcast configuration.
|
|
11
9
|
*
|
|
@@ -18,24 +16,7 @@ export type SimulcastConfig = {
|
|
|
18
16
|
* whether to simulcast track or not. By default simulcast is disabled.
|
|
19
17
|
*/
|
|
20
18
|
enabled: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* list of active encodings. Encoding can be one of `"h"` (original encoding), `"m"` (scaled down x2), `"l"` (scaled down x4).
|
|
23
|
-
*/
|
|
24
|
-
activeEncodings: TrackEncoding[];
|
|
25
19
|
};
|
|
26
|
-
/**
|
|
27
|
-
* Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.
|
|
28
|
-
*/
|
|
29
|
-
export type BandwidthLimit = number;
|
|
30
|
-
/**
|
|
31
|
-
* Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,
|
|
32
|
-
* it will be assumed that this particular encoding shouldn't have any bandwidth limit.
|
|
33
|
-
*/
|
|
34
|
-
export type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;
|
|
35
|
-
/**
|
|
36
|
-
* A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.
|
|
37
|
-
*/
|
|
38
|
-
export type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;
|
|
39
20
|
export type TrackMetadata = {
|
|
40
21
|
active: boolean;
|
|
41
22
|
type: 'microphone' | 'camera' | 'screenShareVideo' | 'screenShareAudio';
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGtD,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AACnC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/build/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view\n * with video and it may cut some parts of the video. `FIT` scales the video so the whole\n * video is visible, but it may leave some empty space in the view.\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view\n * with video and it may cut some parts of the video. `FIT` scales the video so the whole\n * video is visible, but it may leave some empty space in the view.\n */\nexport type VideoLayout = 'FILL' | 'FIT';\n\n/**\n * A type describing simulcast configuration.\n *\n * At the moment, simulcast track is initialized in three versions - low, medium and high.\n * High resolution is the original track resolution, while medium and low resolutions are\n * the original track resolution scaled down by 2 and 4 respectively.\n */\nexport type SimulcastConfig = {\n /**\n * whether to simulcast track or not. By default simulcast is disabled.\n */\n enabled: boolean;\n};\n\nexport type TrackMetadata = {\n active: boolean;\n type: 'microphone' | 'camera' | 'screenShareVideo' | 'screenShareAudio';\n};\n\nexport type GenericMetadata = Record<string, unknown>;\n\n// branded types are useful for restricting where given value can be passed\ndeclare const brand: unique symbol;\nexport type Brand<T, TBrand extends string> = T & { [brand]: TBrand };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorListener.d.ts","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errorListener.d.ts","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,YAWrC,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { ReceivableEvents } from '../
|
|
2
|
-
import { nativeModuleEventEmitter } from '../RNFishjamClientModule';
|
|
1
|
+
import nativeModule, { ReceivableEvents } from '../RNFishjamClientModule';
|
|
3
2
|
export const initializeWarningListener = () => {
|
|
4
3
|
if (!__DEV__) {
|
|
5
4
|
return;
|
|
6
5
|
}
|
|
7
6
|
try {
|
|
8
|
-
|
|
7
|
+
nativeModule.addListener(ReceivableEvents.Warning, (event) => {
|
|
9
8
|
console.warn(event[ReceivableEvents.Warning]);
|
|
10
9
|
});
|
|
11
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorListener.js","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"errorListener.js","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC","sourcesContent":["import nativeModule, { ReceivableEvents } from '../RNFishjamClientModule';\n\nexport const initializeWarningListener = () => {\n if (!__DEV__) {\n return;\n }\n try {\n nativeModule.addListener(ReceivableEvents.Warning, (event) => {\n console.warn(event[ReceivableEvents.Warning]);\n });\n } catch (error) {\n console.error(`Failed to start warning listener: ${error?.message ?? ''}`);\n }\n};\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ReceivableEventPayloads, ReceivableEvents } from '../RNFishjamClientModule';
|
|
2
|
+
export declare function validateNativeEventPayload<T extends keyof typeof ReceivableEvents>(eventName: T, payload: ReceivableEventPayloads[T]): void;
|
|
3
|
+
//# sourceMappingURL=eventPayloadValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventPayloadValidator.d.ts","sourceRoot":"","sources":["../../src/utils/eventPayloadValidator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAgElC,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACvC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAiDzD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
3
|
+
const TrackMetadataSchema = z.object({
|
|
4
|
+
active: z.boolean(),
|
|
5
|
+
type: z.enum([
|
|
6
|
+
'microphone',
|
|
7
|
+
'camera',
|
|
8
|
+
'screenShareVideo',
|
|
9
|
+
'screenShareAudio',
|
|
10
|
+
]),
|
|
11
|
+
});
|
|
12
|
+
const BaseTrackSchema = z.object({
|
|
13
|
+
id: z.string(),
|
|
14
|
+
metadata: TrackMetadataSchema.optional(),
|
|
15
|
+
});
|
|
16
|
+
const AudioTrackSchema = BaseTrackSchema.extend({
|
|
17
|
+
type: z.literal('Audio'),
|
|
18
|
+
vadStatus: z.enum(['silence', 'speech']).optional(),
|
|
19
|
+
});
|
|
20
|
+
const VideoTrackSchema = BaseTrackSchema.extend({
|
|
21
|
+
type: z.literal('Video'),
|
|
22
|
+
});
|
|
23
|
+
const TrackSchema = z.discriminatedUnion('type', [
|
|
24
|
+
AudioTrackSchema,
|
|
25
|
+
VideoTrackSchema,
|
|
26
|
+
]);
|
|
27
|
+
const PeerSchema = z.object({
|
|
28
|
+
id: z.string(),
|
|
29
|
+
isLocal: z.boolean(),
|
|
30
|
+
tracks: z.array(TrackSchema),
|
|
31
|
+
metadata: z.record(z.any()),
|
|
32
|
+
});
|
|
33
|
+
const SimulcastConfigSchema = z.object({
|
|
34
|
+
enabled: z.boolean(),
|
|
35
|
+
activeEncodings: z.array(z.enum(['l', 'm', 'h'])),
|
|
36
|
+
});
|
|
37
|
+
const AudioOutputDeviceSchema = z.object({
|
|
38
|
+
name: z.string(),
|
|
39
|
+
type: z.enum(['bluetooth', 'headset', 'speaker', 'earpiece']),
|
|
40
|
+
});
|
|
41
|
+
const AudioDeviceEventSchema = z.object({
|
|
42
|
+
availableDevices: z.array(AudioOutputDeviceSchema),
|
|
43
|
+
selectedDevice: AudioOutputDeviceSchema.nullable(),
|
|
44
|
+
});
|
|
45
|
+
const CameraSchema = z.object({
|
|
46
|
+
id: z.string(),
|
|
47
|
+
name: z.string(),
|
|
48
|
+
facingDirection: z.enum(['front', 'back', 'unspecified']),
|
|
49
|
+
});
|
|
50
|
+
const CameraChangedEventSchema = z.object({
|
|
51
|
+
isCameraOn: z.boolean(),
|
|
52
|
+
currentCamera: CameraSchema.nullable(),
|
|
53
|
+
});
|
|
54
|
+
export function validateNativeEventPayload(eventName, payload) {
|
|
55
|
+
switch (eventName) {
|
|
56
|
+
case ReceivableEvents.IsMicrophoneOn:
|
|
57
|
+
case ReceivableEvents.IsScreenShareOn:
|
|
58
|
+
case ReceivableEvents.IsAppScreenShareOn:
|
|
59
|
+
z.boolean().parse(payload);
|
|
60
|
+
break;
|
|
61
|
+
case ReceivableEvents.SimulcastConfigUpdate:
|
|
62
|
+
SimulcastConfigSchema.parse(payload);
|
|
63
|
+
break;
|
|
64
|
+
case ReceivableEvents.PeersUpdate:
|
|
65
|
+
z.array(PeerSchema).parse(payload);
|
|
66
|
+
break;
|
|
67
|
+
case ReceivableEvents.AudioDeviceUpdate:
|
|
68
|
+
AudioDeviceEventSchema.parse(payload);
|
|
69
|
+
break;
|
|
70
|
+
case ReceivableEvents.BandwidthEstimation:
|
|
71
|
+
z.number().nullable().parse(payload);
|
|
72
|
+
break;
|
|
73
|
+
case ReceivableEvents.ReconnectionRetriesLimitReached:
|
|
74
|
+
case ReceivableEvents.ReconnectionStarted:
|
|
75
|
+
case ReceivableEvents.Reconnected:
|
|
76
|
+
z.undefined().parse(payload);
|
|
77
|
+
break;
|
|
78
|
+
case ReceivableEvents.Warning:
|
|
79
|
+
z.string().parse(payload);
|
|
80
|
+
break;
|
|
81
|
+
case ReceivableEvents.PeerStatusChanged:
|
|
82
|
+
z.enum(['connecting', 'connected', 'error', 'idle']).parse(payload);
|
|
83
|
+
break;
|
|
84
|
+
case ReceivableEvents.ReconnectionStatusChanged:
|
|
85
|
+
z.enum(['connecting', 'connected', 'error']).parse(payload);
|
|
86
|
+
break;
|
|
87
|
+
case ReceivableEvents.CurrentCameraChanged:
|
|
88
|
+
CameraChangedEventSchema.parse(payload);
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Unknown event: ${eventName}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=eventPayloadValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventPayloadValidator.js","sourceRoot":"","sources":["../../src/utils/eventPayloadValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n ReceivableEventPayloads,\n ReceivableEvents,\n} from '../RNFishjamClientModule';\n\nconst TrackMetadataSchema = z.object({\n active: z.boolean(),\n type: z.enum([\n 'microphone',\n 'camera',\n 'screenShareVideo',\n 'screenShareAudio',\n ]),\n});\n\nconst BaseTrackSchema = z.object({\n id: z.string(),\n metadata: TrackMetadataSchema.optional(),\n});\n\nconst AudioTrackSchema = BaseTrackSchema.extend({\n type: z.literal('Audio'),\n vadStatus: z.enum(['silence', 'speech']).optional(),\n});\n\nconst VideoTrackSchema = BaseTrackSchema.extend({\n type: z.literal('Video'),\n});\n\nconst TrackSchema = z.discriminatedUnion('type', [\n AudioTrackSchema,\n VideoTrackSchema,\n]);\n\nconst PeerSchema = z.object({\n id: z.string(),\n isLocal: z.boolean(),\n tracks: z.array(TrackSchema),\n metadata: z.record(z.any()),\n});\n\nconst SimulcastConfigSchema = z.object({\n enabled: z.boolean(),\n activeEncodings: z.array(z.enum(['l', 'm', 'h'])),\n});\n\nconst AudioOutputDeviceSchema = z.object({\n name: z.string(),\n type: z.enum(['bluetooth', 'headset', 'speaker', 'earpiece']),\n});\n\nconst AudioDeviceEventSchema = z.object({\n availableDevices: z.array(AudioOutputDeviceSchema),\n selectedDevice: AudioOutputDeviceSchema.nullable(),\n});\n\nconst CameraSchema = z.object({\n id: z.string(),\n name: z.string(),\n facingDirection: z.enum(['front', 'back', 'unspecified']),\n});\n\nconst CameraChangedEventSchema = z.object({\n isCameraOn: z.boolean(),\n currentCamera: CameraSchema.nullable(),\n});\n\nexport function validateNativeEventPayload<\n T extends keyof typeof ReceivableEvents,\n>(eventName: T, payload: ReceivableEventPayloads[T]): void {\n switch (eventName) {\n case ReceivableEvents.IsMicrophoneOn:\n case ReceivableEvents.IsScreenShareOn:\n case ReceivableEvents.IsAppScreenShareOn:\n z.boolean().parse(payload);\n break;\n\n case ReceivableEvents.SimulcastConfigUpdate:\n SimulcastConfigSchema.parse(payload);\n break;\n\n case ReceivableEvents.PeersUpdate:\n z.array(PeerSchema).parse(payload);\n break;\n\n case ReceivableEvents.AudioDeviceUpdate:\n AudioDeviceEventSchema.parse(payload);\n break;\n\n case ReceivableEvents.BandwidthEstimation:\n z.number().nullable().parse(payload);\n break;\n\n case ReceivableEvents.ReconnectionRetriesLimitReached:\n case ReceivableEvents.ReconnectionStarted:\n case ReceivableEvents.Reconnected:\n z.undefined().parse(payload);\n break;\n\n case ReceivableEvents.Warning:\n z.string().parse(payload);\n break;\n\n case ReceivableEvents.PeerStatusChanged:\n z.enum(['connecting', 'connected', 'error', 'idle']).parse(payload);\n break;\n\n case ReceivableEvents.ReconnectionStatusChanged:\n z.enum(['connecting', 'connected', 'error']).parse(payload);\n break;\n\n case ReceivableEvents.CurrentCameraChanged:\n CameraChangedEventSchema.parse(payload);\n break;\n\n default:\n throw new Error(`Unknown event: ${eventName}`);\n }\n}\n"]}
|
package/ios/Events.swift
CHANGED
|
@@ -17,11 +17,9 @@ class EmitableEvent {
|
|
|
17
17
|
case PeersUpdate
|
|
18
18
|
case AudioDeviceUpdate
|
|
19
19
|
case BandwidthEstimation
|
|
20
|
-
case ReconnectionRetriesLimitReached
|
|
21
|
-
case ReconnectionStarted
|
|
22
|
-
case Reconnected
|
|
23
20
|
case Warning
|
|
24
21
|
case PeerStatusChanged
|
|
22
|
+
case ReconnectionStatusChanged
|
|
25
23
|
case CurrentCameraChanged
|
|
26
24
|
|
|
27
25
|
var name: String {
|
|
@@ -41,10 +39,6 @@ class EmitableEvent {
|
|
|
41
39
|
self.eventContent = eventContent
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
static var reconnectionRetriesLimitReached: EmitableEvent { .init(event: .ReconnectionRetriesLimitReached) }
|
|
45
|
-
static var reconnectionStarted: EmitableEvent { .init(event: .ReconnectionStarted) }
|
|
46
|
-
static var reconnected: EmitableEvent { .init(event: .Reconnected) }
|
|
47
|
-
|
|
48
42
|
static func isMicrophoneOn(enabled: Bool) -> EmitableEvent { .init(event: .IsMicrophoneOn, eventContent: enabled) }
|
|
49
43
|
static func isScreenShareOn(enabled: Bool) -> EmitableEvent {
|
|
50
44
|
.init(event: .IsScreenShareOn, eventContent: enabled)
|
|
@@ -59,13 +53,19 @@ class EmitableEvent {
|
|
|
59
53
|
static func peerStatusChanged(peerStatus: PeerStatus) -> EmitableEvent {
|
|
60
54
|
.init(event: .PeerStatusChanged, eventContent: peerStatus.rawValue)
|
|
61
55
|
}
|
|
56
|
+
static func reconnectionStatusChanged(reconnectionStatus: ReconnectionStatus) -> EmitableEvent {
|
|
57
|
+
.init(event: .ReconnectionStatusChanged, eventContent: reconnectionStatus.rawValue)
|
|
58
|
+
}
|
|
62
59
|
|
|
63
|
-
static func currentCameraChanged(localCamera: LocalCamera?, isCameraOn: Bool
|
|
60
|
+
static func currentCameraChanged(localCamera: LocalCamera?, isCameraOn: Bool, isCameraInitialized: Bool)
|
|
61
|
+
-> EmitableEvent
|
|
62
|
+
{
|
|
64
63
|
return .init(
|
|
65
64
|
event: .CurrentCameraChanged,
|
|
66
65
|
eventContent: [
|
|
67
66
|
"currentCamera": localCamera as Any,
|
|
68
67
|
"isCameraOn": isCameraOn,
|
|
68
|
+
"isCameraInitialized": isCameraInitialized,
|
|
69
69
|
])
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -14,15 +14,19 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
14
14
|
var isAppScreenShareOn = false
|
|
15
15
|
var isConnected = false
|
|
16
16
|
|
|
17
|
-
private var isCameraInitialized = false
|
|
17
|
+
private(set) var isCameraInitialized = false {
|
|
18
|
+
didSet {
|
|
19
|
+
emit(
|
|
20
|
+
event: .currentCameraChanged(
|
|
21
|
+
localCamera: currentCamera, isCameraOn: isCameraOn, isCameraInitialized: isCameraInitialized))
|
|
22
|
+
}
|
|
23
|
+
}
|
|
18
24
|
|
|
19
25
|
var connectPromise: Promise? = nil
|
|
20
26
|
|
|
21
27
|
var videoSimulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
22
|
-
var localUserMetadata: Metadata = .init()
|
|
23
28
|
|
|
24
29
|
var screenShareSimulcastConfig: SimulcastConfig = SimulcastConfig()
|
|
25
|
-
var screenShareMaxBandwidth: TrackBandwidthLimit = .BandwidthLimit(0)
|
|
26
30
|
|
|
27
31
|
var cameraId: String? = nil
|
|
28
32
|
|
|
@@ -37,6 +41,12 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
44
|
+
private(set) var reconnectionStatus: ReconnectionStatus = .idle {
|
|
45
|
+
didSet {
|
|
46
|
+
emit(event: .reconnectionStatusChanged(reconnectionStatus: reconnectionStatus))
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
40
50
|
let sendEvent: (_ eventName: String, _ data: [String: Any?]) -> Void
|
|
41
51
|
|
|
42
52
|
static var tracksUpdateListenersManager = TracksUpdateListenersManager()
|
|
@@ -53,13 +63,10 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
private func getSimulcastConfigFromOptions(simulcastConfig: RNSimulcastConfig) throws -> SimulcastConfig {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
activeEncodings.append(fishjamEncoding)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
66
|
+
// iOS has a limit of 3 hardware encoders
|
|
67
|
+
// 3 simulcast layers + 1 screen share layer = 4, which is too much
|
|
68
|
+
// so we limit simulcast layers to 2
|
|
69
|
+
let activeEncodings: [TrackEncoding] = [.l, .h]
|
|
63
70
|
|
|
64
71
|
return SimulcastConfig(
|
|
65
72
|
enabled: simulcastConfig.enabled,
|
|
@@ -67,15 +74,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
67
74
|
)
|
|
68
75
|
}
|
|
69
76
|
|
|
70
|
-
private func getMaxBandwidthFromOptions(maxBandwidth: RNTrackBandwidthLimit) -> TrackBandwidthLimit {
|
|
71
|
-
if let maxBandwidth: Int = maxBandwidth.get() {
|
|
72
|
-
return .BandwidthLimit(maxBandwidth)
|
|
73
|
-
} else if let maxBandwidth: [String: Int] = maxBandwidth.get() {
|
|
74
|
-
return .SimulcastBandwidthLimit(maxBandwidth)
|
|
75
|
-
}
|
|
76
|
-
return .BandwidthLimit(0)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
77
|
func create() {
|
|
80
78
|
RNFishjamClient.fishjamClient = FishjamClient(listener: self)
|
|
81
79
|
}
|
|
@@ -83,7 +81,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
83
81
|
func getVideoParametersFromOptions(connectionOptions: CameraConfig) throws -> VideoParameters {
|
|
84
82
|
let videoQuality = connectionOptions.quality
|
|
85
83
|
let flipDimensions = connectionOptions.flipDimensions
|
|
86
|
-
let videoBandwidthLimit = getMaxBandwidthFromOptions(maxBandwidth: connectionOptions.maxBandwidth)
|
|
87
84
|
let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: connectionOptions.simulcastConfig)
|
|
88
85
|
|
|
89
86
|
let preset: VideoParameters = {
|
|
@@ -114,7 +111,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
114
111
|
}()
|
|
115
112
|
let videoParameters = VideoParameters(
|
|
116
113
|
dimensions: flipDimensions ? preset.dimensions.flipped : preset.dimensions,
|
|
117
|
-
maxBandwidth:
|
|
114
|
+
maxBandwidth: preset.maxBandwidth,
|
|
118
115
|
simulcastConfig: simulcastConfig
|
|
119
116
|
)
|
|
120
117
|
return videoParameters
|
|
@@ -207,7 +204,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
207
204
|
) {
|
|
208
205
|
peerStatus = .connecting
|
|
209
206
|
connectPromise = promise
|
|
210
|
-
localUserMetadata = ["server": [:], "peer": peerMetadata].toMetadata()
|
|
211
207
|
|
|
212
208
|
let reconnectConfig = FishjamCloudClient.ReconnectConfig(
|
|
213
209
|
maxAttempts: config.reconnectConfig.maxAttempts, initialDelayMs: config.reconnectConfig.initialDelayMs,
|
|
@@ -250,11 +246,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
250
246
|
try ensureCreated()
|
|
251
247
|
|
|
252
248
|
guard !isCameraInitialized else {
|
|
253
|
-
emit(
|
|
254
|
-
event: .warning(
|
|
255
|
-
message:
|
|
256
|
-
"Camera already started. You may only call startCamera once before leaveRoom is called."))
|
|
257
|
-
|
|
258
249
|
return true
|
|
259
250
|
}
|
|
260
251
|
|
|
@@ -288,7 +279,8 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
288
279
|
isCameraOn = enabled
|
|
289
280
|
emit(
|
|
290
281
|
event: .currentCameraChanged(
|
|
291
|
-
localCamera: cameraTrack.currentCaptureDevice?.toLocalCamera(), isCameraOn: enabled
|
|
282
|
+
localCamera: cameraTrack.currentCaptureDevice?.toLocalCamera(), isCameraOn: enabled,
|
|
283
|
+
isCameraInitialized: isCameraInitialized))
|
|
292
284
|
RNFishjamClient.localCameraTracksChangedListenersManager.notifyListeners()
|
|
293
285
|
}
|
|
294
286
|
|
|
@@ -316,11 +308,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
316
308
|
try await startMicrophone()
|
|
317
309
|
}
|
|
318
310
|
|
|
319
|
-
try updateLocalAudioTrackMetadata(metadata:
|
|
320
|
-
"active": isMicrophoneOn,
|
|
321
|
-
"paused": !isMicrophoneOn, //TODO: FCE-711
|
|
322
|
-
"type": "microphone",
|
|
323
|
-
])
|
|
311
|
+
try updateLocalAudioTrackMetadata(metadata: getMicrophoneTrackMetadata())
|
|
324
312
|
|
|
325
313
|
return isMicrophoneOn
|
|
326
314
|
}
|
|
@@ -330,12 +318,21 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
330
318
|
emit(event: .warning(message: "Microphone permission not granted."))
|
|
331
319
|
return
|
|
332
320
|
}
|
|
333
|
-
let microphoneTrack = RNFishjamClient.fishjamClient!.createAudioTrack(
|
|
321
|
+
let microphoneTrack = RNFishjamClient.fishjamClient!.createAudioTrack(
|
|
322
|
+
metadata: getMicrophoneTrackMetadata().toMetadata())
|
|
334
323
|
setAudioSessionMode()
|
|
335
324
|
setMicrophoneTrackState(microphoneTrack, enabled: true)
|
|
336
325
|
emitEndpoints()
|
|
337
326
|
}
|
|
338
327
|
|
|
328
|
+
private func getMicrophoneTrackMetadata() -> [String: Any] {
|
|
329
|
+
return [
|
|
330
|
+
"active": isMicrophoneOn,
|
|
331
|
+
"paused": !isMicrophoneOn, //TODO: FCE-711
|
|
332
|
+
"type": "microphone",
|
|
333
|
+
]
|
|
334
|
+
}
|
|
335
|
+
|
|
339
336
|
private func setMicrophoneTrackState(_ microphoneTrack: LocalAudioTrack, enabled: Bool) {
|
|
340
337
|
microphoneTrack.enabled = enabled
|
|
341
338
|
isMicrophoneOn = enabled
|
|
@@ -392,8 +389,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
392
389
|
let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screenShareOptions.simulcastConfig)
|
|
393
390
|
|
|
394
391
|
screenShareSimulcastConfig = simulcastConfig
|
|
395
|
-
screenShareMaxBandwidth = getMaxBandwidthFromOptions(
|
|
396
|
-
maxBandwidth: screenShareOptions.maxBandwidth)
|
|
397
392
|
let screenShareMetadata = screenShareOptions.screenShareMetadata.toMetadata()
|
|
398
393
|
let videoParameters = getScreenShareVideoParameters(options: screenShareOptions)
|
|
399
394
|
RNFishjamClient.fishjamClient!.prepareForScreenBroadcast(
|
|
@@ -447,7 +442,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
447
442
|
let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screenShareOptions.simulcastConfig)
|
|
448
443
|
|
|
449
444
|
screenShareSimulcastConfig = simulcastConfig
|
|
450
|
-
screenShareMaxBandwidth = getMaxBandwidthFromOptions(maxBandwidth: screenShareOptions.maxBandwidth)
|
|
451
445
|
let metadata = screenShareOptions.screenShareMetadata.toMetadata()
|
|
452
446
|
let videoParameters = getScreenShareVideoParameters(options: screenShareOptions)
|
|
453
447
|
let screenAppTrack = RNFishjamClient.fishjamClient!.createScreenAppTrack(
|
|
@@ -489,7 +483,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
489
483
|
return [localEndpoint] + remoteEndpoints
|
|
490
484
|
}
|
|
491
485
|
|
|
492
|
-
func getPeers()
|
|
486
|
+
func getPeers() -> [[String: Any?]] {
|
|
493
487
|
let endpoints = RNFishjamClient.getLocalAndRemoteEndpoints()
|
|
494
488
|
return endpoints.compactMap { endpoint in
|
|
495
489
|
[
|
|
@@ -512,7 +506,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
512
506
|
"id": track.id,
|
|
513
507
|
"type": "Audio",
|
|
514
508
|
"metadata": track.metadata.toDict(),
|
|
515
|
-
"vadStatus": track.vadStatus.
|
|
509
|
+
"vadStatus": track.vadStatus == .speech ? "speech" : "silence",
|
|
516
510
|
]
|
|
517
511
|
|
|
518
512
|
case let track as LocalCameraTrack:
|
|
@@ -722,10 +716,11 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
722
716
|
return res
|
|
723
717
|
}
|
|
724
718
|
|
|
725
|
-
func getStatistics() throws -> [String: Any] {
|
|
719
|
+
func getStatistics() async throws -> [String: Any] {
|
|
726
720
|
try ensureCreated()
|
|
727
721
|
|
|
728
|
-
let stats = RNFishjamClient.fishjamClient!.getStats()
|
|
722
|
+
let stats = await RNFishjamClient.fishjamClient!.getStats()
|
|
723
|
+
|
|
729
724
|
let pairs = stats.map { (key, value) in
|
|
730
725
|
let rnValue =
|
|
731
726
|
value is RTCOutboundStats
|
|
@@ -755,7 +750,6 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
755
750
|
}
|
|
756
751
|
return VideoParameters(
|
|
757
752
|
dimensions: preset.dimensions.flipped,
|
|
758
|
-
maxBandwidth: screenShareMaxBandwidth,
|
|
759
753
|
maxFps: preset.maxFps,
|
|
760
754
|
simulcastConfig: screenShareSimulcastConfig
|
|
761
755
|
)
|
|
@@ -768,7 +762,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
768
762
|
}
|
|
769
763
|
|
|
770
764
|
func emitEndpoints() {
|
|
771
|
-
emit(event: .peersUpdate(peersData:
|
|
765
|
+
emit(event: .peersUpdate(peersData: getPeers()))
|
|
772
766
|
}
|
|
773
767
|
|
|
774
768
|
func onJoined(peerID: String, peersInRoom: [String: Endpoint]) {
|
|
@@ -836,7 +830,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
836
830
|
"E_MEMBRANE_CONNECT", "Failed to connect: socket close, code: \(code), reason: \(reason)")
|
|
837
831
|
}
|
|
838
832
|
connectPromise = nil
|
|
839
|
-
peerStatus = .
|
|
833
|
+
peerStatus = .idle
|
|
840
834
|
}
|
|
841
835
|
|
|
842
836
|
func onSocketError() {
|
|
@@ -844,6 +838,7 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
844
838
|
connectPromise.reject("E_MEMBRANE_CONNECT", "Failed to connect: socket error")
|
|
845
839
|
}
|
|
846
840
|
connectPromise = nil
|
|
841
|
+
peerStatus = .error
|
|
847
842
|
}
|
|
848
843
|
|
|
849
844
|
func onSocketOpen() {}
|
|
@@ -892,21 +887,23 @@ class RNFishjamClient: FishjamClientListener {
|
|
|
892
887
|
}
|
|
893
888
|
|
|
894
889
|
func onReconnectionStarted() {
|
|
895
|
-
|
|
890
|
+
reconnectionStatus = .reconnecting
|
|
896
891
|
}
|
|
897
892
|
|
|
898
893
|
func onReconnected() {
|
|
899
|
-
|
|
894
|
+
reconnectionStatus = .idle
|
|
900
895
|
}
|
|
901
896
|
|
|
902
897
|
func onReconnectionRetriesLimitReached() {
|
|
903
|
-
|
|
898
|
+
reconnectionStatus = .error
|
|
904
899
|
}
|
|
905
900
|
|
|
906
901
|
}
|
|
907
902
|
|
|
908
903
|
extension RNFishjamClient: CameraCapturerDeviceChangedListener {
|
|
909
904
|
func onCaptureDeviceChanged(_ device: AVCaptureDevice?) {
|
|
910
|
-
emit(
|
|
905
|
+
emit(
|
|
906
|
+
event: .currentCameraChanged(
|
|
907
|
+
localCamera: device?.toLocalCamera(), isCameraOn: isCameraOn, isCameraInitialized: isCameraInitialized))
|
|
911
908
|
}
|
|
912
909
|
}
|