agora-appbuilder-core 4.0.0 → 4.0.1
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/package.json +3 -3
- package/template/.bundle/config +2 -0
- package/template/Gemfile +4 -0
- package/template/Gulpfile.js +29 -29
- package/template/_eslintrc.js +3 -3
- package/template/_gitignore +12 -11
- package/template/_package-lock.json +28491 -23647
- package/template/_prettierrc.js +2 -2
- package/template/agora-rn-uikit/.eslintrc.js +5 -0
- package/template/agora-rn-uikit/package.json +14 -14
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +79 -38
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
- package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
- package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
- package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
- package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
- package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +138 -100
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
- package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
- package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -17
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
- package/template/agora-rn-uikit/src/index.ts +15 -9
- package/template/android/app/build.gradle +59 -156
- package/template/android/app/src/debug/AndroidManifest.xml +6 -1
- package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
- package/template/android/app/src/main/AndroidManifest.xml +6 -19
- package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
- package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
- package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
- package/template/android/app/src/main/res/values/strings.xml +3 -0
- package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
- package/template/android/build.gradle +19 -33
- package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
- package/template/android/gradle.properties +18 -4
- package/template/android/gradlew +165 -104
- package/template/android/gradlew.bat +12 -23
- package/template/android/settings.gradle +1 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +200 -70
- package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
- package/template/bridge/rtc/webNg/Types.ts +20 -5
- package/template/bridge/rtc/webNg/index.ts +81 -14
- package/template/bridge/rtm/web/index.ts +5 -3
- package/template/configTransform.js +16 -1
- package/template/customization-api/action-library.ts +4 -16
- package/template/customization-api/app-state.ts +15 -8
- package/template/customization-api/customEvents.ts +7 -2
- package/template/customization-api/customize.ts +1 -1
- package/template/customization-api/index.ts +4 -0
- package/template/customization-api/sub-components.ts +17 -16
- package/template/customization-api/temp.ts +52 -0
- package/template/customization-api/typeDefinition.ts +34 -46
- package/template/customization-api/types.ts +26 -0
- package/template/customization-api/utils.ts +4 -0
- package/template/customization-implementation/createHook.ts +24 -6
- package/template/customization-implementation/index.ts +1 -2
- package/template/customization-implementation/useCustomization.tsx +5 -7
- package/template/defaultConfig.js +72 -0
- package/template/global.d.ts +14 -1
- package/template/index.js +1 -4
- package/template/index.web.js +0 -5
- package/template/index.wsdk.tsx +1 -12
- package/template/ios/.xcode.env +11 -0
- package/template/ios/HelloWorld/AppDelegate.h +2 -4
- package/template/ios/HelloWorld/AppDelegate.mm +64 -0
- package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
- package/template/ios/HelloWorld/Info.plist +8 -2
- package/template/ios/HelloWorld/main.m +2 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
- package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
- package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
- package/template/ios/HelloWorldTests/Info.plist +2 -2
- package/template/ios/Podfile +54 -20
- package/template/ios/Podfile.lock +809 -0
- package/template/ios/ScreenSharing/Info.plist +15 -0
- package/template/ios/ScreenSharing/SampleHandler.h +9 -0
- package/template/ios/ScreenSharing/SampleHandler.m +70 -0
- package/template/jest.config.js +4 -0
- package/template/metro.config.js +7 -32
- package/template/package.json +53 -39
- package/template/react-native-toast-message/index.d.ts +3 -1
- package/template/react-native-toast-message/index.js +1 -0
- package/template/react-native-toast-message/src/components/base/index.js +20 -32
- package/template/react-native-toast-message/src/components/base/styles.js +18 -21
- package/template/react-native-toast-message/src/components/checkbox.js +24 -19
- package/template/react-native-toast-message/src/index.js +3 -1
- package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
- package/template/src/App.tsx +53 -69
- package/template/src/AppRoutes.tsx +90 -0
- package/template/src/AppWrapper.tsx +42 -25
- package/template/src/SDKAppWrapper.tsx +89 -57
- package/template/src/app-state/useLocalUserInfo.ts +3 -3
- package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
- package/template/src/app-state/useNoiseSupression.tsx +107 -0
- package/template/src/app-state/useVideoQuality.tsx +39 -0
- package/template/src/assets/font-styles.css +175 -3
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/selection.json +1 -1
- package/template/src/atoms/ActionMenu.tsx +50 -11
- package/template/src/atoms/Avatar.tsx +51 -0
- package/template/src/atoms/Card.tsx +21 -8
- package/template/src/atoms/Carousel.native.tsx +105 -0
- package/template/src/atoms/Carousel.tsx +103 -0
- package/template/src/atoms/Checkbox.tsx +98 -0
- package/template/src/atoms/CircularProgress.tsx +0 -1
- package/template/src/atoms/ClipboardIconButton.tsx +91 -0
- package/template/src/atoms/CustomIcon.tsx +46 -0
- package/template/src/atoms/DropDownMulti.tsx +349 -0
- package/template/src/atoms/Dropdown.tsx +3 -3
- package/template/src/atoms/IconButton.tsx +52 -9
- package/template/src/atoms/ImageIcon.tsx +18 -5
- package/template/src/atoms/InlineNotification.tsx +81 -0
- package/template/src/atoms/InviteInfo.tsx +4 -4
- package/template/src/atoms/MeetingLink.tsx +160 -0
- package/template/src/atoms/ParticipantsCount.tsx +20 -8
- package/template/src/atoms/Popup.tsx +49 -27
- package/template/src/atoms/PrimaryButton.tsx +19 -5
- package/template/src/atoms/RecordingInfo.tsx +8 -5
- package/template/src/atoms/SecondaryButton.tsx +2 -0
- package/template/src/atoms/Spacer.tsx +1 -0
- package/template/src/atoms/TertiaryButton.tsx +35 -5
- package/template/src/atoms/TextInput.tsx +2 -1
- package/template/src/atoms/Toolbar.tsx +102 -0
- package/template/src/atoms/ToolbarItem.tsx +85 -0
- package/template/src/atoms/ToolbarMenu.tsx +40 -0
- package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
- package/template/src/atoms/ToolbarPreset.tsx +71 -0
- package/template/src/atoms/Tooltip.tsx +30 -13
- package/template/src/atoms/pagination/Pagination.tsx +127 -0
- package/template/src/atoms/pagination/usePagination.tsx +88 -0
- package/template/src/auth/AuthProvider.tsx +500 -0
- package/template/src/auth/AuthRoute.tsx +94 -0
- package/template/src/auth/IDPAuth.electron.tsx +31 -0
- package/template/src/auth/IDPAuth.tsx +67 -0
- package/template/src/auth/IDPLogoutComponent.tsx +158 -0
- package/template/src/auth/UserCancelPopup.tsx +115 -0
- package/template/src/auth/config.ts +52 -0
- package/template/src/auth/openIDPURL.electron.tsx +39 -0
- package/template/src/auth/openIDPURL.native.tsx +51 -0
- package/template/src/auth/openIDPURL.tsx +20 -0
- package/template/src/auth/useIDPAuth.electron.tsx +65 -0
- package/template/src/auth/useIDPAuth.native.tsx +70 -0
- package/template/src/auth/useIDPAuth.tsx +63 -0
- package/template/src/auth/useTokenAuth.tsx +194 -0
- package/template/src/components/Chat.tsx +92 -72
- package/template/src/components/ChatContext.ts +2 -0
- package/template/src/components/ColorConfigure.tsx +0 -1
- package/template/src/components/CommonStyles.ts +9 -2
- package/template/src/components/Controls.tsx +914 -182
- package/template/src/components/Controls1.native.tsx +9 -5
- package/template/src/components/DeviceConfigure.native.tsx +2 -2
- package/template/src/components/DeviceConfigure.tsx +400 -149
- package/template/src/components/DeviceContext.tsx +2 -0
- package/template/src/components/EventsConfigure.tsx +722 -82
- package/template/src/components/GraphQLProvider.tsx +82 -39
- package/template/src/components/GridVideo.tsx +30 -16
- package/template/src/components/HostControlView.tsx +11 -14
- package/template/src/components/JoinPhrase.tsx +0 -1
- package/template/src/components/Leftbar.tsx +110 -0
- package/template/src/components/Navbar.tsx +305 -147
- package/template/src/components/NavbarMobile.tsx +119 -0
- package/template/src/components/Navigation.native.tsx +1 -15
- package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
- package/template/src/components/NetworkQualityContext.tsx +12 -6
- package/template/src/components/ParticipantsView.tsx +63 -56
- package/template/src/components/PinnedVideo.tsx +191 -119
- package/template/src/components/Precall.native.tsx +177 -72
- package/template/src/components/Precall.tsx +247 -78
- package/template/src/components/RTMConfigure.tsx +205 -67
- package/template/src/components/Rightbar.tsx +112 -0
- package/template/src/components/Router.electron.ts +1 -0
- package/template/src/components/Router.native.ts +1 -0
- package/template/src/components/Router.sdk.ts +1 -0
- package/template/src/components/Router.ts +1 -0
- package/template/src/components/SdkApiContext.tsx +313 -0
- package/template/src/components/SdkMuteToggleListener.tsx +88 -0
- package/template/src/components/SessionContext.tsx +0 -1
- package/template/src/components/Settings.tsx +33 -4
- package/template/src/components/SettingsView.tsx +44 -9
- package/template/src/components/Share.tsx +152 -74
- package/template/src/components/StorageContext.tsx +23 -6
- package/template/src/components/ToastComponent.tsx +10 -1
- package/template/src/components/WhiteboardLayout.tsx +291 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
- package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
- package/template/src/components/common/Error.tsx +2 -0
- package/template/src/components/common/Logo.tsx +2 -2
- package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
- package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
- package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
- package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
- package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
- package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
- package/template/src/components/livestream/Types.ts +36 -20
- package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
- package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
- package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
- package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
- package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
- package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
- package/template/src/components/participants/AllHostParticipants.tsx +20 -19
- package/template/src/components/participants/Participant.tsx +45 -16
- package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
- package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
- package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
- package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
- package/template/src/components/popups/InvitePopup.tsx +110 -45
- package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
- package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
- package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
- package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
- package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
- package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
- package/template/src/components/precall/LocalMute.tsx +69 -45
- package/template/src/components/precall/PermissionHelper.tsx +56 -28
- package/template/src/components/precall/PreCallSettings.tsx +1 -0
- package/template/src/components/precall/VideoFallback.tsx +173 -0
- package/template/src/components/precall/VideoPreview.native.tsx +19 -53
- package/template/src/components/precall/VideoPreview.tsx +29 -164
- package/template/src/components/precall/index.tsx +2 -0
- package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
- package/template/src/components/precall/joinCallBtn.tsx +13 -4
- package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
- package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
- package/template/src/components/precall/meetingTitle.tsx +37 -11
- package/template/src/components/precall/selectDevice.tsx +5 -5
- package/template/src/components/precall/textInput.tsx +17 -19
- package/template/src/components/precall/usePreCall.tsx +33 -1
- package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
- package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
- package/template/src/components/recordings/RecordingsModal.tsx +135 -0
- package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
- package/template/src/components/recordings/recording-table.tsx +154 -0
- package/template/src/components/recordings/style.ts +183 -0
- package/template/src/components/recordings/utils.ts +80 -0
- package/template/src/components/room-info/useRoomInfo.tsx +128 -0
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/useShareLink.tsx +28 -63
- package/template/src/components/useUserPreference.tsx +82 -16
- package/template/src/components/useVideoCall.tsx +93 -1
- package/template/src/components/virtual-background/VBButton.tsx +64 -0
- package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
- package/template/src/components/virtual-background/VBCard.tsx +272 -0
- package/template/src/components/virtual-background/VBPanel.tsx +279 -0
- package/template/src/components/virtual-background/VButils.native.ts +37 -0
- package/template/src/components/virtual-background/VButils.ts +104 -0
- package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
- package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
- package/template/src/components/virtual-background/imagePaths.ts +87 -0
- package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/index.ts +37 -0
- package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
- package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
- package/template/src/components/virtual-background/useVB.native.tsx +185 -0
- package/template/src/components/virtual-background/useVB.tsx +267 -0
- package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
- package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
- package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
- package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
- package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
- package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
- package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
- package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
- package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
- package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
- package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
- package/template/src/language/default-labels/commonLabels.ts +51 -14
- package/template/src/language/default-labels/createScreenLabels.ts +97 -17
- package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
- package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
- package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
- package/template/src/pages/Create.tsx +136 -106
- package/template/src/pages/Endcall.tsx +2 -2
- package/template/src/pages/Join.tsx +82 -40
- package/template/src/pages/Login.tsx +26 -0
- package/template/src/pages/VideoCall.tsx +329 -127
- package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
- package/template/src/pages/video-call/ActionSheet.tsx +55 -15
- package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
- package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
- package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
- package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
- package/template/src/pages/video-call/PinchableView.tsx +119 -0
- package/template/src/pages/video-call/RenderComponent.tsx +14 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
- package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
- package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
- package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
- package/template/src/pages/video-call/VideoComponent.tsx +60 -8
- package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
- package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
- package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
- package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
- package/template/src/pages/video-call/index.ts +42 -8
- package/template/src/rtm/RTMEngine.ts +17 -4
- package/template/src/rtm-events/constants.ts +21 -3
- package/template/src/rtm-events-api/Events.ts +7 -4
- package/template/src/rtm-events-api/LocalEvents.ts +14 -0
- package/template/src/rtm-events-api/types.ts +5 -5
- package/template/src/selection.json +1 -0
- package/template/src/subComponents/ChatBubble.tsx +87 -67
- package/template/src/subComponents/ChatContainer.tsx +70 -49
- package/template/src/subComponents/ChatInput.ios.tsx +32 -85
- package/template/src/subComponents/ChatInput.tsx +31 -80
- package/template/src/subComponents/Checkbox.native.tsx +46 -46
- package/template/src/subComponents/Checkbox.tsx +7 -6
- package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
- package/template/src/subComponents/EndcallPopup.tsx +83 -12
- package/template/src/subComponents/FallbackLogo.tsx +2 -2
- package/template/src/subComponents/LanguageSelector.tsx +34 -30
- package/template/src/subComponents/LayoutIconButton.tsx +34 -17
- package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
- package/template/src/subComponents/Loading.tsx +60 -0
- package/template/src/subComponents/LocalAudioMute.tsx +87 -34
- package/template/src/subComponents/LocalEndCall.tsx +61 -24
- package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
- package/template/src/subComponents/LocalVideoMute.tsx +105 -36
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
- package/template/src/subComponents/Recording.tsx +29 -9
- package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
- package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
- package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
- package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
- package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
- package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
- package/template/src/subComponents/SelectDevice.tsx +103 -34
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
- package/template/src/subComponents/SidePanelButtons.ts +0 -3
- package/template/src/subComponents/SidePanelEnum.tsx +2 -0
- package/template/src/subComponents/SidePanelHeader.tsx +97 -63
- package/template/src/subComponents/ToastConfig.tsx +70 -61
- package/template/src/subComponents/caption/Caption.tsx +132 -0
- package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
- package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
- package/template/src/subComponents/caption/CaptionText.tsx +182 -0
- package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
- package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
- package/template/src/subComponents/caption/Transcript.tsx +452 -0
- package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
- package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
- package/template/src/subComponents/caption/index.ts +3 -0
- package/template/src/subComponents/caption/proto/ptoto.js +91 -0
- package/template/src/subComponents/caption/proto/test.proto +23 -0
- package/template/src/subComponents/caption/useCaption.tsx +123 -0
- package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
- package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
- package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
- package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
- package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
- package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
- package/template/src/subComponents/caption/utils.ts +126 -0
- package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
- package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
- package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
- package/template/src/subComponents/recording/useRecording.tsx +251 -138
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
- package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
- package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
- package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
- package/template/src/theme/index.ts +13 -0
- package/template/src/utils/SdkEvents.ts +37 -14
- package/template/src/utils/SdkMethodEvents.ts +101 -0
- package/template/src/utils/axiomLogger.ts +117 -0
- package/template/src/utils/book.jpg +0 -0
- package/template/src/utils/common.tsx +118 -6
- package/template/src/utils/constants.ts +4 -0
- package/template/src/utils/getCustomRoute.ts +7 -0
- package/template/src/utils/index.tsx +34 -0
- package/template/src/utils/useActionSheet.tsx +50 -0
- package/template/src/utils/useActiveSpeaker.ts +38 -0
- package/template/src/utils/useAppState.ts +17 -0
- package/template/src/utils/useAsyncEffect.ts +138 -0
- package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
- package/template/src/utils/useEndCall.ts +65 -0
- package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
- package/template/src/utils/useFindActiveSpeaker.ts +335 -0
- package/template/src/utils/useGetMeetingPhrase.ts +10 -10
- package/template/src/utils/useIsAudioEnabled.ts +3 -3
- package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
- package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
- package/template/src/utils/useIsPSTN.ts +3 -3
- package/template/src/utils/useIsVideoEnabled.ts +3 -3
- package/template/src/utils/useJoinRoom.ts +199 -0
- package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
- package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
- package/template/src/utils/useModal.tsx +8 -0
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +121 -96
- package/template/src/utils/useRemoteEndCall.ts +4 -4
- package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
- package/template/src/utils/useRemoteMute.ts +7 -7
- package/template/src/utils/useRemoteRequest.ts +7 -7
- package/template/src/utils/useSearchParams.tsx +18 -0
- package/template/src/utils/useString.ts +13 -3
- package/template/src/utils/useSwitchCamera.native.tsx +25 -0
- package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
- package/template/src/utils/useToolbar.tsx +59 -0
- package/template/src/wasms/agora-virtual-background.wasm +0 -0
- package/template/static.d.ts +42 -0
- package/template/tsconfig_rsdk_index.json +3 -3
- package/template/tsconfig_wsdk_index.json +1 -1
- package/template/web/index.html +20 -0
- package/template/webpack.commons.js +21 -10
- package/template/webpack.rsdk.config.js +1 -2
- package/template/webpack.web.config.js +7 -3
- package/template/_buckconfig +0 -6
- package/template/_gitattributes +0 -1
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
- package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
- package/template/android/app/_BUCK +0 -55
- package/template/android/app/build_defs.bzl +0 -19
- package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
- package/template/ios/HelloWorld/AppDelegate.m +0 -74
- package/template/src/components/OAuth.electron.tsx +0 -41
- package/template/src/components/OAuth.native.tsx +0 -55
- package/template/src/components/OAuthConfig.ts +0 -77
- package/template/src/components/StoreToken.tsx +0 -39
- package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
- package/template/src/utils/useButtonTemplate.tsx +0 -44
- package/template/src/utils/useJoinMeeting.ts +0 -132
|
@@ -25,14 +25,17 @@ import AgoraRTC, {
|
|
|
25
25
|
ClientRoleOptions,
|
|
26
26
|
CameraVideoTrackInitConfig,
|
|
27
27
|
MicrophoneAudioTrackInitConfig,
|
|
28
|
+
IMicrophoneAudioTrack,
|
|
28
29
|
} from 'agora-rtc-sdk-ng';
|
|
29
30
|
import type {
|
|
30
31
|
RtcEngineEvents,
|
|
31
32
|
Subscription,
|
|
32
33
|
} from 'react-native-agora/lib/typescript/src/common/RtcEvents';
|
|
34
|
+
|
|
35
|
+
import {IRtcEngine} from 'react-native-agora';
|
|
33
36
|
import {VideoProfile} from '../quality';
|
|
34
|
-
import {
|
|
35
|
-
import {role, mode} from './Types';
|
|
37
|
+
import {ChannelProfileType, ClientRoleType} from '../../../agora-rn-uikit';
|
|
38
|
+
import {role, mode, RtcEngineContext} from './Types';
|
|
36
39
|
import {LOG_ENABLED, GEO_FENCING} from '../../../config.json';
|
|
37
40
|
import {Platform} from 'react-native';
|
|
38
41
|
import isMobileOrTablet from '../../../src/utils/isMobileOrTablet';
|
|
@@ -137,6 +140,19 @@ export enum RnEncryptionEnum {
|
|
|
137
140
|
* @since v3.3.1
|
|
138
141
|
*/
|
|
139
142
|
AES256GCM = 6,
|
|
143
|
+
/**
|
|
144
|
+
* 7: 128-bit GCM encryption, GCM mode.
|
|
145
|
+
*
|
|
146
|
+
* @since v3.4.5
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
AES128GCM2 = 7,
|
|
150
|
+
/**
|
|
151
|
+
* 8: 256-bit AES encryption, GCM mode.
|
|
152
|
+
*
|
|
153
|
+
* @since v3.4.5
|
|
154
|
+
*/
|
|
155
|
+
AES256GCM2 = 8,
|
|
140
156
|
}
|
|
141
157
|
|
|
142
158
|
export enum VideoStreamType {
|
|
@@ -156,6 +172,7 @@ interface RemoteStream {
|
|
|
156
172
|
audio?: IRemoteAudioTrack;
|
|
157
173
|
video?: IRemoteVideoTrack;
|
|
158
174
|
}
|
|
175
|
+
|
|
159
176
|
if ($config.GEO_FENCING) {
|
|
160
177
|
AgoraRTC.setArea({
|
|
161
178
|
areaCode: AREAS.GLOBAL,
|
|
@@ -177,14 +194,15 @@ export default class RtcEngine {
|
|
|
177
194
|
public client: any | IAgoraRTCClient;
|
|
178
195
|
public screenClient: any | IAgoraRTCClient;
|
|
179
196
|
public eventsMap = new Map<string, callbackType>([
|
|
180
|
-
['
|
|
181
|
-
['
|
|
182
|
-
['
|
|
183
|
-
['
|
|
184
|
-
['
|
|
185
|
-
['
|
|
186
|
-
['
|
|
187
|
-
['
|
|
197
|
+
['onUserJoined', () => null],
|
|
198
|
+
['onUserOffline', () => null],
|
|
199
|
+
['onJoinChannelSuccess', () => null],
|
|
200
|
+
['onScreenshareStopped', () => null],
|
|
201
|
+
['onRemoteAudioStateChanged', () => null],
|
|
202
|
+
['onRemoteVideoStateChanged', () => null],
|
|
203
|
+
['onNetworkQuality', () => null],
|
|
204
|
+
['onActiveSpeaker', () => null],
|
|
205
|
+
['onStreamMessage', () => null],
|
|
188
206
|
]);
|
|
189
207
|
public localStream: LocalStream = {};
|
|
190
208
|
public screenStream: ScreenStream = {};
|
|
@@ -202,23 +220,27 @@ export default class RtcEngine {
|
|
|
202
220
|
private muteLocalVideoMutex = false;
|
|
203
221
|
private muteLocalAudioMutex = false;
|
|
204
222
|
private speakerDeviceId = '';
|
|
223
|
+
private usersVolumeLevel = [];
|
|
205
224
|
// Create channel profile and set it here
|
|
206
225
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
constructor(appId: string) {
|
|
226
|
+
initialize(context: RtcEngineContext) {
|
|
227
|
+
const {appId} = context;
|
|
210
228
|
this.appId = appId;
|
|
211
|
-
// this.AgoraRTC = AgoraRTC;
|
|
212
229
|
}
|
|
213
230
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
231
|
+
getRemoteVideoStats(id: string) {
|
|
232
|
+
try {
|
|
233
|
+
const data = this.client.getRemoteVideoStats();
|
|
234
|
+
return data && data[id] ? data[id] : null;
|
|
235
|
+
} catch (error) {
|
|
236
|
+
console.log(`ERROR: on getRemoteVideoStats - ` + error?.message);
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
218
239
|
}
|
|
219
240
|
|
|
220
241
|
async setVideoProfile(profile: VideoProfile): Promise<void> {
|
|
221
242
|
this.videoProfile = profile;
|
|
243
|
+
this.localStream?.video?.setEncoderConfiguration(profile);
|
|
222
244
|
}
|
|
223
245
|
|
|
224
246
|
async enableAudio(): Promise<void> {
|
|
@@ -240,7 +262,10 @@ export default class RtcEngine {
|
|
|
240
262
|
}
|
|
241
263
|
}
|
|
242
264
|
|
|
243
|
-
async enableVideo(
|
|
265
|
+
async enableVideo(
|
|
266
|
+
preferredCameraId?: string,
|
|
267
|
+
preferredMicrophoneId?: string,
|
|
268
|
+
): Promise<void> {
|
|
244
269
|
/**
|
|
245
270
|
* Issue: Backgrounding the browser or app causes the audio streaming to be cut off.
|
|
246
271
|
* Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
|
|
@@ -252,14 +277,16 @@ export default class RtcEngine {
|
|
|
252
277
|
|
|
253
278
|
const audioConfig: MicrophoneAudioTrackInitConfig = {
|
|
254
279
|
bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
|
|
255
|
-
|
|
280
|
+
microphoneId: preferredMicrophoneId,
|
|
256
281
|
};
|
|
257
282
|
const videoConfig: CameraVideoTrackInitConfig = {
|
|
258
283
|
encoderConfig: this.videoProfile,
|
|
259
|
-
|
|
284
|
+
cameraId: preferredCameraId,
|
|
260
285
|
};
|
|
261
286
|
try {
|
|
262
287
|
let [localAudio, localVideo] =
|
|
288
|
+
// If preferred devices are not present, the createTrack call will fallover to
|
|
289
|
+
// the catch block below.
|
|
263
290
|
await AgoraRTC.createMicrophoneAndCameraTracks(
|
|
264
291
|
audioConfig,
|
|
265
292
|
videoConfig,
|
|
@@ -277,9 +304,15 @@ export default class RtcEngine {
|
|
|
277
304
|
} catch (e) {
|
|
278
305
|
let audioError = false;
|
|
279
306
|
let videoError = false;
|
|
280
|
-
try {
|
|
281
|
-
let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
282
307
|
|
|
308
|
+
try {
|
|
309
|
+
let localAudio: IMicrophoneAudioTrack;
|
|
310
|
+
try {
|
|
311
|
+
localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
312
|
+
} catch (e) {
|
|
313
|
+
videoConfig.microphoneId = '';
|
|
314
|
+
localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
315
|
+
}
|
|
283
316
|
this.localStream.audio = localAudio;
|
|
284
317
|
this.audioDeviceId = localAudio
|
|
285
318
|
?.getMediaStreamTrack()
|
|
@@ -288,8 +321,41 @@ export default class RtcEngine {
|
|
|
288
321
|
} catch (error) {
|
|
289
322
|
audioError = error;
|
|
290
323
|
}
|
|
324
|
+
|
|
291
325
|
try {
|
|
292
|
-
let localVideo
|
|
326
|
+
let localVideo: ICameraVideoTrack;
|
|
327
|
+
try {
|
|
328
|
+
localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
|
|
329
|
+
} catch (e) {
|
|
330
|
+
videoConfig.cameraId = '';
|
|
331
|
+
try {
|
|
332
|
+
localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
|
|
333
|
+
} catch (e) {
|
|
334
|
+
console.log(
|
|
335
|
+
'[RTCEngineBridge]: Provided cameraId and default camera failed, trying other available devices',
|
|
336
|
+
);
|
|
337
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
338
|
+
for (let device of devices) {
|
|
339
|
+
if (device.kind === 'videoinput') {
|
|
340
|
+
videoConfig.cameraId = device.deviceId;
|
|
341
|
+
try {
|
|
342
|
+
localVideo = await AgoraRTC.createCameraVideoTrack(
|
|
343
|
+
videoConfig,
|
|
344
|
+
);
|
|
345
|
+
break;
|
|
346
|
+
} catch (e) {
|
|
347
|
+
videoError = e;
|
|
348
|
+
console.log(
|
|
349
|
+
'[RTCEngineBridge]:',
|
|
350
|
+
'Camera not available with deviceId' + device,
|
|
351
|
+
'Reason: ',
|
|
352
|
+
e,
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
293
359
|
this.localStream.video = localVideo;
|
|
294
360
|
this.videoDeviceId = localVideo
|
|
295
361
|
?.getMediaStreamTrack()
|
|
@@ -298,6 +364,7 @@ export default class RtcEngine {
|
|
|
298
364
|
} catch (error) {
|
|
299
365
|
videoError = error;
|
|
300
366
|
}
|
|
367
|
+
|
|
301
368
|
e.status = {audioError, videoError};
|
|
302
369
|
throw e;
|
|
303
370
|
// if (audioError && videoError) throw e;
|
|
@@ -340,7 +407,7 @@ export default class RtcEngine {
|
|
|
340
407
|
|
|
341
408
|
if (this.isPublished === false) {
|
|
342
409
|
this.isPublished = true;
|
|
343
|
-
(this.eventsMap.get('
|
|
410
|
+
(this.eventsMap.get('onJoinChannelSuccess') as callbackType)();
|
|
344
411
|
}
|
|
345
412
|
}
|
|
346
413
|
} catch (e) {
|
|
@@ -353,19 +420,21 @@ export default class RtcEngine {
|
|
|
353
420
|
async joinChannel(
|
|
354
421
|
token: string,
|
|
355
422
|
channelName: string,
|
|
356
|
-
optionalInfo: string,
|
|
357
423
|
optionalUid: number,
|
|
424
|
+
_optionalInfo: {},
|
|
358
425
|
): Promise<void> {
|
|
359
426
|
// TODO create agora client here
|
|
360
|
-
this.client.on('user-joined',
|
|
361
|
-
(this.eventsMap.get('
|
|
362
|
-
(this.eventsMap.get('
|
|
427
|
+
this.client.on('user-joined', user => {
|
|
428
|
+
(this.eventsMap.get('onUserJoined') as callbackType)({}, user.uid);
|
|
429
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
430
|
+
{},
|
|
363
431
|
user.uid,
|
|
364
432
|
0,
|
|
365
433
|
0,
|
|
366
434
|
0,
|
|
367
435
|
);
|
|
368
|
-
(this.eventsMap.get('
|
|
436
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
437
|
+
{},
|
|
369
438
|
user.uid,
|
|
370
439
|
0,
|
|
371
440
|
0,
|
|
@@ -373,18 +442,19 @@ export default class RtcEngine {
|
|
|
373
442
|
);
|
|
374
443
|
});
|
|
375
444
|
|
|
376
|
-
this.client.on('user-left',
|
|
445
|
+
this.client.on('user-left', user => {
|
|
377
446
|
const uid = user.uid;
|
|
378
447
|
if (this.remoteStreams.has(uid)) {
|
|
379
448
|
this.remoteStreams.delete(uid);
|
|
380
449
|
}
|
|
381
|
-
(this.eventsMap.get('
|
|
450
|
+
(this.eventsMap.get('onUserOffline') as callbackType)({}, uid);
|
|
382
451
|
// (this.eventsMap.get('UserJoined') as callbackType)(uid);
|
|
383
452
|
});
|
|
384
453
|
this.client.on('user-published', async (user, mediaType) => {
|
|
385
454
|
// Initiate the subscription
|
|
386
455
|
if (this.inScreenshare && user.uid === this.screenClient.uid) {
|
|
387
|
-
(this.eventsMap.get('
|
|
456
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
457
|
+
{},
|
|
388
458
|
user.uid,
|
|
389
459
|
2,
|
|
390
460
|
0,
|
|
@@ -408,7 +478,8 @@ export default class RtcEngine {
|
|
|
408
478
|
.get(user.uid)
|
|
409
479
|
?.audio?.setPlaybackDevice(this.speakerDeviceId);
|
|
410
480
|
}
|
|
411
|
-
(this.eventsMap.get('
|
|
481
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
482
|
+
{},
|
|
412
483
|
user.uid,
|
|
413
484
|
2,
|
|
414
485
|
0,
|
|
@@ -422,7 +493,8 @@ export default class RtcEngine {
|
|
|
422
493
|
...this.remoteStreams.get(user.uid),
|
|
423
494
|
video: videoTrack,
|
|
424
495
|
});
|
|
425
|
-
(this.eventsMap.get('
|
|
496
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
497
|
+
{},
|
|
426
498
|
user.uid,
|
|
427
499
|
2,
|
|
428
500
|
0,
|
|
@@ -434,7 +506,8 @@ export default class RtcEngine {
|
|
|
434
506
|
if (mediaType === 'audio') {
|
|
435
507
|
const {audio, ...rest} = this.remoteStreams.get(user.uid);
|
|
436
508
|
this.remoteStreams.set(user.uid, rest);
|
|
437
|
-
(this.eventsMap.get('
|
|
509
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
510
|
+
{},
|
|
438
511
|
user.uid,
|
|
439
512
|
0,
|
|
440
513
|
0,
|
|
@@ -443,7 +516,8 @@ export default class RtcEngine {
|
|
|
443
516
|
} else {
|
|
444
517
|
const {video, ...rest} = this.remoteStreams.get(user.uid);
|
|
445
518
|
this.remoteStreams.set(user.uid, rest);
|
|
446
|
-
(this.eventsMap.get('
|
|
519
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
520
|
+
{},
|
|
447
521
|
user.uid,
|
|
448
522
|
0,
|
|
449
523
|
0,
|
|
@@ -452,7 +526,10 @@ export default class RtcEngine {
|
|
|
452
526
|
}
|
|
453
527
|
});
|
|
454
528
|
|
|
455
|
-
this.client.on('volume-indicator',
|
|
529
|
+
this.client.on('volume-indicator', volumes => {
|
|
530
|
+
this.usersVolumeLevel = volumes;
|
|
531
|
+
/**
|
|
532
|
+
* old active speaker logic
|
|
456
533
|
const highestvolumeObj = volumes.reduce(
|
|
457
534
|
(highestVolume, volume, index) => {
|
|
458
535
|
if (highestVolume === null) {
|
|
@@ -463,7 +540,7 @@ export default class RtcEngine {
|
|
|
463
540
|
}
|
|
464
541
|
return highestVolume;
|
|
465
542
|
}
|
|
466
|
-
//
|
|
543
|
+
//console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
|
|
467
544
|
},
|
|
468
545
|
null,
|
|
469
546
|
);
|
|
@@ -480,6 +557,7 @@ export default class RtcEngine {
|
|
|
480
557
|
activeSpeakerCallBack(activeSpeakerUid);
|
|
481
558
|
this.activeSpeakerUid = activeSpeakerUid;
|
|
482
559
|
}
|
|
560
|
+
*/
|
|
483
561
|
});
|
|
484
562
|
|
|
485
563
|
// this.client.on('stream-fallback', (evt))
|
|
@@ -491,28 +569,38 @@ export default class RtcEngine {
|
|
|
491
569
|
'network-quality',
|
|
492
570
|
async ({downlinkNetworkQuality, uplinkNetworkQuality}) => {
|
|
493
571
|
const networkQualityIndicatorCallback = this.eventsMap.get(
|
|
494
|
-
'
|
|
572
|
+
'onNetworkQuality',
|
|
495
573
|
) as callbackType;
|
|
496
574
|
|
|
497
575
|
networkQualityIndicatorCallback(
|
|
576
|
+
{},
|
|
498
577
|
0,
|
|
499
|
-
downlinkNetworkQuality,
|
|
500
578
|
uplinkNetworkQuality,
|
|
579
|
+
downlinkNetworkQuality,
|
|
501
580
|
);
|
|
502
581
|
|
|
503
582
|
const remoteUserNetworkQualities =
|
|
504
583
|
this.client.getRemoteNetworkQuality();
|
|
505
584
|
|
|
506
|
-
Object.keys(remoteUserNetworkQualities).forEach(
|
|
585
|
+
Object.keys(remoteUserNetworkQualities).forEach(uid => {
|
|
507
586
|
networkQualityIndicatorCallback(
|
|
587
|
+
{},
|
|
508
588
|
uid,
|
|
509
|
-
remoteUserNetworkQualities[uid].downlinkNetworkQuality,
|
|
510
589
|
remoteUserNetworkQualities[uid].uplinkNetworkQuality,
|
|
590
|
+
remoteUserNetworkQualities[uid].downlinkNetworkQuality,
|
|
511
591
|
);
|
|
512
592
|
});
|
|
513
593
|
},
|
|
514
594
|
);
|
|
515
595
|
|
|
596
|
+
/* Recieve Captions */
|
|
597
|
+
this.client.on('stream-message', (uid: UID, payload: UInt8Array) => {
|
|
598
|
+
console.log(
|
|
599
|
+
`stt-web: onStreamMessageCallback uid:${uid} , payload:${payload}`,
|
|
600
|
+
);
|
|
601
|
+
(this.eventsMap.get('onStreamMessage') as callbackType)(uid, payload);
|
|
602
|
+
});
|
|
603
|
+
|
|
516
604
|
await this.client.join(
|
|
517
605
|
this.appId,
|
|
518
606
|
channelName,
|
|
@@ -525,6 +613,10 @@ export default class RtcEngine {
|
|
|
525
613
|
console.log('enabling screen sleep');
|
|
526
614
|
}
|
|
527
615
|
|
|
616
|
+
getUsersVolumeLevel() {
|
|
617
|
+
return this.usersVolumeLevel;
|
|
618
|
+
}
|
|
619
|
+
|
|
528
620
|
async leaveChannel(): Promise<void> {
|
|
529
621
|
this.client.leave();
|
|
530
622
|
this.remoteStreams.forEach((stream, uid, map) => {
|
|
@@ -540,17 +632,19 @@ export default class RtcEngine {
|
|
|
540
632
|
listener: RtcEngineEvents[EventType],
|
|
541
633
|
): Subscription {
|
|
542
634
|
if (
|
|
543
|
-
event === '
|
|
544
|
-
event === '
|
|
545
|
-
event === '
|
|
546
|
-
event === '
|
|
547
|
-
event === '
|
|
548
|
-
event === '
|
|
549
|
-
event === '
|
|
550
|
-
event === '
|
|
635
|
+
event === 'onUserJoined' ||
|
|
636
|
+
event === 'onUserOffline' ||
|
|
637
|
+
event === 'onJoinChannelSuccess' ||
|
|
638
|
+
event === 'onScreenshareStopped' ||
|
|
639
|
+
event === 'onRemoteAudioStateChanged' ||
|
|
640
|
+
event === 'onRemoteVideoStateChanged' ||
|
|
641
|
+
event === 'onNetworkQuality' ||
|
|
642
|
+
event === 'onActiveSpeaker' ||
|
|
643
|
+
event === 'onStreamMessage'
|
|
551
644
|
) {
|
|
552
645
|
this.eventsMap.set(event, listener as callbackType);
|
|
553
646
|
}
|
|
647
|
+
|
|
554
648
|
return {
|
|
555
649
|
remove: () => {
|
|
556
650
|
console.log(
|
|
@@ -651,17 +745,21 @@ export default class RtcEngine {
|
|
|
651
745
|
return devices;
|
|
652
746
|
}
|
|
653
747
|
|
|
654
|
-
async setChannelProfile(profile:
|
|
748
|
+
async setChannelProfile(profile: ChannelProfileType): Promise<void> {
|
|
655
749
|
try {
|
|
656
750
|
this.client = AgoraRTC.createClient({
|
|
657
|
-
codec: '
|
|
751
|
+
codec: 'vp9',
|
|
658
752
|
mode:
|
|
659
|
-
profile ===
|
|
753
|
+
profile === ChannelProfileType.ChannelProfileLiveBroadcasting
|
|
754
|
+
? mode.live
|
|
755
|
+
: mode.rtc,
|
|
660
756
|
});
|
|
661
757
|
this.screenClient = AgoraRTC.createClient({
|
|
662
|
-
codec: '
|
|
758
|
+
codec: 'vp9',
|
|
663
759
|
mode:
|
|
664
|
-
profile ===
|
|
760
|
+
profile === ChannelProfileType.ChannelProfileLiveBroadcasting
|
|
761
|
+
? mode.live
|
|
762
|
+
: mode.rtc,
|
|
665
763
|
});
|
|
666
764
|
} catch (e) {
|
|
667
765
|
throw e;
|
|
@@ -669,11 +767,11 @@ export default class RtcEngine {
|
|
|
669
767
|
}
|
|
670
768
|
|
|
671
769
|
async setClientRole(
|
|
672
|
-
clientRole:
|
|
770
|
+
clientRole: ClientRoleType,
|
|
673
771
|
options?: ClientRoleOptions,
|
|
674
772
|
): Promise<void> {
|
|
675
773
|
try {
|
|
676
|
-
if (clientRole ==
|
|
774
|
+
if (clientRole == ClientRoleType.ClientRoleAudience) {
|
|
677
775
|
if (this.isJoined) {
|
|
678
776
|
// Unpublish the streams when role is changed to Audience
|
|
679
777
|
await this.client.unpublish();
|
|
@@ -683,7 +781,7 @@ export default class RtcEngine {
|
|
|
683
781
|
}
|
|
684
782
|
await this.client.setClientRole(role.audience, options);
|
|
685
783
|
await this.screenClient.setClientRole(role.audience, options);
|
|
686
|
-
} else if (clientRole ==
|
|
784
|
+
} else if (clientRole == ClientRoleType.ClientRoleBroadcaster) {
|
|
687
785
|
await this.client.setClientRole(role.host);
|
|
688
786
|
await this.screenClient.setClientRole(role.host);
|
|
689
787
|
}
|
|
@@ -730,11 +828,11 @@ export default class RtcEngine {
|
|
|
730
828
|
|
|
731
829
|
async changeSpeaker(speakerId, callback, error) {
|
|
732
830
|
try {
|
|
733
|
-
this.speakerDeviceId = speakerId;
|
|
734
831
|
// setting sepeaker for all remote stream (previously joined users)
|
|
735
832
|
this.remoteStreams?.forEach((stream, uid, map) => {
|
|
736
833
|
stream?.audio?.setPlaybackDevice(speakerId);
|
|
737
834
|
});
|
|
835
|
+
this.speakerDeviceId = speakerId;
|
|
738
836
|
callback(speakerId);
|
|
739
837
|
} catch (e) {
|
|
740
838
|
error(e);
|
|
@@ -762,7 +860,7 @@ export default class RtcEngine {
|
|
|
762
860
|
|
|
763
861
|
// Bug in implementation !!!
|
|
764
862
|
async setRemoteSubscribeFallbackOption(option: 0 | 1 | 2) {
|
|
765
|
-
this.streams.forEach(
|
|
863
|
+
this.streams.forEach(stream => {
|
|
766
864
|
this.client.setStreamFallbackOption(stream, option);
|
|
767
865
|
});
|
|
768
866
|
Promise.resolve();
|
|
@@ -787,6 +885,17 @@ export default class RtcEngine {
|
|
|
787
885
|
break;
|
|
788
886
|
case RnEncryptionEnum.SM4128ECB:
|
|
789
887
|
mode = 'sm4-128-ecb';
|
|
888
|
+
break;
|
|
889
|
+
case RnEncryptionEnum.AES256GCM:
|
|
890
|
+
mode = 'aes-256-gcm';
|
|
891
|
+
break;
|
|
892
|
+
case RnEncryptionEnum.AES128GCM2:
|
|
893
|
+
mode = 'aes-128-gcm2';
|
|
894
|
+
break;
|
|
895
|
+
case RnEncryptionEnum.AES256GCM2:
|
|
896
|
+
mode = 'aes-256-gcm2';
|
|
897
|
+
break;
|
|
898
|
+
|
|
790
899
|
default:
|
|
791
900
|
mode = 'none';
|
|
792
901
|
}
|
|
@@ -801,14 +910,25 @@ export default class RtcEngine {
|
|
|
801
910
|
config: {
|
|
802
911
|
encryptionMode: RnEncryptionEnum;
|
|
803
912
|
encryptionKey: string;
|
|
913
|
+
encryptionKdfSalt: string;
|
|
804
914
|
},
|
|
805
915
|
): Promise<void> {
|
|
806
916
|
let mode: EncryptionMode;
|
|
807
917
|
mode = this.getEncryptionMode(enabled, config?.encryptionMode);
|
|
808
918
|
try {
|
|
809
919
|
await Promise.all([
|
|
810
|
-
this.client.setEncryptionConfig(
|
|
811
|
-
|
|
920
|
+
this.client.setEncryptionConfig(
|
|
921
|
+
mode,
|
|
922
|
+
config.encryptionKey,
|
|
923
|
+
config.encryptionKdfSalt,
|
|
924
|
+
true, // encryptDataStream
|
|
925
|
+
),
|
|
926
|
+
this.screenClient.setEncryptionConfig(
|
|
927
|
+
mode,
|
|
928
|
+
config.encryptionKey,
|
|
929
|
+
config.encryptionKdfSalt,
|
|
930
|
+
true, // encryptDataStream
|
|
931
|
+
),
|
|
812
932
|
]);
|
|
813
933
|
} catch (e) {
|
|
814
934
|
throw e;
|
|
@@ -835,13 +955,18 @@ export default class RtcEngine {
|
|
|
835
955
|
console.error('Please use enableEncryption instead');
|
|
836
956
|
}
|
|
837
957
|
|
|
838
|
-
async
|
|
958
|
+
// async removeAllListeners<EventType extends keyof RtcEngineEvents>(event: EventType) {
|
|
959
|
+
// this.client.removeAllListeners(eventName);
|
|
960
|
+
// }
|
|
961
|
+
|
|
962
|
+
async release(): Promise<void> {
|
|
839
963
|
if (this.inScreenshare) {
|
|
840
|
-
(this.eventsMap.get('
|
|
964
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
965
|
+
{},
|
|
841
966
|
this.screenClient.uid,
|
|
842
967
|
);
|
|
843
968
|
this.screenClient.leave();
|
|
844
|
-
(this.eventsMap.get('
|
|
969
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
845
970
|
}
|
|
846
971
|
this.eventsMap.forEach((callback, event, map) => {
|
|
847
972
|
this.client.off(event, callback);
|
|
@@ -892,6 +1017,7 @@ export default class RtcEngine {
|
|
|
892
1017
|
encryption: {
|
|
893
1018
|
screenKey: string;
|
|
894
1019
|
mode: RnEncryptionEnum;
|
|
1020
|
+
salt: string;
|
|
895
1021
|
},
|
|
896
1022
|
config: ScreenVideoTrackInitConfig = {},
|
|
897
1023
|
audio: 'enable' | 'disable' | 'auto' = 'auto',
|
|
@@ -912,6 +1038,8 @@ export default class RtcEngine {
|
|
|
912
1038
|
await this.screenClient.setEncryptionConfig(
|
|
913
1039
|
mode,
|
|
914
1040
|
encryption.screenKey,
|
|
1041
|
+
encryption.salt,
|
|
1042
|
+
true, // encryptDataStream
|
|
915
1043
|
);
|
|
916
1044
|
} catch (e) {
|
|
917
1045
|
console.log('e: Encryption for screenshare failed', e);
|
|
@@ -948,7 +1076,8 @@ export default class RtcEngine {
|
|
|
948
1076
|
);
|
|
949
1077
|
|
|
950
1078
|
this.screenStream.video.on('track-ended', () => {
|
|
951
|
-
(this.eventsMap.get('
|
|
1079
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
1080
|
+
{},
|
|
952
1081
|
this.screenClient.uid,
|
|
953
1082
|
);
|
|
954
1083
|
|
|
@@ -958,15 +1087,16 @@ export default class RtcEngine {
|
|
|
958
1087
|
this.screenStream.video?.close();
|
|
959
1088
|
this.screenStream = {};
|
|
960
1089
|
|
|
961
|
-
(this.eventsMap.get('
|
|
1090
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
962
1091
|
this.inScreenshare = false;
|
|
963
1092
|
});
|
|
964
1093
|
} else {
|
|
965
|
-
(this.eventsMap.get('
|
|
1094
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
1095
|
+
{},
|
|
966
1096
|
this.screenClient.uid,
|
|
967
1097
|
);
|
|
968
1098
|
this.screenClient.leave();
|
|
969
|
-
(this.eventsMap.get('
|
|
1099
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
970
1100
|
try {
|
|
971
1101
|
this.screenStream.audio?.close();
|
|
972
1102
|
this.screenStream.video?.close();
|
|
@@ -13,57 +13,51 @@
|
|
|
13
13
|
import {ILocalVideoTrack, IRemoteVideoTrack} from 'agora-rtc-sdk-ng';
|
|
14
14
|
import React, {useEffect} from 'react';
|
|
15
15
|
import {StyleProp, StyleSheet, ViewProps, ViewStyle} from 'react-native';
|
|
16
|
-
import {
|
|
16
|
+
import {RenderModeType} from './Types';
|
|
17
17
|
|
|
18
18
|
export interface RtcSurfaceViewProps extends ViewProps {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
mirrorMode?: any;
|
|
24
|
-
}
|
|
25
|
-
export interface RtcUidProps {
|
|
26
|
-
uid: number;
|
|
19
|
+
canvas: {
|
|
20
|
+
renderMode?: RenderModeType;
|
|
21
|
+
uid?: number;
|
|
22
|
+
};
|
|
27
23
|
}
|
|
24
|
+
|
|
28
25
|
export interface StyleProps {
|
|
29
26
|
style?: StyleProp<ViewStyle>;
|
|
30
27
|
}
|
|
31
28
|
|
|
32
|
-
interface SurfaceViewInterface
|
|
33
|
-
extends RtcSurfaceViewProps,
|
|
34
|
-
RtcUidProps,
|
|
35
|
-
StyleProps {}
|
|
36
|
-
|
|
37
|
-
const SurfaceView = (props: SurfaceViewInterface) => {
|
|
38
|
-
// console.log('Surface View props', props);
|
|
29
|
+
interface SurfaceViewInterface extends RtcSurfaceViewProps, StyleProps {}
|
|
39
30
|
|
|
31
|
+
const RtcSurfaceView = (props: SurfaceViewInterface) => {
|
|
32
|
+
console.log('Rtc Surface View props', props);
|
|
33
|
+
const {uid, renderMode} = props.canvas;
|
|
40
34
|
const stream: ILocalVideoTrack | IRemoteVideoTrack =
|
|
41
|
-
|
|
35
|
+
uid === 0
|
|
42
36
|
? window.engine.localStream.video
|
|
43
|
-
:
|
|
37
|
+
: uid === 1
|
|
44
38
|
? window.engine.screenStream.video
|
|
45
|
-
: window.engine.remoteStreams.get(
|
|
39
|
+
: window.engine.remoteStreams.get(uid)?.video;
|
|
46
40
|
// console.log(props, window.engine, stream);
|
|
47
41
|
useEffect(
|
|
48
42
|
function () {
|
|
49
43
|
if (stream?.play) {
|
|
50
|
-
if (
|
|
51
|
-
stream.play(String(
|
|
44
|
+
if (renderMode === RenderModeType.RenderModeFit) {
|
|
45
|
+
stream.play(String(uid), {fit: 'contain'});
|
|
52
46
|
} else {
|
|
53
|
-
stream.play(String(
|
|
47
|
+
stream.play(String(uid));
|
|
54
48
|
}
|
|
55
49
|
}
|
|
56
50
|
return () => {
|
|
57
|
-
console.log(`unmounting stream ${
|
|
51
|
+
console.log(`unmounting stream ${uid}`, stream);
|
|
58
52
|
stream && stream.stop();
|
|
59
53
|
};
|
|
60
54
|
},
|
|
61
|
-
[
|
|
55
|
+
[uid, renderMode, stream],
|
|
62
56
|
);
|
|
63
57
|
|
|
64
58
|
return stream ? (
|
|
65
59
|
<div
|
|
66
|
-
id={String(
|
|
60
|
+
id={String(uid)}
|
|
67
61
|
className={'video-container'}
|
|
68
62
|
style={{...style.full, ...(props.style as Object), overflow: 'hidden'}}
|
|
69
63
|
/>
|
|
@@ -78,4 +72,4 @@ const style = StyleSheet.create({
|
|
|
78
72
|
},
|
|
79
73
|
});
|
|
80
74
|
|
|
81
|
-
export default
|
|
75
|
+
export default RtcSurfaceView;
|