@stream-io/video-react-native-sdk 1.39.0 → 1.40.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/CHANGELOG.md +24 -6
- package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +81 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/AudioPipeline.kt +436 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/EncoderConstants.kt +17 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/PipelineHost.kt +36 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderPlaybackSamplesSink.kt +60 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderVideoSink.kt +31 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/TracksRecorderManager.kt +338 -0
- package/android/src/main/java/com/streamvideo/reactnative/recorder/VideoPipeline.kt +472 -0
- package/dist/commonjs/components/Call/CallContent/CallContent.js +93 -48
- package/dist/commonjs/components/Call/CallContent/CallContent.js.map +1 -1
- package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js +22 -20
- package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
- package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js +2 -1
- package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js +10 -6
- package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/CallControls.js +7 -5
- package/dist/commonjs/components/Call/CallControls/CallControls.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/CallControlsButton.js +11 -8
- package/dist/commonjs/components/Call/CallControls/CallControlsButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/HangupCallButton.js +10 -6
- package/dist/commonjs/components/Call/CallControls/HangupCallButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js +11 -9
- package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/LobbyControls.js +5 -3
- package/dist/commonjs/components/Call/CallControls/LobbyControls.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js +12 -9
- package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ReactionsButton.js +22 -15
- package/dist/commonjs/components/Call/CallControls/ReactionsButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/RejectCallButton.js +10 -6
- package/dist/commonjs/components/Call/CallControls/RejectCallButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js +15 -11
- package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js +13 -9
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js +18 -13
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js +17 -12
- package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js +13 -9
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js +17 -12
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js +39 -34
- package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
- package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js +17 -12
- package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
- package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js +36 -24
- package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
- package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js +30 -28
- package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
- package/dist/commonjs/components/Call/Lobby/JoinCallButton.js +10 -7
- package/dist/commonjs/components/Call/Lobby/JoinCallButton.js.map +1 -1
- package/dist/commonjs/components/Call/Lobby/Lobby.js +45 -35
- package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/commonjs/components/Call/Lobby/LobbyFooter.js +21 -16
- package/dist/commonjs/components/Call/Lobby/LobbyFooter.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js +2 -1
- package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js +2 -1
- package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js +32 -22
- package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js +37 -27
- package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js +13 -11
- package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js +28 -22
- package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js +25 -22
- package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js.map +1 -1
- package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js +38 -34
- package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js +16 -12
- package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js +16 -12
- package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +19 -14
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js +5 -3
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +19 -16
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +19 -14
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +11 -8
- package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +78 -57
- package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js +13 -46
- package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js +48 -22
- package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +7 -5
- package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js +12 -9
- package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js +11 -7
- package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +18 -13
- package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js +10 -7
- package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +18 -13
- package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
- package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js +41 -37
- package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
- package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js +33 -23
- package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +18 -15
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +20 -16
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/index.js +55 -48
- package/dist/commonjs/components/Participant/FloatingParticipantView/index.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js +64 -52
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +30 -27
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js +11 -7
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js +17 -14
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js +27 -24
- package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js +8 -7
- package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js +35 -32
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
- package/dist/commonjs/components/utility/Avatar.js +18 -15
- package/dist/commonjs/components/utility/Avatar.js.map +1 -1
- package/dist/commonjs/components/utility/ScreenShareOverlay.js +35 -29
- package/dist/commonjs/components/utility/ScreenShareOverlay.js.map +1 -1
- package/dist/commonjs/contexts/BackgroundFilters.js +5 -3
- package/dist/commonjs/contexts/BackgroundFilters.js.map +1 -1
- package/dist/commonjs/contexts/ThemeContext.js +5 -3
- package/dist/commonjs/contexts/ThemeContext.js.map +1 -1
- package/dist/commonjs/contexts/internal/ScreenshotIosContext.js +5 -3
- package/dist/commonjs/contexts/internal/ScreenshotIosContext.js.map +1 -1
- package/dist/commonjs/hooks/index.js +11 -0
- package/dist/commonjs/hooks/index.js.map +1 -1
- package/dist/commonjs/hooks/useAutoEnterPiPEffect.js +5 -10
- package/dist/commonjs/hooks/useAutoEnterPiPEffect.js.map +1 -1
- package/dist/commonjs/hooks/useLoopbackRecording.js +263 -0
- package/dist/commonjs/hooks/useLoopbackRecording.js.map +1 -0
- package/dist/commonjs/hooks/useModeration.js +4 -1
- package/dist/commonjs/hooks/useModeration.js.map +1 -1
- package/dist/commonjs/icons/Back.js +8 -6
- package/dist/commonjs/icons/Back.js.map +1 -1
- package/dist/commonjs/icons/BadNetwork.js +11 -9
- package/dist/commonjs/icons/BadNetwork.js.map +1 -1
- package/dist/commonjs/icons/CameraSwitch.js +8 -6
- package/dist/commonjs/icons/CameraSwitch.js.map +1 -1
- package/dist/commonjs/icons/EndStreamIcon.js +8 -6
- package/dist/commonjs/icons/EndStreamIcon.js.map +1 -1
- package/dist/commonjs/icons/Eye.js +8 -6
- package/dist/commonjs/icons/Eye.js.map +1 -1
- package/dist/commonjs/icons/IconWrapper.js +5 -3
- package/dist/commonjs/icons/IconWrapper.js.map +1 -1
- package/dist/commonjs/icons/LivestreamControls.js +44 -39
- package/dist/commonjs/icons/LivestreamControls.js.map +1 -1
- package/dist/commonjs/icons/Lock.js +8 -6
- package/dist/commonjs/icons/Lock.js.map +1 -1
- package/dist/commonjs/icons/Maximize.js +33 -31
- package/dist/commonjs/icons/Maximize.js.map +1 -1
- package/dist/commonjs/icons/Mic.js +8 -6
- package/dist/commonjs/icons/Mic.js.map +1 -1
- package/dist/commonjs/icons/MicOff.js +8 -6
- package/dist/commonjs/icons/MicOff.js.map +1 -1
- package/dist/commonjs/icons/Phone.js +8 -6
- package/dist/commonjs/icons/Phone.js.map +1 -1
- package/dist/commonjs/icons/PhoneDown.js +8 -6
- package/dist/commonjs/icons/PhoneDown.js.map +1 -1
- package/dist/commonjs/icons/PinVertical.js +8 -6
- package/dist/commonjs/icons/PinVertical.js.map +1 -1
- package/dist/commonjs/icons/Reaction.js +8 -6
- package/dist/commonjs/icons/Reaction.js.map +1 -1
- package/dist/commonjs/icons/ScreenShare.js +8 -6
- package/dist/commonjs/icons/ScreenShare.js.map +1 -1
- package/dist/commonjs/icons/ScreenShareIndicator.js +21 -18
- package/dist/commonjs/icons/ScreenShareIndicator.js.map +1 -1
- package/dist/commonjs/icons/StartStreamIcon.js +8 -6
- package/dist/commonjs/icons/StartStreamIcon.js.map +1 -1
- package/dist/commonjs/icons/StopScreenShare.js +11 -9
- package/dist/commonjs/icons/StopScreenShare.js.map +1 -1
- package/dist/commonjs/icons/Video.js +8 -6
- package/dist/commonjs/icons/Video.js.map +1 -1
- package/dist/commonjs/icons/VideoSlash.js +8 -6
- package/dist/commonjs/icons/VideoSlash.js.map +1 -1
- package/dist/commonjs/icons/index.js +0 -66
- package/dist/commonjs/icons/index.js.map +1 -1
- package/dist/commonjs/package.json +1 -0
- package/dist/commonjs/providers/BusyTonePlayer.js +7 -7
- package/dist/commonjs/providers/BusyTonePlayer.js.map +1 -1
- package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js +5 -3
- package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/AppStateListener.js +3 -0
- package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/DeviceStats.js +1 -1
- package/dist/commonjs/providers/StreamCall/DeviceStats.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/index.js +5 -3
- package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
- package/dist/commonjs/providers/StreamVideo.js +10 -5
- package/dist/commonjs/providers/StreamVideo.js.map +1 -1
- package/dist/commonjs/utils/StreamVideoRN/index.js +0 -1
- package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/commonjs/utils/internal/callingx/callingx.js +4 -4
- package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -1
- package/dist/commonjs/utils/internal/registerSDKGlobals.js +2 -2
- package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/commonjs/utils/push/libs/firebaseMessaging/index.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/components/Call/CallContent/CallContent.js +95 -48
- package/dist/module/components/Call/CallContent/CallContent.js.map +1 -1
- package/dist/module/components/Call/CallContent/RTCViewPipIOS.js +24 -20
- package/dist/module/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
- package/dist/module/components/Call/CallContent/RTCViewPipNative.js +4 -1
- package/dist/module/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
- package/dist/module/components/Call/CallContent/index.js +2 -0
- package/dist/module/components/Call/CallContent/index.js.map +1 -1
- package/dist/module/components/Call/CallControls/AcceptCallButton.js +12 -7
- package/dist/module/components/Call/CallControls/AcceptCallButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/CallControls.js +9 -6
- package/dist/module/components/Call/CallControls/CallControls.js.map +1 -1
- package/dist/module/components/Call/CallControls/CallControlsButton.js +13 -8
- package/dist/module/components/Call/CallControls/CallControlsButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/HangupCallButton.js +12 -7
- package/dist/module/components/Call/CallControls/HangupCallButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/IncomingCallControls.js +13 -10
- package/dist/module/components/Call/CallControls/IncomingCallControls.js.map +1 -1
- package/dist/module/components/Call/CallControls/LobbyControls.js +7 -3
- package/dist/module/components/Call/CallControls/LobbyControls.js.map +1 -1
- package/dist/module/components/Call/CallControls/OutgoingCallControls.js +14 -10
- package/dist/module/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
- package/dist/module/components/Call/CallControls/ReactionsButton.js +24 -16
- package/dist/module/components/Call/CallControls/ReactionsButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/RejectCallButton.js +12 -7
- package/dist/module/components/Call/CallControls/RejectCallButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js +17 -12
- package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js +15 -10
- package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js +20 -14
- package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js +19 -13
- package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js +15 -10
- package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js +19 -13
- package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/index.js +2 -0
- package/dist/module/components/Call/CallControls/index.js.map +1 -1
- package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js +41 -34
- package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
- package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js +19 -13
- package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
- package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js +38 -25
- package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
- package/dist/module/components/Call/CallLayout/index.js +2 -0
- package/dist/module/components/Call/CallLayout/index.js.map +1 -1
- package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js +32 -28
- package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
- package/dist/module/components/Call/CallParticipantsList/index.js +2 -0
- package/dist/module/components/Call/CallParticipantsList/index.js.map +1 -1
- package/dist/module/components/Call/Lobby/JoinCallButton.js +12 -8
- package/dist/module/components/Call/Lobby/JoinCallButton.js.map +1 -1
- package/dist/module/components/Call/Lobby/Lobby.js +47 -36
- package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/module/components/Call/Lobby/LobbyFooter.js +23 -17
- package/dist/module/components/Call/Lobby/LobbyFooter.js.map +1 -1
- package/dist/module/components/Call/Lobby/index.js +2 -0
- package/dist/module/components/Call/Lobby/index.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js +4 -1
- package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js +4 -1
- package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/IncomingCall.js +34 -23
- package/dist/module/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/OutgoingCall.js +39 -28
- package/dist/module/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/RingingCallContent.js +15 -12
- package/dist/module/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js +30 -22
- package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/UserInfo.js +27 -22
- package/dist/module/components/Call/RingingCallContent/UserInfo.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/index.js +2 -0
- package/dist/module/components/Call/RingingCallContent/index.js.map +1 -1
- package/dist/module/components/Call/index.js +2 -0
- package/dist/module/components/Call/index.js.map +1 -1
- package/dist/module/components/Livestream/HostLivestream/HostLivestream.js +40 -35
- package/dist/module/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
- package/dist/module/components/Livestream/HostLivestream/index.js +2 -0
- package/dist/module/components/Livestream/HostLivestream/index.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js +18 -13
- package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js +18 -13
- package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +21 -14
- package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js +7 -4
- package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +21 -16
- package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +21 -14
- package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +13 -9
- package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +80 -58
- package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/index.js +2 -0
- package/dist/module/components/Livestream/LivestreamControls/index.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js +14 -46
- package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamLayout/index.js +2 -0
- package/dist/module/components/Livestream/LivestreamLayout/index.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js +52 -25
- package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +9 -5
- package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamPlayer/index.js +2 -0
- package/dist/module/components/Livestream/LivestreamPlayer/index.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js +14 -10
- package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js +13 -8
- package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +20 -14
- package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js +12 -8
- package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +20 -14
- package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamTopView/index.js +2 -0
- package/dist/module/components/Livestream/LivestreamTopView/index.js.map +1 -1
- package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js +43 -38
- package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
- package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js +35 -23
- package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
- package/dist/module/components/Livestream/ViewerLivestream/index.js +2 -0
- package/dist/module/components/Livestream/ViewerLivestream/index.js.map +1 -1
- package/dist/module/components/Livestream/index.js +2 -0
- package/dist/module/components/Livestream/index.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +20 -15
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +22 -16
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js +2 -0
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js +2 -0
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/index.js +56 -49
- package/dist/module/components/Participant/FloatingParticipantView/index.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js +2 -0
- package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js +66 -53
- package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +32 -28
- package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js +13 -8
- package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js +19 -15
- package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantView.js +29 -24
- package/dist/module/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js +10 -8
- package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js +2 -0
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js +37 -31
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/index.js +2 -0
- package/dist/module/components/Participant/ParticipantView/index.js.map +1 -1
- package/dist/module/components/Participant/index.js +2 -0
- package/dist/module/components/Participant/index.js.map +1 -1
- package/dist/module/components/index.js +2 -0
- package/dist/module/components/index.js.map +1 -1
- package/dist/module/components/utility/Avatar.js +20 -16
- package/dist/module/components/utility/Avatar.js.map +1 -1
- package/dist/module/components/utility/ScreenShareOverlay.js +37 -30
- package/dist/module/components/utility/ScreenShareOverlay.js.map +1 -1
- package/dist/module/components/utility/index.js +2 -0
- package/dist/module/components/utility/index.js.map +1 -1
- package/dist/module/constants/TestIds.js +2 -0
- package/dist/module/constants/TestIds.js.map +1 -1
- package/dist/module/constants/index.js +2 -0
- package/dist/module/constants/index.js.map +1 -1
- package/dist/module/contexts/BackgroundFilters.js +7 -4
- package/dist/module/contexts/BackgroundFilters.js.map +1 -1
- package/dist/module/contexts/ThemeContext.js +7 -4
- package/dist/module/contexts/ThemeContext.js.map +1 -1
- package/dist/module/contexts/index.js +2 -0
- package/dist/module/contexts/index.js.map +1 -1
- package/dist/module/contexts/internal/BackgroundFiltersContext.js +2 -0
- package/dist/module/contexts/internal/BackgroundFiltersContext.js.map +1 -1
- package/dist/module/contexts/internal/ScreenshotIosContext.js +7 -3
- package/dist/module/contexts/internal/ScreenshotIosContext.js.map +1 -1
- package/dist/module/hooks/index.js +3 -0
- package/dist/module/hooks/index.js.map +1 -1
- package/dist/module/hooks/push/index.js +2 -0
- package/dist/module/hooks/push/index.js.map +1 -1
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +2 -0
- package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
- package/dist/module/hooks/push/useInitAndroidTokenAndRest.js +2 -0
- package/dist/module/hooks/push/useInitAndroidTokenAndRest.js.map +1 -1
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +2 -0
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +2 -0
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/module/hooks/useAutoEnterPiPEffect.js +7 -10
- package/dist/module/hooks/useAutoEnterPiPEffect.js.map +1 -1
- package/dist/module/hooks/useIsInPiPMode.js +2 -0
- package/dist/module/hooks/useIsInPiPMode.js.map +1 -1
- package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js +2 -0
- package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js.map +1 -1
- package/dist/module/hooks/useLoopbackRecording.js +260 -0
- package/dist/module/hooks/useLoopbackRecording.js.map +1 -0
- package/dist/module/hooks/useModeration.js +6 -1
- package/dist/module/hooks/useModeration.js.map +1 -1
- package/dist/module/hooks/usePaginatedLayoutSortPreset.js +2 -0
- package/dist/module/hooks/usePaginatedLayoutSortPreset.js.map +1 -1
- package/dist/module/hooks/usePermissionNotification.js +2 -0
- package/dist/module/hooks/usePermissionNotification.js.map +1 -1
- package/dist/module/hooks/usePermissionRequest.js +2 -0
- package/dist/module/hooks/usePermissionRequest.js.map +1 -1
- package/dist/module/hooks/useScreenShareAudioMixing.js +2 -0
- package/dist/module/hooks/useScreenShareAudioMixing.js.map +1 -1
- package/dist/module/hooks/useScreenShareButton.js +2 -0
- package/dist/module/hooks/useScreenShareButton.js.map +1 -1
- package/dist/module/hooks/useScreenshot.js +2 -0
- package/dist/module/hooks/useScreenshot.js.map +1 -1
- package/dist/module/hooks/useTrackDimensions.js +2 -0
- package/dist/module/hooks/useTrackDimensions.js.map +1 -1
- package/dist/module/icons/Back.js +10 -6
- package/dist/module/icons/Back.js.map +1 -1
- package/dist/module/icons/BadNetwork.js +13 -9
- package/dist/module/icons/BadNetwork.js.map +1 -1
- package/dist/module/icons/CameraSwitch.js +10 -6
- package/dist/module/icons/CameraSwitch.js.map +1 -1
- package/dist/module/icons/EndStreamIcon.js +10 -6
- package/dist/module/icons/EndStreamIcon.js.map +1 -1
- package/dist/module/icons/Eye.js +10 -6
- package/dist/module/icons/Eye.js.map +1 -1
- package/dist/module/icons/IconWrapper.js +7 -3
- package/dist/module/icons/IconWrapper.js.map +1 -1
- package/dist/module/icons/LivestreamControls.js +46 -39
- package/dist/module/icons/LivestreamControls.js.map +1 -1
- package/dist/module/icons/Lock.js +10 -6
- package/dist/module/icons/Lock.js.map +1 -1
- package/dist/module/icons/Maximize.js +35 -31
- package/dist/module/icons/Maximize.js.map +1 -1
- package/dist/module/icons/Mic.js +10 -6
- package/dist/module/icons/Mic.js.map +1 -1
- package/dist/module/icons/MicOff.js +10 -6
- package/dist/module/icons/MicOff.js.map +1 -1
- package/dist/module/icons/Phone.js +10 -6
- package/dist/module/icons/Phone.js.map +1 -1
- package/dist/module/icons/PhoneDown.js +10 -6
- package/dist/module/icons/PhoneDown.js.map +1 -1
- package/dist/module/icons/PinVertical.js +10 -6
- package/dist/module/icons/PinVertical.js.map +1 -1
- package/dist/module/icons/Reaction.js +10 -6
- package/dist/module/icons/Reaction.js.map +1 -1
- package/dist/module/icons/ScreenShare.js +10 -6
- package/dist/module/icons/ScreenShare.js.map +1 -1
- package/dist/module/icons/ScreenShareIndicator.js +23 -18
- package/dist/module/icons/ScreenShareIndicator.js.map +1 -1
- package/dist/module/icons/StartStreamIcon.js +10 -6
- package/dist/module/icons/StartStreamIcon.js.map +1 -1
- package/dist/module/icons/StopScreenShare.js +13 -9
- package/dist/module/icons/StopScreenShare.js.map +1 -1
- package/dist/module/icons/Video.js +10 -6
- package/dist/module/icons/Video.js.map +1 -1
- package/dist/module/icons/VideoSlash.js +10 -6
- package/dist/module/icons/VideoSlash.js.map +1 -1
- package/dist/module/icons/index.js +2 -6
- package/dist/module/icons/index.js.map +1 -1
- package/dist/module/index.js +2 -0
- package/dist/module/index.js.map +1 -1
- package/dist/module/modules/ScreenShareAudioManager.js +2 -0
- package/dist/module/modules/ScreenShareAudioManager.js.map +1 -1
- package/dist/module/modules/call-manager/CallManager.js +2 -0
- package/dist/module/modules/call-manager/CallManager.js.map +1 -1
- package/dist/module/modules/call-manager/PrevLibDetection.js +2 -0
- package/dist/module/modules/call-manager/PrevLibDetection.js.map +1 -1
- package/dist/module/modules/call-manager/index.js +2 -0
- package/dist/module/modules/call-manager/index.js.map +1 -1
- package/dist/module/modules/call-manager/native-module.d.js +2 -0
- package/dist/module/modules/call-manager/native-module.d.js.map +1 -1
- package/dist/module/modules/call-manager/types.js +1 -1
- package/dist/module/providers/BusyTonePlayer.js +9 -7
- package/dist/module/providers/BusyTonePlayer.js.map +1 -1
- package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js +7 -4
- package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
- package/dist/module/providers/NoiseCancellation/index.js +2 -0
- package/dist/module/providers/NoiseCancellation/index.js.map +1 -1
- package/dist/module/providers/NoiseCancellation/lib.js +2 -0
- package/dist/module/providers/NoiseCancellation/lib.js.map +1 -1
- package/dist/module/providers/StreamCall/AppStateListener.js +5 -0
- package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
- package/dist/module/providers/StreamCall/AudioInterruptionTracer.js +2 -0
- package/dist/module/providers/StreamCall/AudioInterruptionTracer.js.map +1 -1
- package/dist/module/providers/StreamCall/DeviceStats.js +3 -1
- package/dist/module/providers/StreamCall/DeviceStats.js.map +1 -1
- package/dist/module/providers/StreamCall/index.js +7 -4
- package/dist/module/providers/StreamCall/index.js.map +1 -1
- package/dist/module/providers/StreamVideo.js +12 -5
- package/dist/module/providers/StreamVideo.js.map +1 -1
- package/dist/module/theme/colors.js +2 -0
- package/dist/module/theme/colors.js.map +1 -1
- package/dist/module/theme/constants.js +2 -0
- package/dist/module/theme/constants.js.map +1 -1
- package/dist/module/theme/index.js +2 -0
- package/dist/module/theme/index.js.map +1 -1
- package/dist/module/theme/theme.js +2 -0
- package/dist/module/theme/theme.js.map +1 -1
- package/dist/module/theme/types.js +2 -0
- package/dist/module/translations/index.js +2 -0
- package/dist/module/translations/index.js.map +1 -1
- package/dist/module/utils/StreamVideoRN/index.js +2 -1
- package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/module/utils/StreamVideoRN/types.js +2 -0
- package/dist/module/utils/enterPiPAndroid.js +2 -0
- package/dist/module/utils/enterPiPAndroid.js.map +1 -1
- package/dist/module/utils/getAndroidDefaultRingtoneUrl.js +2 -0
- package/dist/module/utils/getAndroidDefaultRingtoneUrl.js.map +1 -1
- package/dist/module/utils/hooks/index.js +2 -0
- package/dist/module/utils/hooks/index.js.map +1 -1
- package/dist/module/utils/hooks/usePrevious.js +2 -0
- package/dist/module/utils/hooks/usePrevious.js.map +1 -1
- package/dist/module/utils/index.js +2 -0
- package/dist/module/utils/index.js.map +1 -1
- package/dist/module/utils/internal/callingx/audioSessionPromise.js +2 -0
- package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +1 -1
- package/dist/module/utils/internal/callingx/callingx.js +6 -4
- package/dist/module/utils/internal/callingx/callingx.js.map +1 -1
- package/dist/module/utils/internal/optionallibs/gestureHandler.js +2 -0
- package/dist/module/utils/internal/optionallibs/gestureHandler.js.map +1 -1
- package/dist/module/utils/internal/optionallibs/index.js +2 -0
- package/dist/module/utils/internal/optionallibs/index.js.map +1 -1
- package/dist/module/utils/internal/optionallibs/reanimated.js +2 -0
- package/dist/module/utils/internal/optionallibs/reanimated.js.map +1 -1
- package/dist/module/utils/internal/pushLogoutCallback.js +2 -0
- package/dist/module/utils/internal/pushLogoutCallback.js.map +1 -1
- package/dist/module/utils/internal/registerSDKGlobals.js +4 -2
- package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/module/utils/internal/rxSubjects.js +2 -0
- package/dist/module/utils/internal/rxSubjects.js.map +1 -1
- package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js +2 -0
- package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js.map +1 -1
- package/dist/module/utils/keepCallAliveHeadlessTask.js +2 -0
- package/dist/module/utils/keepCallAliveHeadlessTask.js.map +1 -1
- package/dist/module/utils/push/android.js +2 -0
- package/dist/module/utils/push/android.js.map +1 -1
- package/dist/module/utils/push/index.js +2 -0
- package/dist/module/utils/push/index.js.map +1 -1
- package/dist/module/utils/push/internal/constants.js +2 -0
- package/dist/module/utils/push/internal/constants.js.map +1 -1
- package/dist/module/utils/push/internal/ios.js +2 -0
- package/dist/module/utils/push/internal/ios.js.map +1 -1
- package/dist/module/utils/push/internal/utils.js +2 -0
- package/dist/module/utils/push/internal/utils.js.map +1 -1
- package/dist/module/utils/push/libs/callingx.js +2 -0
- package/dist/module/utils/push/libs/callingx.js.map +1 -1
- package/dist/module/utils/push/libs/firebaseMessaging/index.js +2 -0
- package/dist/module/utils/push/libs/firebaseMessaging/index.js.map +1 -1
- package/dist/module/utils/push/libs/firebaseMessaging/lib.js +2 -0
- package/dist/module/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
- package/dist/module/utils/push/libs/index.js +2 -0
- package/dist/module/utils/push/libs/index.js.map +1 -1
- package/dist/module/utils/push/setupCallingExpEvents.js +2 -0
- package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -1
- package/dist/module/utils/push/setupIosVoipPushEvents.js +2 -0
- package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
- package/dist/module/utils/push/utils.js +2 -0
- package/dist/module/utils/push/utils.js.map +1 -1
- package/dist/module/utils/setClientDetails.js +2 -0
- package/dist/module/utils/setClientDetails.js.map +1 -1
- package/dist/module/version.js +3 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/components/Call/CallContent/CallContent.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallLayout/CallParticipantsGrid.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallLayout/CallParticipantsSpotlight.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallParticipantsList/CallParticipantsList.d.ts.map +1 -1
- package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/HostLivestream/HostLivestream.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamLayout/LivestreamLayout.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamPlayer/LivestreamEnded.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/ViewerLivestream/ViewerLivestream.d.ts.map +1 -1
- package/dist/typescript/components/Participant/FloatingParticipantView/index.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts +1 -1
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts.map +1 -1
- package/dist/typescript/contexts/BackgroundFilters.d.ts +1 -1
- package/dist/typescript/contexts/BackgroundFilters.d.ts.map +1 -1
- package/dist/typescript/hooks/index.d.ts +1 -0
- package/dist/typescript/hooks/index.d.ts.map +1 -1
- package/dist/typescript/hooks/useAutoEnterPiPEffect.d.ts.map +1 -1
- package/dist/typescript/hooks/useLoopbackRecording.d.ts +85 -0
- package/dist/typescript/hooks/useLoopbackRecording.d.ts.map +1 -0
- package/dist/typescript/hooks/useModeration.d.ts.map +1 -1
- package/dist/typescript/icons/index.d.ts +0 -6
- package/dist/typescript/icons/index.d.ts.map +1 -1
- package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
- package/dist/typescript/providers/StreamCall/DeviceStats.d.ts.map +1 -1
- package/dist/typescript/utils/StreamVideoRN/index.d.ts +0 -1
- package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
- package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts +2 -16
- package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/ios/StreamVideoReactNative-Bridging-Header.h +2 -0
- package/ios/StreamVideoReactNative.m +81 -0
- package/ios/TracksRecorder/AudioPipeline.swift +270 -0
- package/ios/TracksRecorder/PipelineHost.swift +56 -0
- package/ios/TracksRecorder/RecorderAudioRenderTap.swift +144 -0
- package/ios/TracksRecorder/RecorderVideoSink.swift +137 -0
- package/ios/TracksRecorder/TracksRecorderManager.swift +333 -0
- package/ios/TracksRecorder/VideoPipeline.swift +297 -0
- package/package.json +10 -8
- package/src/components/Call/CallContent/CallContent.tsx +69 -39
- package/src/components/Call/CallLayout/CallParticipantsGrid.tsx +4 -6
- package/src/components/Call/CallLayout/CallParticipantsSpotlight.tsx +30 -21
- package/src/components/Call/CallParticipantsList/CallParticipantsList.tsx +23 -9
- package/src/components/Call/Lobby/Lobby.tsx +9 -5
- package/src/components/Livestream/HostLivestream/HostLivestream.tsx +5 -6
- package/src/components/Livestream/LivestreamControls/ViewerLivestreamControls.tsx +1 -1
- package/src/components/Livestream/LivestreamLayout/LivestreamLayout.tsx +4 -64
- package/src/components/Livestream/LivestreamPlayer/LivestreamEnded.tsx +54 -18
- package/src/components/Livestream/LivestreamTopView/DurationBadge.tsx +2 -2
- package/src/components/Livestream/ViewerLivestream/ViewerLivestream.tsx +10 -12
- package/src/components/Participant/FloatingParticipantView/index.tsx +26 -18
- package/src/components/Participant/ParticipantView/ParticipantReaction.tsx +1 -1
- package/src/components/Participant/ParticipantView/ParticipantView.tsx +68 -64
- package/src/components/Participant/ParticipantView/VideoRenderer/index.tsx +192 -179
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAutoEnterPiPEffect.tsx +5 -11
- package/src/hooks/useLoopbackRecording.ts +448 -0
- package/src/hooks/useModeration.ts +4 -1
- package/src/icons/index.tsx +0 -6
- package/src/providers/BusyTonePlayer.tsx +11 -11
- package/src/providers/StreamCall/AppStateListener.tsx +3 -0
- package/src/providers/StreamCall/DeviceStats.tsx +2 -1
- package/src/utils/StreamVideoRN/index.ts +0 -1
- package/src/utils/internal/callingx/callingx.ts +20 -10
- package/src/utils/internal/registerSDKGlobals.ts +2 -2
- package/src/utils/push/libs/firebaseMessaging/index.ts +4 -2
- package/src/version.ts +1 -1
- package/dist/commonjs/icons/LeaveStreamIcon.js +0 -20
- package/dist/commonjs/icons/LeaveStreamIcon.js.map +0 -1
- package/dist/commonjs/icons/Settings.js +0 -22
- package/dist/commonjs/icons/Settings.js.map +0 -1
- package/dist/commonjs/icons/ShieldBadge.js +0 -20
- package/dist/commonjs/icons/ShieldBadge.js.map +0 -1
- package/dist/commonjs/icons/Spotlight.js +0 -21
- package/dist/commonjs/icons/Spotlight.js.map +0 -1
- package/dist/commonjs/icons/ThreeDots.js +0 -31
- package/dist/commonjs/icons/ThreeDots.js.map +0 -1
- package/dist/commonjs/icons/TopViewBackground.js +0 -35
- package/dist/commonjs/icons/TopViewBackground.js.map +0 -1
- package/dist/module/icons/LeaveStreamIcon.js +0 -12
- package/dist/module/icons/LeaveStreamIcon.js.map +0 -1
- package/dist/module/icons/Settings.js +0 -13
- package/dist/module/icons/Settings.js.map +0 -1
- package/dist/module/icons/ShieldBadge.js +0 -12
- package/dist/module/icons/ShieldBadge.js.map +0 -1
- package/dist/module/icons/Spotlight.js +0 -13
- package/dist/module/icons/Spotlight.js.map +0 -1
- package/dist/module/icons/ThreeDots.js +0 -23
- package/dist/module/icons/ThreeDots.js.map +0 -1
- package/dist/module/icons/TopViewBackground.js +0 -27
- package/dist/module/icons/TopViewBackground.js.map +0 -1
- package/dist/typescript/icons/LeaveStreamIcon.d.ts +0 -3
- package/dist/typescript/icons/LeaveStreamIcon.d.ts.map +0 -1
- package/dist/typescript/icons/Settings.d.ts +0 -7
- package/dist/typescript/icons/Settings.d.ts.map +0 -1
- package/dist/typescript/icons/ShieldBadge.d.ts +0 -3
- package/dist/typescript/icons/ShieldBadge.d.ts.map +0 -1
- package/dist/typescript/icons/Spotlight.d.ts +0 -8
- package/dist/typescript/icons/Spotlight.d.ts.map +0 -1
- package/dist/typescript/icons/ThreeDots.d.ts +0 -7
- package/dist/typescript/icons/ThreeDots.d.ts.map +0 -1
- package/dist/typescript/icons/TopViewBackground.d.ts +0 -15
- package/dist/typescript/icons/TopViewBackground.d.ts.map +0 -1
- package/src/icons/LeaveStreamIcon.tsx +0 -13
- package/src/icons/Settings.tsx +0 -14
- package/src/icons/ShieldBadge.tsx +0 -13
- package/src/icons/Spotlight.tsx +0 -18
- package/src/icons/ThreeDots.tsx +0 -14
- package/src/icons/TopViewBackground.tsx +0 -43
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { NativeModules } from 'react-native';
|
|
3
|
+
import { combineLatest } from 'rxjs';
|
|
4
|
+
import {
|
|
5
|
+
Call,
|
|
6
|
+
CallingState,
|
|
7
|
+
videoLoggerSystem,
|
|
8
|
+
type StreamVideoParticipant,
|
|
9
|
+
} from '@stream-io/video-client';
|
|
10
|
+
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
const { StreamVideoReactNative } = NativeModules;
|
|
14
|
+
|
|
15
|
+
// Upper bound on how long `startRecording` will wait for the SFU to
|
|
16
|
+
// echo loopback tracks back via the Subscriber. Tuned generously since
|
|
17
|
+
// this includes connection setup; consumers that want shorter feedback
|
|
18
|
+
// should call `stopRecording` to cancel the wait early.
|
|
19
|
+
const STREAMS_WAIT_TIMEOUT_MS = 10 * 1000;
|
|
20
|
+
const DEFAULT_RECORDING_DURATION = 10 * 1000;
|
|
21
|
+
const MIN_RECORDING_DURATION = 5 * 1000;
|
|
22
|
+
const MAX_RECORDING_DURATION = 2 * 60 * 1000;
|
|
23
|
+
|
|
24
|
+
type LoopbackStreams = {
|
|
25
|
+
loopbackVideoStream?: MediaStream;
|
|
26
|
+
loopbackAudioStream?: MediaStream;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type LoopbackRecordingState = 'idle' | 'awaiting-streams' | 'recording';
|
|
30
|
+
|
|
31
|
+
export type ResolvedStreams = {
|
|
32
|
+
audioTrack?: MediaStreamTrack;
|
|
33
|
+
videoTrack?: MediaStreamTrack;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export interface StartLoopbackRecordingOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Whether to include the loopback video track in the recording.
|
|
39
|
+
* Defaults to `true`. Set to `false` for an audio-only recording.
|
|
40
|
+
* Audio is always recorded — there is no video-only mode.
|
|
41
|
+
*/
|
|
42
|
+
includeVideo?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Maximum recording duration in milliseconds, after which the
|
|
45
|
+
* recording auto-stops and finalises the file.
|
|
46
|
+
*
|
|
47
|
+
* Defaults to `10_000` (10 seconds). Clamped to
|
|
48
|
+
* `[5_000, 120_000]` (5 seconds — 2 minutes).
|
|
49
|
+
*/
|
|
50
|
+
maxDurationMs?: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface UseLoopbackRecordingResult {
|
|
54
|
+
/**
|
|
55
|
+
* Start a recording. The hook waits internally for the SFU loopback
|
|
56
|
+
* streams to arrive on `localParticipant`, then begins recording.
|
|
57
|
+
*
|
|
58
|
+
* The returned promise resolves with the produced `file://` URI **at
|
|
59
|
+
* the recording's terminal moment** — whether that is the auto-stop
|
|
60
|
+
* timer expiring, an explicit `stopRecording` call, or a cleanup-
|
|
61
|
+
* driven stop on unmount/leave. Resolves with `null` if no file was
|
|
62
|
+
* produced (writer torn down before any buffer arrived, or
|
|
63
|
+
* `stopRecording` was called while still awaiting streams). Rejects
|
|
64
|
+
* on a fatal error, if a recording is already running, or if the
|
|
65
|
+
* stream-wait times out.
|
|
66
|
+
*/
|
|
67
|
+
startRecording: (
|
|
68
|
+
options?: StartLoopbackRecordingOptions,
|
|
69
|
+
) => Promise<string | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Signal an early termination. While `awaiting-streams` this aborts
|
|
72
|
+
* the wait and the pending `startRecording` resolves with `null`.
|
|
73
|
+
* While `recording` this signals native finalisation and resolves
|
|
74
|
+
* once it completes.
|
|
75
|
+
*/
|
|
76
|
+
stopRecording: () => Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Recursively delete every file under the SDK's recordings directory.
|
|
79
|
+
*/
|
|
80
|
+
clearRecordings: () => Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* List every `file://` URI in the SDK's recordings directory, sorted
|
|
83
|
+
* most-recent first. Returns an empty array if the directory doesn't
|
|
84
|
+
* exist yet.
|
|
85
|
+
*/
|
|
86
|
+
getRecordings: () => Promise<string[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Lifecycle phase of the recording, owned by the hook:
|
|
89
|
+
* - `'idle'`: no recording in progress.
|
|
90
|
+
* - `'awaiting-streams'`: `startRecording` was called but the SFU
|
|
91
|
+
* has not yet echoed the loopback tracks back.
|
|
92
|
+
* - `'recording'`: native pipeline is actively writing.
|
|
93
|
+
*/
|
|
94
|
+
recordingState: LoopbackRecordingState;
|
|
95
|
+
/**
|
|
96
|
+
* The SFU loopback video stream on the local participant, when
|
|
97
|
+
* present. Identified by reference inequality against
|
|
98
|
+
* `call.camera.state.mediaStream`.
|
|
99
|
+
*/
|
|
100
|
+
loopbackVideoStream?: MediaStream;
|
|
101
|
+
/**
|
|
102
|
+
* The SFU loopback audio stream on the local participant, when
|
|
103
|
+
* present. Identified by reference inequality against
|
|
104
|
+
* `call.microphone.state.mediaStream`.
|
|
105
|
+
*/
|
|
106
|
+
loopbackAudioStream?: MediaStream;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Records the SFU loopback streams (audio + video) on the local participant
|
|
111
|
+
* to a local MP4 file. Designed for the `allowOwnTracksLoopback` pre-call test mode:
|
|
112
|
+
* the SFU echoes the caller's published tracks back through the Subscriber
|
|
113
|
+
* peer connection. The hook identifies the loopback streams on the local
|
|
114
|
+
* participant by reference inequality against
|
|
115
|
+
* `call.camera.state.mediaStream` / `call.microphone.state.mediaStream` —
|
|
116
|
+
* the canonical references to the local capture — and captures them.
|
|
117
|
+
*/
|
|
118
|
+
export function useLoopbackRecording(): UseLoopbackRecordingResult {
|
|
119
|
+
const call = useCall();
|
|
120
|
+
const {
|
|
121
|
+
useCallCallingState,
|
|
122
|
+
useParticipantCount,
|
|
123
|
+
useLocalParticipant,
|
|
124
|
+
useCameraState,
|
|
125
|
+
useMicrophoneState,
|
|
126
|
+
} = useCallStateHooks();
|
|
127
|
+
const callingState = useCallCallingState();
|
|
128
|
+
const participantCount = useParticipantCount();
|
|
129
|
+
const localParticipant = useLocalParticipant();
|
|
130
|
+
const { mediaStream: cameraStream } = useCameraState();
|
|
131
|
+
const { mediaStream: microphoneStream } = useMicrophoneState();
|
|
132
|
+
|
|
133
|
+
const [recordingState, setRecordingState] =
|
|
134
|
+
useState<LoopbackRecordingState>('idle');
|
|
135
|
+
const recordingStateRef = useRef<LoopbackRecordingState>('idle');
|
|
136
|
+
const isMountedRef = useRef(true);
|
|
137
|
+
// Used to abort the awaiting-streams wait on stop / leave / unmount.
|
|
138
|
+
const awaitAbortRef = useRef<AbortController | null>(null);
|
|
139
|
+
|
|
140
|
+
const loopbackStreams = useMemo<LoopbackStreams>(
|
|
141
|
+
() =>
|
|
142
|
+
getLoopbackStreamsFor(localParticipant, cameraStream, microphoneStream),
|
|
143
|
+
[localParticipant, cameraStream, microphoneStream],
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
const updateState = useCallback((next: LoopbackRecordingState) => {
|
|
147
|
+
recordingStateRef.current = next;
|
|
148
|
+
if (isMountedRef.current) {
|
|
149
|
+
setRecordingState(next);
|
|
150
|
+
}
|
|
151
|
+
}, []);
|
|
152
|
+
|
|
153
|
+
const stopRecording = useCallback(async (): Promise<void> => {
|
|
154
|
+
const current = recordingStateRef.current;
|
|
155
|
+
if (current === 'idle') {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (current === 'awaiting-streams') {
|
|
160
|
+
videoLoggerSystem
|
|
161
|
+
.getLogger('useLoopbackRecording')
|
|
162
|
+
.debug('aborting awaiting-streams wait');
|
|
163
|
+
awaitAbortRef.current?.abort();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
try {
|
|
168
|
+
await StreamVideoReactNative.stopTrackRecording();
|
|
169
|
+
} catch (error) {
|
|
170
|
+
videoLoggerSystem
|
|
171
|
+
.getLogger('useLoopbackRecording')
|
|
172
|
+
.error('failed to stop recording', error);
|
|
173
|
+
throw new Error('failed to stop recording');
|
|
174
|
+
}
|
|
175
|
+
}, []);
|
|
176
|
+
|
|
177
|
+
const startRecording = useCallback(
|
|
178
|
+
async ({
|
|
179
|
+
includeVideo = true,
|
|
180
|
+
maxDurationMs = DEFAULT_RECORDING_DURATION,
|
|
181
|
+
}: StartLoopbackRecordingOptions = {}): Promise<string | null> => {
|
|
182
|
+
if (!call) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (recordingStateRef.current !== 'idle') {
|
|
187
|
+
videoLoggerSystem
|
|
188
|
+
.getLogger('useLoopbackRecording')
|
|
189
|
+
.warn('a recording is already running');
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (call.state.participantCount > 1) {
|
|
194
|
+
videoLoggerSystem
|
|
195
|
+
.getLogger('useLoopbackRecording')
|
|
196
|
+
.warn('cannot start recording with other participants present');
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
awaitAbortRef.current = new AbortController();
|
|
201
|
+
updateState('awaiting-streams');
|
|
202
|
+
|
|
203
|
+
let audioTrack: MediaStreamTrack | undefined;
|
|
204
|
+
try {
|
|
205
|
+
const streams = await waitForLoopbackStreams(call, {
|
|
206
|
+
includeVideo,
|
|
207
|
+
signal: awaitAbortRef.current.signal,
|
|
208
|
+
timeoutMs: STREAMS_WAIT_TIMEOUT_MS,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
if (streams === null) {
|
|
212
|
+
videoLoggerSystem
|
|
213
|
+
.getLogger('useLoopbackRecording')
|
|
214
|
+
.warn('timed out waiting for loopback streams');
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
audioTrack = streams.audioTrack;
|
|
219
|
+
const videoTrackId = streams.videoTrack?.id;
|
|
220
|
+
|
|
221
|
+
// The loopback audio track lands disabled (the SDK default-mutes
|
|
222
|
+
// it to prevent echo). Enable it so the native recording
|
|
223
|
+
// pipeline receives PCM; `finally` returns it to muted.
|
|
224
|
+
if (audioTrack) {
|
|
225
|
+
audioTrack.enabled = true;
|
|
226
|
+
}
|
|
227
|
+
updateState('recording');
|
|
228
|
+
|
|
229
|
+
const clampedDuration = Math.min(
|
|
230
|
+
MAX_RECORDING_DURATION,
|
|
231
|
+
Math.max(MIN_RECORDING_DURATION, maxDurationMs),
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
// Pre-size the native encoder to the publisher's max video
|
|
235
|
+
// publish-option dimension. Without this, the encoder locks to
|
|
236
|
+
// whatever the SFU happens to echo *first* and stays there for the
|
|
237
|
+
// rest of the recording even after the network improves and
|
|
238
|
+
// higher layers arrive.
|
|
239
|
+
const publishMaxDim = call.getMaxVideoPublishDimension();
|
|
240
|
+
|
|
241
|
+
try {
|
|
242
|
+
const uri: string | null =
|
|
243
|
+
await StreamVideoReactNative.startTrackRecording({
|
|
244
|
+
videoTrackId,
|
|
245
|
+
maxDurationMs: Math.round(clampedDuration),
|
|
246
|
+
targetWidth: publishMaxDim?.width,
|
|
247
|
+
targetHeight: publishMaxDim?.height,
|
|
248
|
+
});
|
|
249
|
+
return uri;
|
|
250
|
+
} catch (error) {
|
|
251
|
+
videoLoggerSystem
|
|
252
|
+
.getLogger('useLoopbackRecording')
|
|
253
|
+
.error('failed to start recording', error);
|
|
254
|
+
throw new Error('failed to start recording');
|
|
255
|
+
}
|
|
256
|
+
} finally {
|
|
257
|
+
if (audioTrack) {
|
|
258
|
+
audioTrack.enabled = false;
|
|
259
|
+
}
|
|
260
|
+
awaitAbortRef.current = null;
|
|
261
|
+
updateState('idle');
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
[call, updateState],
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
const clearRecordings = useCallback(async (): Promise<void> => {
|
|
268
|
+
try {
|
|
269
|
+
await StreamVideoReactNative.clearStreamRecordings();
|
|
270
|
+
} catch (error) {
|
|
271
|
+
videoLoggerSystem
|
|
272
|
+
.getLogger('useLoopbackRecording')
|
|
273
|
+
.error('failed to clear recordings', error);
|
|
274
|
+
throw new Error('failed to clear recordings');
|
|
275
|
+
}
|
|
276
|
+
}, []);
|
|
277
|
+
|
|
278
|
+
const getRecordings = useCallback(async (): Promise<string[]> => {
|
|
279
|
+
try {
|
|
280
|
+
const list: string[] | null | undefined =
|
|
281
|
+
await StreamVideoReactNative.getStreamRecordings();
|
|
282
|
+
return list ?? [];
|
|
283
|
+
} catch (error) {
|
|
284
|
+
videoLoggerSystem
|
|
285
|
+
.getLogger('useLoopbackRecording')
|
|
286
|
+
.error('failed to get recordings', error);
|
|
287
|
+
throw new Error('failed to get recordings');
|
|
288
|
+
}
|
|
289
|
+
}, []);
|
|
290
|
+
|
|
291
|
+
// Auto-stop on call leave / end. Aborts an awaiting-streams wait or
|
|
292
|
+
// signals native finalisation depending on which phase we're in.
|
|
293
|
+
// Without this, leaving the call mid-recording would leave native
|
|
294
|
+
// encoders mid-write while the SFU subscriber tracks end under their
|
|
295
|
+
// feet — undefined final file state.
|
|
296
|
+
useEffect(() => {
|
|
297
|
+
if (
|
|
298
|
+
callingState === CallingState.LEFT ||
|
|
299
|
+
callingState === CallingState.IDLE
|
|
300
|
+
) {
|
|
301
|
+
videoLoggerSystem
|
|
302
|
+
.getLogger('useLoopbackRecording')
|
|
303
|
+
.debug('auto-stopping recording on call leave / end');
|
|
304
|
+
stopRecording().catch(() => {});
|
|
305
|
+
}
|
|
306
|
+
}, [callingState, stopRecording]);
|
|
307
|
+
|
|
308
|
+
// Auto-stop if another participant joins. Loopback recording is a
|
|
309
|
+
// single-user pre-call test.
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
if (recordingState !== 'idle' && participantCount > 1) {
|
|
312
|
+
stopRecording().catch(() => {});
|
|
313
|
+
videoLoggerSystem
|
|
314
|
+
.getLogger('useLoopbackRecording')
|
|
315
|
+
.debug('auto-stopping recording on participant count change');
|
|
316
|
+
}
|
|
317
|
+
}, [participantCount, recordingState, stopRecording]);
|
|
318
|
+
|
|
319
|
+
useEffect(() => {
|
|
320
|
+
isMountedRef.current = true;
|
|
321
|
+
return () => {
|
|
322
|
+
isMountedRef.current = false;
|
|
323
|
+
videoLoggerSystem
|
|
324
|
+
.getLogger('useLoopbackRecording')
|
|
325
|
+
.debug('auto-stopping recording on unmount');
|
|
326
|
+
stopRecording().catch(() => {});
|
|
327
|
+
};
|
|
328
|
+
}, [stopRecording]);
|
|
329
|
+
|
|
330
|
+
return {
|
|
331
|
+
startRecording,
|
|
332
|
+
stopRecording,
|
|
333
|
+
clearRecordings,
|
|
334
|
+
getRecordings,
|
|
335
|
+
recordingState,
|
|
336
|
+
loopbackVideoStream: loopbackStreams.loopbackVideoStream,
|
|
337
|
+
loopbackAudioStream: loopbackStreams.loopbackAudioStream,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function getLoopbackStreamsFor(
|
|
342
|
+
participant: StreamVideoParticipant | undefined,
|
|
343
|
+
cameraStream: MediaStream | undefined,
|
|
344
|
+
microphoneStream: MediaStream | undefined,
|
|
345
|
+
): LoopbackStreams {
|
|
346
|
+
return {
|
|
347
|
+
loopbackVideoStream:
|
|
348
|
+
participant?.videoStream && participant.videoStream !== cameraStream
|
|
349
|
+
? participant.videoStream
|
|
350
|
+
: undefined,
|
|
351
|
+
loopbackAudioStream:
|
|
352
|
+
participant?.audioStream && participant.audioStream !== microphoneStream
|
|
353
|
+
? participant.audioStream
|
|
354
|
+
: undefined,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Subscribe to `localParticipant$` and resolve once the requested loopback
|
|
360
|
+
* streams are present on the participant. Aborts cleanly on `signal`
|
|
361
|
+
* (resolves `null`) and rejects on timeout.
|
|
362
|
+
*/
|
|
363
|
+
function waitForLoopbackStreams(
|
|
364
|
+
call: Call,
|
|
365
|
+
opts: { includeVideo: boolean; signal: AbortSignal; timeoutMs: number },
|
|
366
|
+
): Promise<ResolvedStreams | null> {
|
|
367
|
+
return new Promise((resolve, reject) => {
|
|
368
|
+
const initial = getLoopbackStreams(
|
|
369
|
+
call.state.localParticipant,
|
|
370
|
+
call.camera.state.mediaStream,
|
|
371
|
+
call.microphone.state.mediaStream,
|
|
372
|
+
opts.includeVideo,
|
|
373
|
+
);
|
|
374
|
+
if (initial) {
|
|
375
|
+
resolve(initial);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const cleanup = () => {
|
|
380
|
+
subscription.unsubscribe();
|
|
381
|
+
if (timeoutId !== undefined) {
|
|
382
|
+
clearTimeout(timeoutId);
|
|
383
|
+
}
|
|
384
|
+
opts.signal.removeEventListener('abort', onAbort);
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
const onAbort = () => {
|
|
388
|
+
cleanup();
|
|
389
|
+
resolve(null);
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
opts.signal.addEventListener('abort', onAbort);
|
|
393
|
+
|
|
394
|
+
const timeoutId = setTimeout(() => {
|
|
395
|
+
cleanup();
|
|
396
|
+
reject(
|
|
397
|
+
new Error(
|
|
398
|
+
'useLoopbackRecording: timed out waiting for loopback streams. ' +
|
|
399
|
+
'Ensure the call was joined with `allowOwnTracksLoopback: true` and ' +
|
|
400
|
+
'that the SFU is configured to echo self-sub tracks.',
|
|
401
|
+
),
|
|
402
|
+
);
|
|
403
|
+
}, opts.timeoutMs);
|
|
404
|
+
|
|
405
|
+
const subscription = combineLatest([
|
|
406
|
+
call.state.localParticipant$,
|
|
407
|
+
call.camera.state.mediaStream$,
|
|
408
|
+
call.microphone.state.mediaStream$,
|
|
409
|
+
]).subscribe(([participant, cameraStream, microphoneStream]) => {
|
|
410
|
+
const ready = getLoopbackStreams(
|
|
411
|
+
participant,
|
|
412
|
+
cameraStream,
|
|
413
|
+
microphoneStream,
|
|
414
|
+
opts.includeVideo,
|
|
415
|
+
);
|
|
416
|
+
if (ready) {
|
|
417
|
+
cleanup();
|
|
418
|
+
resolve(ready);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
function getLoopbackStreams(
|
|
425
|
+
participant: StreamVideoParticipant | undefined,
|
|
426
|
+
cameraStream: MediaStream | undefined,
|
|
427
|
+
microphoneStream: MediaStream | undefined,
|
|
428
|
+
includeVideo: boolean,
|
|
429
|
+
): ResolvedStreams | undefined {
|
|
430
|
+
if (!participant) return undefined;
|
|
431
|
+
|
|
432
|
+
const { loopbackAudioStream, loopbackVideoStream } = getLoopbackStreamsFor(
|
|
433
|
+
participant,
|
|
434
|
+
cameraStream,
|
|
435
|
+
microphoneStream,
|
|
436
|
+
);
|
|
437
|
+
|
|
438
|
+
const audioTrack = loopbackAudioStream?.getAudioTracks()[0];
|
|
439
|
+
const videoTrack = includeVideo
|
|
440
|
+
? loopbackVideoStream?.getVideoTracks()[0]
|
|
441
|
+
: undefined;
|
|
442
|
+
|
|
443
|
+
if (!audioTrack || (includeVideo && !videoTrack)) {
|
|
444
|
+
return undefined;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return { audioTrack, videoTrack };
|
|
448
|
+
}
|
|
@@ -37,7 +37,10 @@ export const useModeration = (options?: ModerationOptions) => {
|
|
|
37
37
|
|
|
38
38
|
// not scheduling a timeout to enable the camera
|
|
39
39
|
clearTimeout(blurTimeoutRef.current);
|
|
40
|
-
if (!isSupported)
|
|
40
|
+
if (!isSupported) {
|
|
41
|
+
void turnCameraOff();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
41
44
|
|
|
42
45
|
restoreRef.current = (restoreRef.current || Promise.resolve()).then(() =>
|
|
43
46
|
applyVideoBlurFilter?.('heavy').then(() => {
|
package/src/icons/index.tsx
CHANGED
|
@@ -4,21 +4,15 @@ export * from './Mic';
|
|
|
4
4
|
export * from './MicOff';
|
|
5
5
|
export * from './Phone';
|
|
6
6
|
export * from './PhoneDown';
|
|
7
|
-
export * from './Settings';
|
|
8
7
|
export * from './Video';
|
|
9
8
|
export * from './VideoSlash';
|
|
10
|
-
export * from './ThreeDots';
|
|
11
9
|
export * from './PinVertical';
|
|
12
|
-
export * from './Spotlight';
|
|
13
10
|
export * from './ScreenShareIndicator';
|
|
14
11
|
export * from './ScreenShare';
|
|
15
12
|
export * from './Reaction';
|
|
16
|
-
export * from './TopViewBackground';
|
|
17
13
|
export * from './Eye';
|
|
18
|
-
export * from './ShieldBadge';
|
|
19
14
|
export * from './StartStreamIcon';
|
|
20
15
|
export * from './StopScreenShare';
|
|
21
16
|
export * from './EndStreamIcon';
|
|
22
|
-
export * from './LeaveStreamIcon';
|
|
23
17
|
export * from './IconWrapper';
|
|
24
18
|
export * from './Maximize';
|
|
@@ -16,15 +16,14 @@ const BusyTonePlayer = () => {
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
const logger = videoLoggerSystem.getLogger('RejectCallWhenBusy');
|
|
20
|
+
let busyToneTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
21
|
+
|
|
19
22
|
const unsubscribe = client.on('call.rejected', async (event) => {
|
|
20
23
|
const isCallCreatedByMe =
|
|
21
24
|
event.call.created_by.id === client.state.connectedUser?.id;
|
|
22
25
|
const isCalleeBusy = isCallCreatedByMe && event.reason === 'busy';
|
|
23
26
|
|
|
24
|
-
let busyToneTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
25
|
-
|
|
26
|
-
const logger = videoLoggerSystem.getLogger('RejectCallWhenBusy');
|
|
27
|
-
|
|
28
27
|
if (isCalleeBusy) {
|
|
29
28
|
if (busyToneTimeout) {
|
|
30
29
|
clearTimeout(busyToneTimeout);
|
|
@@ -51,14 +50,15 @@ const BusyTonePlayer = () => {
|
|
|
51
50
|
logger.error('playBusyTone failed:', error);
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
|
-
return () => {
|
|
55
|
-
StreamVideoRN.stopBusyTone().catch((err) =>
|
|
56
|
-
logger.error('stopBusyTone on cleanup failed:', err),
|
|
57
|
-
);
|
|
58
|
-
clearTimeout(busyToneTimeout);
|
|
59
|
-
unsubscribe();
|
|
60
|
-
};
|
|
61
53
|
});
|
|
54
|
+
|
|
55
|
+
return () => {
|
|
56
|
+
clearTimeout(busyToneTimeout);
|
|
57
|
+
StreamVideoRN.stopBusyTone().catch((err) =>
|
|
58
|
+
logger.error('stopBusyTone on cleanup failed:', err),
|
|
59
|
+
);
|
|
60
|
+
unsubscribe();
|
|
61
|
+
};
|
|
62
62
|
}, [client]);
|
|
63
63
|
|
|
64
64
|
return null;
|
|
@@ -31,6 +31,7 @@ export const AppStateListener = () => {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
let cancelled = false;
|
|
34
35
|
const disablePiP = RxUtils.getCurrentValue(disablePiPMode$);
|
|
35
36
|
const logger = videoLoggerSystem.getLogger('AppStateListener');
|
|
36
37
|
const initialPipMode =
|
|
@@ -40,6 +41,7 @@ export const AppStateListener = () => {
|
|
|
40
41
|
|
|
41
42
|
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
|
|
42
43
|
(isInPiP: boolean | null | undefined) => {
|
|
44
|
+
if (cancelled) return;
|
|
43
45
|
isInPiPMode$.next(!!isInPiP);
|
|
44
46
|
logger.debug(
|
|
45
47
|
'Initial PiP mode on mount (after asking native module) set to ',
|
|
@@ -60,6 +62,7 @@ export const AppStateListener = () => {
|
|
|
60
62
|
);
|
|
61
63
|
|
|
62
64
|
return () => {
|
|
65
|
+
cancelled = true;
|
|
63
66
|
subscriptionPiPChange.remove();
|
|
64
67
|
};
|
|
65
68
|
}, []);
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
9
9
|
|
|
10
10
|
const { StreamVideoReactNative } = NativeModules;
|
|
11
|
-
const eventEmitter = new NativeEventEmitter(StreamVideoReactNative);
|
|
12
11
|
/**
|
|
13
12
|
* This is a renderless component to get the device stats like thermal state and power saver mode.
|
|
14
13
|
*/
|
|
@@ -20,6 +19,8 @@ export const DeviceStats = () => {
|
|
|
20
19
|
useEffect(() => {
|
|
21
20
|
if (!call || callingState !== CallingState.JOINED) return;
|
|
22
21
|
|
|
22
|
+
const eventEmitter = new NativeEventEmitter(StreamVideoReactNative);
|
|
23
|
+
|
|
23
24
|
StreamVideoReactNative.isLowPowerModeEnabled().then(
|
|
24
25
|
(initialPowerMode: boolean) => {
|
|
25
26
|
setPowerState(initialPowerMode);
|
|
@@ -62,7 +62,6 @@ const DEFAULT_STREAM_VIDEO_CONFIG: StreamVideoConfig = {
|
|
|
62
62
|
|
|
63
63
|
export class StreamVideoRN {
|
|
64
64
|
private static config = DEFAULT_STREAM_VIDEO_CONFIG;
|
|
65
|
-
private static busyToneTimeout: NodeJS.Timeout | null = null;
|
|
66
65
|
|
|
67
66
|
/**
|
|
68
67
|
* Update the global config for StreamVideoRN except for push config.
|
|
@@ -31,16 +31,18 @@ export function getCallDisplayName(
|
|
|
31
31
|
|
|
32
32
|
if (callMembers.length > 0) {
|
|
33
33
|
// for ringing calls, members array contains all call members from the very early state and participants array is empty in the beginning
|
|
34
|
-
names = callMembers
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
names = callMembers.flatMap((member) =>
|
|
35
|
+
member.user.id !== currentUserId && member.user.name
|
|
36
|
+
? [member.user.name]
|
|
37
|
+
: [],
|
|
38
|
+
);
|
|
38
39
|
} else if (participants.length > 0) {
|
|
39
40
|
// for non-ringing calls, members array is empty and we rely on participants array there
|
|
40
|
-
names = participants
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
names = participants.flatMap((participant) =>
|
|
42
|
+
participant.userId !== currentUserId && participant.name
|
|
43
|
+
? [participant.name]
|
|
44
|
+
: [],
|
|
45
|
+
);
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
// if no names are found, we use the name of the current user
|
|
@@ -66,7 +68,11 @@ function getCallDisplayNameFromCall(call: Call): string {
|
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
export async function registerOutgoingCall(call: Call) {
|
|
69
|
-
if (
|
|
71
|
+
if (
|
|
72
|
+
!CallingxModule ||
|
|
73
|
+
!CallingxModule.isSetup ||
|
|
74
|
+
call.isOwnTracksLoopbackAllowed
|
|
75
|
+
) {
|
|
70
76
|
return;
|
|
71
77
|
}
|
|
72
78
|
|
|
@@ -103,7 +109,11 @@ export async function registerOutgoingCall(call: Call) {
|
|
|
103
109
|
* 3. Optionally for non-ringing calls also when ongoing calls are enabled.
|
|
104
110
|
*/
|
|
105
111
|
export async function joinCallingxCall(call: Call, activeCalls: Call[]) {
|
|
106
|
-
if (
|
|
112
|
+
if (
|
|
113
|
+
!CallingxModule ||
|
|
114
|
+
!CallingxModule.isSetup ||
|
|
115
|
+
call.isOwnTracksLoopbackAllowed
|
|
116
|
+
) {
|
|
107
117
|
return;
|
|
108
118
|
}
|
|
109
119
|
|
|
@@ -128,7 +128,7 @@ const streamRNVideoSDKGlobals: StreamRNVideoSDKGlobals = {
|
|
|
128
128
|
// @stream-io/video-client/src/types.ts and is automatically available when
|
|
129
129
|
// importing from the client package.
|
|
130
130
|
export function registerSDKGlobals() {
|
|
131
|
-
if (!
|
|
132
|
-
|
|
131
|
+
if (!globalThis.streamRNVideoSDK) {
|
|
132
|
+
globalThis.streamRNVideoSDK = streamRNVideoSDKGlobals;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -7,7 +7,7 @@ export type FirebaseMessagingType = Type;
|
|
|
7
7
|
const INSTALLATION_INSTRUCTION =
|
|
8
8
|
'Please see https://rnfirebase.io/messaging/usage#installation for installation instructions';
|
|
9
9
|
|
|
10
|
-
export function getFirebaseMessagingLib() {
|
|
10
|
+
export function getFirebaseMessagingLib(): FirebaseMessagingType {
|
|
11
11
|
if (!lib) {
|
|
12
12
|
throw Error(
|
|
13
13
|
'@react-native-firebase/messaging is not installed. ' +
|
|
@@ -17,7 +17,9 @@ export function getFirebaseMessagingLib() {
|
|
|
17
17
|
return lib;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export function getFirebaseMessagingLibNoThrow(
|
|
20
|
+
export function getFirebaseMessagingLibNoThrow(
|
|
21
|
+
isExpo: boolean,
|
|
22
|
+
): FirebaseMessagingType | undefined {
|
|
21
23
|
if (!lib) {
|
|
22
24
|
const logger = videoLoggerSystem.getLogger(
|
|
23
25
|
'getFirebaseMessagingLibNoThrow',
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.
|
|
1
|
+
export const version = '1.40.0';
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.LeaveStreamIcon = void 0;
|
|
7
|
-
var _react = _interopRequireDefault(require("react"));
|
|
8
|
-
var _reactNativeSvg = require("react-native-svg");
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
const LeaveStreamIcon = () => {
|
|
11
|
-
return /*#__PURE__*/_react.default.createElement(_reactNativeSvg.Svg, {
|
|
12
|
-
viewBox: "0 0 25 24",
|
|
13
|
-
fill: "none"
|
|
14
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNativeSvg.Path, {
|
|
15
|
-
d: "M18.75 5.75L16.9875 7.5125L20.2125 10.75H7.5V13.25H20.2125L16.9875 16.475L18.75 18.25L25 12L18.75 5.75ZM2.5 3.25H12.5V0.75H2.5C1.125 0.75 0 1.875 0 3.25V20.75C0 22.125 1.125 23.25 2.5 23.25H12.5V20.75H2.5V3.25Z",
|
|
16
|
-
fill: "#FCFCFC"
|
|
17
|
-
}));
|
|
18
|
-
};
|
|
19
|
-
exports.LeaveStreamIcon = LeaveStreamIcon;
|
|
20
|
-
//# sourceMappingURL=LeaveStreamIcon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","e","__esModule","default","LeaveStreamIcon","createElement","Svg","viewBox","fill","Path","d","exports"],"sourceRoot":"../../../src","sources":["icons/LeaveStreamIcon.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAA6C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,MAAMG,eAAe,GAAGA,CAAA,KAAM;EACnC,oBACEP,MAAA,CAAAM,OAAA,CAAAE,aAAA,CAACL,eAAA,CAAAM,GAAG;IAACC,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC;EAAM,gBAClCX,MAAA,CAAAM,OAAA,CAAAE,aAAA,CAACL,eAAA,CAAAS,IAAI;IACHC,CAAC,EAAC,oNAAoN;IACtNF,IAAI,EAAC;EAAS,CACf,CACE,CAAC;AAEV,CAAC;AAACG,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]}
|