agora-appbuilder-core 4.0.0-test.2 → 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 +22 -22
- package/template/_eslintrc.js +3 -3
- package/template/_gitignore +12 -11
- package/template/_package-lock.json +20328 -20229
- 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 +78 -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 +39 -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 +117 -111
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +46 -27
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +174 -75
- package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
- package/template/agora-rn-uikit/src/Utils/quality.tsx +2 -2
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +41 -19
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +37 -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 +17 -31
- 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 +191 -71
- 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 +32 -45
- package/template/customization-api/types.ts +26 -0
- package/template/customization-api/utils.ts +4 -0
- package/template/customization-implementation/index.ts +0 -1
- package/template/defaultConfig.js +72 -0
- package/template/global.d.ts +9 -1
- package/template/index.js +1 -4
- package/template/index.web.js +0 -5
- 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 +7 -1
- package/template/ios/HelloWorld/main.m +2 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +81 -119
- 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 +51 -21
- package/template/ios/Podfile.lock +553 -294
- package/template/jest.config.js +4 -0
- package/template/metro.config.js +7 -32
- package/template/package.json +48 -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 +79 -22
- package/template/src/AppRoutes.tsx +48 -3
- package/template/src/AppWrapper.tsx +25 -21
- package/template/src/SDKAppWrapper.tsx +11 -11
- 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 +174 -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 +46 -26
- 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 +30 -32
- package/template/src/auth/AuthRoute.tsx +11 -3
- package/template/src/auth/IDPAuth.electron.tsx +4 -3
- package/template/src/auth/IDPAuth.tsx +10 -2
- package/template/src/auth/IDPLogoutComponent.tsx +14 -5
- package/template/src/auth/UserCancelPopup.tsx +11 -4
- package/template/src/auth/openIDPURL.electron.tsx +5 -4
- package/template/src/auth/openIDPURL.tsx +1 -1
- package/template/src/auth/useIDPAuth.electron.tsx +6 -3
- package/template/src/auth/useIDPAuth.tsx +0 -4
- package/template/src/auth/useTokenAuth.tsx +10 -8
- package/template/src/components/Chat.tsx +97 -78
- 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 +88 -43
- package/template/src/components/DeviceContext.tsx +2 -0
- package/template/src/components/EventsConfigure.tsx +685 -81
- package/template/src/components/GraphQLProvider.tsx +51 -33
- 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 +296 -149
- package/template/src/components/NavbarMobile.tsx +119 -0
- package/template/src/components/NetworkQualityContext.tsx +12 -6
- package/template/src/components/ParticipantsView.tsx +62 -55
- package/template/src/components/PinnedVideo.tsx +191 -119
- package/template/src/components/Precall.native.tsx +155 -72
- package/template/src/components/Precall.tsx +225 -73
- package/template/src/components/RTMConfigure.tsx +180 -63
- package/template/src/components/Rightbar.tsx +112 -0
- package/template/src/components/SdkApiContext.tsx +26 -24
- package/template/src/components/SdkMuteToggleListener.tsx +8 -12
- package/template/src/components/SessionContext.tsx +0 -1
- package/template/src/components/Settings.tsx +33 -4
- package/template/src/components/SettingsView.tsx +42 -9
- package/template/src/components/Share.tsx +130 -72
- package/template/src/components/StorageContext.tsx +5 -4
- package/template/src/components/ToastComponent.tsx +7 -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 +1 -0
- 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 +105 -44
- package/template/src/components/popups/StartScreenSharePopup.native.tsx +26 -23
- package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
- package/template/src/components/popups/StopScreenSharePopup.native.tsx +17 -5
- 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 +31 -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 +9 -4
- package/template/src/components/precall/joinCallBtn.tsx +9 -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 +4 -4
- 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/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +46 -12
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/useShareLink.tsx +23 -60
- package/template/src/components/useUserPreference.tsx +54 -17
- package/template/src/components/useVideoCall.tsx +52 -7
- 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 +118 -92
- package/template/src/pages/Endcall.tsx +2 -2
- package/template/src/pages/Join.tsx +67 -45
- package/template/src/pages/VideoCall.tsx +240 -132
- package/template/src/pages/video-call/ActionSheet.native.tsx +33 -3
- package/template/src/pages/video-call/ActionSheet.tsx +54 -15
- package/template/src/pages/video-call/ActionSheetContent.tsx +487 -313
- 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/RenderComponent.tsx +14 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
- package/template/src/pages/video-call/VideoCallMobileView.tsx +199 -99
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +2 -25
- package/template/src/pages/video-call/VideoCallScreen.tsx +233 -57
- 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 +237 -98
- package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
- package/template/src/pages/video-call/index.ts +42 -8
- package/template/src/rtm/RTMEngine.ts +9 -4
- package/template/src/rtm-events/constants.ts +21 -3
- package/template/src/rtm-events-api/Events.ts +6 -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 +22 -9
- package/template/src/subComponents/LocalAudioMute.tsx +87 -34
- package/template/src/subComponents/LocalEndCall.tsx +48 -31
- package/template/src/subComponents/LocalSwitchCamera.tsx +49 -11
- package/template/src/subComponents/LocalVideoMute.tsx +87 -35
- 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 -150
- package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +18 -13
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +164 -93
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +163 -108
- 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/SdkMethodEvents.ts +5 -5
- package/template/src/utils/axiomLogger.ts +117 -0
- package/template/src/utils/book.jpg +0 -0
- package/template/src/utils/common.tsx +96 -1
- 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} +19 -14
- 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/Settings.native.tsx → utils/useMenu.tsx} +16 -6
- package/template/src/utils/useModal.tsx +8 -0
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +21 -9
- 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/utils/useSwitchCamera.tsx +19 -0
- 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/web/index.html +20 -0
- package/template/webpack.commons.js +21 -10
- 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/pages/video-call/CustomUserContextHolder.tsx +0 -20
- package/template/src/utils/useButtonTemplate.tsx +0 -44
- package/template/src/utils/useJoinMeeting.ts +0 -142
|
@@ -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,19 +220,12 @@ 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
|
-
}
|
|
213
|
-
|
|
214
|
-
static async create(appId: string): Promise<RtcEngine> {
|
|
215
|
-
let engine = new RtcEngine(appId);
|
|
216
|
-
window.engine = engine;
|
|
217
|
-
return engine;
|
|
218
229
|
}
|
|
219
230
|
|
|
220
231
|
getRemoteVideoStats(id: string) {
|
|
@@ -229,6 +240,7 @@ export default class RtcEngine {
|
|
|
229
240
|
|
|
230
241
|
async setVideoProfile(profile: VideoProfile): Promise<void> {
|
|
231
242
|
this.videoProfile = profile;
|
|
243
|
+
this.localStream?.video?.setEncoderConfiguration(profile);
|
|
232
244
|
}
|
|
233
245
|
|
|
234
246
|
async enableAudio(): Promise<void> {
|
|
@@ -250,7 +262,10 @@ export default class RtcEngine {
|
|
|
250
262
|
}
|
|
251
263
|
}
|
|
252
264
|
|
|
253
|
-
async enableVideo(
|
|
265
|
+
async enableVideo(
|
|
266
|
+
preferredCameraId?: string,
|
|
267
|
+
preferredMicrophoneId?: string,
|
|
268
|
+
): Promise<void> {
|
|
254
269
|
/**
|
|
255
270
|
* Issue: Backgrounding the browser or app causes the audio streaming to be cut off.
|
|
256
271
|
* Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
|
|
@@ -262,14 +277,16 @@ export default class RtcEngine {
|
|
|
262
277
|
|
|
263
278
|
const audioConfig: MicrophoneAudioTrackInitConfig = {
|
|
264
279
|
bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
|
|
265
|
-
|
|
280
|
+
microphoneId: preferredMicrophoneId,
|
|
266
281
|
};
|
|
267
282
|
const videoConfig: CameraVideoTrackInitConfig = {
|
|
268
283
|
encoderConfig: this.videoProfile,
|
|
269
|
-
|
|
284
|
+
cameraId: preferredCameraId,
|
|
270
285
|
};
|
|
271
286
|
try {
|
|
272
287
|
let [localAudio, localVideo] =
|
|
288
|
+
// If preferred devices are not present, the createTrack call will fallover to
|
|
289
|
+
// the catch block below.
|
|
273
290
|
await AgoraRTC.createMicrophoneAndCameraTracks(
|
|
274
291
|
audioConfig,
|
|
275
292
|
videoConfig,
|
|
@@ -287,9 +304,15 @@ export default class RtcEngine {
|
|
|
287
304
|
} catch (e) {
|
|
288
305
|
let audioError = false;
|
|
289
306
|
let videoError = false;
|
|
290
|
-
try {
|
|
291
|
-
let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
|
|
292
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
|
+
}
|
|
293
316
|
this.localStream.audio = localAudio;
|
|
294
317
|
this.audioDeviceId = localAudio
|
|
295
318
|
?.getMediaStreamTrack()
|
|
@@ -298,8 +321,41 @@ export default class RtcEngine {
|
|
|
298
321
|
} catch (error) {
|
|
299
322
|
audioError = error;
|
|
300
323
|
}
|
|
324
|
+
|
|
301
325
|
try {
|
|
302
|
-
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
|
+
}
|
|
303
359
|
this.localStream.video = localVideo;
|
|
304
360
|
this.videoDeviceId = localVideo
|
|
305
361
|
?.getMediaStreamTrack()
|
|
@@ -308,6 +364,7 @@ export default class RtcEngine {
|
|
|
308
364
|
} catch (error) {
|
|
309
365
|
videoError = error;
|
|
310
366
|
}
|
|
367
|
+
|
|
311
368
|
e.status = {audioError, videoError};
|
|
312
369
|
throw e;
|
|
313
370
|
// if (audioError && videoError) throw e;
|
|
@@ -350,7 +407,7 @@ export default class RtcEngine {
|
|
|
350
407
|
|
|
351
408
|
if (this.isPublished === false) {
|
|
352
409
|
this.isPublished = true;
|
|
353
|
-
(this.eventsMap.get('
|
|
410
|
+
(this.eventsMap.get('onJoinChannelSuccess') as callbackType)();
|
|
354
411
|
}
|
|
355
412
|
}
|
|
356
413
|
} catch (e) {
|
|
@@ -363,19 +420,21 @@ export default class RtcEngine {
|
|
|
363
420
|
async joinChannel(
|
|
364
421
|
token: string,
|
|
365
422
|
channelName: string,
|
|
366
|
-
optionalInfo: string,
|
|
367
423
|
optionalUid: number,
|
|
424
|
+
_optionalInfo: {},
|
|
368
425
|
): Promise<void> {
|
|
369
426
|
// TODO create agora client here
|
|
370
|
-
this.client.on('user-joined',
|
|
371
|
-
(this.eventsMap.get('
|
|
372
|
-
(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
|
+
{},
|
|
373
431
|
user.uid,
|
|
374
432
|
0,
|
|
375
433
|
0,
|
|
376
434
|
0,
|
|
377
435
|
);
|
|
378
|
-
(this.eventsMap.get('
|
|
436
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
437
|
+
{},
|
|
379
438
|
user.uid,
|
|
380
439
|
0,
|
|
381
440
|
0,
|
|
@@ -383,18 +442,19 @@ export default class RtcEngine {
|
|
|
383
442
|
);
|
|
384
443
|
});
|
|
385
444
|
|
|
386
|
-
this.client.on('user-left',
|
|
445
|
+
this.client.on('user-left', user => {
|
|
387
446
|
const uid = user.uid;
|
|
388
447
|
if (this.remoteStreams.has(uid)) {
|
|
389
448
|
this.remoteStreams.delete(uid);
|
|
390
449
|
}
|
|
391
|
-
(this.eventsMap.get('
|
|
450
|
+
(this.eventsMap.get('onUserOffline') as callbackType)({}, uid);
|
|
392
451
|
// (this.eventsMap.get('UserJoined') as callbackType)(uid);
|
|
393
452
|
});
|
|
394
453
|
this.client.on('user-published', async (user, mediaType) => {
|
|
395
454
|
// Initiate the subscription
|
|
396
455
|
if (this.inScreenshare && user.uid === this.screenClient.uid) {
|
|
397
|
-
(this.eventsMap.get('
|
|
456
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
457
|
+
{},
|
|
398
458
|
user.uid,
|
|
399
459
|
2,
|
|
400
460
|
0,
|
|
@@ -418,7 +478,8 @@ export default class RtcEngine {
|
|
|
418
478
|
.get(user.uid)
|
|
419
479
|
?.audio?.setPlaybackDevice(this.speakerDeviceId);
|
|
420
480
|
}
|
|
421
|
-
(this.eventsMap.get('
|
|
481
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
482
|
+
{},
|
|
422
483
|
user.uid,
|
|
423
484
|
2,
|
|
424
485
|
0,
|
|
@@ -432,7 +493,8 @@ export default class RtcEngine {
|
|
|
432
493
|
...this.remoteStreams.get(user.uid),
|
|
433
494
|
video: videoTrack,
|
|
434
495
|
});
|
|
435
|
-
(this.eventsMap.get('
|
|
496
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
497
|
+
{},
|
|
436
498
|
user.uid,
|
|
437
499
|
2,
|
|
438
500
|
0,
|
|
@@ -444,7 +506,8 @@ export default class RtcEngine {
|
|
|
444
506
|
if (mediaType === 'audio') {
|
|
445
507
|
const {audio, ...rest} = this.remoteStreams.get(user.uid);
|
|
446
508
|
this.remoteStreams.set(user.uid, rest);
|
|
447
|
-
(this.eventsMap.get('
|
|
509
|
+
(this.eventsMap.get('onRemoteAudioStateChanged') as callbackType)(
|
|
510
|
+
{},
|
|
448
511
|
user.uid,
|
|
449
512
|
0,
|
|
450
513
|
0,
|
|
@@ -453,7 +516,8 @@ export default class RtcEngine {
|
|
|
453
516
|
} else {
|
|
454
517
|
const {video, ...rest} = this.remoteStreams.get(user.uid);
|
|
455
518
|
this.remoteStreams.set(user.uid, rest);
|
|
456
|
-
(this.eventsMap.get('
|
|
519
|
+
(this.eventsMap.get('onRemoteVideoStateChanged') as callbackType)(
|
|
520
|
+
{},
|
|
457
521
|
user.uid,
|
|
458
522
|
0,
|
|
459
523
|
0,
|
|
@@ -462,7 +526,10 @@ export default class RtcEngine {
|
|
|
462
526
|
}
|
|
463
527
|
});
|
|
464
528
|
|
|
465
|
-
this.client.on('volume-indicator',
|
|
529
|
+
this.client.on('volume-indicator', volumes => {
|
|
530
|
+
this.usersVolumeLevel = volumes;
|
|
531
|
+
/**
|
|
532
|
+
* old active speaker logic
|
|
466
533
|
const highestvolumeObj = volumes.reduce(
|
|
467
534
|
(highestVolume, volume, index) => {
|
|
468
535
|
if (highestVolume === null) {
|
|
@@ -473,7 +540,7 @@ export default class RtcEngine {
|
|
|
473
540
|
}
|
|
474
541
|
return highestVolume;
|
|
475
542
|
}
|
|
476
|
-
//
|
|
543
|
+
//console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
|
|
477
544
|
},
|
|
478
545
|
null,
|
|
479
546
|
);
|
|
@@ -490,6 +557,7 @@ export default class RtcEngine {
|
|
|
490
557
|
activeSpeakerCallBack(activeSpeakerUid);
|
|
491
558
|
this.activeSpeakerUid = activeSpeakerUid;
|
|
492
559
|
}
|
|
560
|
+
*/
|
|
493
561
|
});
|
|
494
562
|
|
|
495
563
|
// this.client.on('stream-fallback', (evt))
|
|
@@ -501,28 +569,38 @@ export default class RtcEngine {
|
|
|
501
569
|
'network-quality',
|
|
502
570
|
async ({downlinkNetworkQuality, uplinkNetworkQuality}) => {
|
|
503
571
|
const networkQualityIndicatorCallback = this.eventsMap.get(
|
|
504
|
-
'
|
|
572
|
+
'onNetworkQuality',
|
|
505
573
|
) as callbackType;
|
|
506
574
|
|
|
507
575
|
networkQualityIndicatorCallback(
|
|
576
|
+
{},
|
|
508
577
|
0,
|
|
509
|
-
downlinkNetworkQuality,
|
|
510
578
|
uplinkNetworkQuality,
|
|
579
|
+
downlinkNetworkQuality,
|
|
511
580
|
);
|
|
512
581
|
|
|
513
582
|
const remoteUserNetworkQualities =
|
|
514
583
|
this.client.getRemoteNetworkQuality();
|
|
515
584
|
|
|
516
|
-
Object.keys(remoteUserNetworkQualities).forEach(
|
|
585
|
+
Object.keys(remoteUserNetworkQualities).forEach(uid => {
|
|
517
586
|
networkQualityIndicatorCallback(
|
|
587
|
+
{},
|
|
518
588
|
uid,
|
|
519
|
-
remoteUserNetworkQualities[uid].downlinkNetworkQuality,
|
|
520
589
|
remoteUserNetworkQualities[uid].uplinkNetworkQuality,
|
|
590
|
+
remoteUserNetworkQualities[uid].downlinkNetworkQuality,
|
|
521
591
|
);
|
|
522
592
|
});
|
|
523
593
|
},
|
|
524
594
|
);
|
|
525
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
|
+
|
|
526
604
|
await this.client.join(
|
|
527
605
|
this.appId,
|
|
528
606
|
channelName,
|
|
@@ -535,6 +613,10 @@ export default class RtcEngine {
|
|
|
535
613
|
console.log('enabling screen sleep');
|
|
536
614
|
}
|
|
537
615
|
|
|
616
|
+
getUsersVolumeLevel() {
|
|
617
|
+
return this.usersVolumeLevel;
|
|
618
|
+
}
|
|
619
|
+
|
|
538
620
|
async leaveChannel(): Promise<void> {
|
|
539
621
|
this.client.leave();
|
|
540
622
|
this.remoteStreams.forEach((stream, uid, map) => {
|
|
@@ -550,17 +632,19 @@ export default class RtcEngine {
|
|
|
550
632
|
listener: RtcEngineEvents[EventType],
|
|
551
633
|
): Subscription {
|
|
552
634
|
if (
|
|
553
|
-
event === '
|
|
554
|
-
event === '
|
|
555
|
-
event === '
|
|
556
|
-
event === '
|
|
557
|
-
event === '
|
|
558
|
-
event === '
|
|
559
|
-
event === '
|
|
560
|
-
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'
|
|
561
644
|
) {
|
|
562
645
|
this.eventsMap.set(event, listener as callbackType);
|
|
563
646
|
}
|
|
647
|
+
|
|
564
648
|
return {
|
|
565
649
|
remove: () => {
|
|
566
650
|
console.log(
|
|
@@ -661,17 +745,21 @@ export default class RtcEngine {
|
|
|
661
745
|
return devices;
|
|
662
746
|
}
|
|
663
747
|
|
|
664
|
-
async setChannelProfile(profile:
|
|
748
|
+
async setChannelProfile(profile: ChannelProfileType): Promise<void> {
|
|
665
749
|
try {
|
|
666
750
|
this.client = AgoraRTC.createClient({
|
|
667
|
-
codec: '
|
|
751
|
+
codec: 'vp9',
|
|
668
752
|
mode:
|
|
669
|
-
profile ===
|
|
753
|
+
profile === ChannelProfileType.ChannelProfileLiveBroadcasting
|
|
754
|
+
? mode.live
|
|
755
|
+
: mode.rtc,
|
|
670
756
|
});
|
|
671
757
|
this.screenClient = AgoraRTC.createClient({
|
|
672
|
-
codec: '
|
|
758
|
+
codec: 'vp9',
|
|
673
759
|
mode:
|
|
674
|
-
profile ===
|
|
760
|
+
profile === ChannelProfileType.ChannelProfileLiveBroadcasting
|
|
761
|
+
? mode.live
|
|
762
|
+
: mode.rtc,
|
|
675
763
|
});
|
|
676
764
|
} catch (e) {
|
|
677
765
|
throw e;
|
|
@@ -679,11 +767,11 @@ export default class RtcEngine {
|
|
|
679
767
|
}
|
|
680
768
|
|
|
681
769
|
async setClientRole(
|
|
682
|
-
clientRole:
|
|
770
|
+
clientRole: ClientRoleType,
|
|
683
771
|
options?: ClientRoleOptions,
|
|
684
772
|
): Promise<void> {
|
|
685
773
|
try {
|
|
686
|
-
if (clientRole ==
|
|
774
|
+
if (clientRole == ClientRoleType.ClientRoleAudience) {
|
|
687
775
|
if (this.isJoined) {
|
|
688
776
|
// Unpublish the streams when role is changed to Audience
|
|
689
777
|
await this.client.unpublish();
|
|
@@ -693,7 +781,7 @@ export default class RtcEngine {
|
|
|
693
781
|
}
|
|
694
782
|
await this.client.setClientRole(role.audience, options);
|
|
695
783
|
await this.screenClient.setClientRole(role.audience, options);
|
|
696
|
-
} else if (clientRole ==
|
|
784
|
+
} else if (clientRole == ClientRoleType.ClientRoleBroadcaster) {
|
|
697
785
|
await this.client.setClientRole(role.host);
|
|
698
786
|
await this.screenClient.setClientRole(role.host);
|
|
699
787
|
}
|
|
@@ -772,7 +860,7 @@ export default class RtcEngine {
|
|
|
772
860
|
|
|
773
861
|
// Bug in implementation !!!
|
|
774
862
|
async setRemoteSubscribeFallbackOption(option: 0 | 1 | 2) {
|
|
775
|
-
this.streams.forEach(
|
|
863
|
+
this.streams.forEach(stream => {
|
|
776
864
|
this.client.setStreamFallbackOption(stream, option);
|
|
777
865
|
});
|
|
778
866
|
Promise.resolve();
|
|
@@ -797,6 +885,17 @@ export default class RtcEngine {
|
|
|
797
885
|
break;
|
|
798
886
|
case RnEncryptionEnum.SM4128ECB:
|
|
799
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
|
+
|
|
800
899
|
default:
|
|
801
900
|
mode = 'none';
|
|
802
901
|
}
|
|
@@ -811,14 +910,25 @@ export default class RtcEngine {
|
|
|
811
910
|
config: {
|
|
812
911
|
encryptionMode: RnEncryptionEnum;
|
|
813
912
|
encryptionKey: string;
|
|
913
|
+
encryptionKdfSalt: string;
|
|
814
914
|
},
|
|
815
915
|
): Promise<void> {
|
|
816
916
|
let mode: EncryptionMode;
|
|
817
917
|
mode = this.getEncryptionMode(enabled, config?.encryptionMode);
|
|
818
918
|
try {
|
|
819
919
|
await Promise.all([
|
|
820
|
-
this.client.setEncryptionConfig(
|
|
821
|
-
|
|
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
|
+
),
|
|
822
932
|
]);
|
|
823
933
|
} catch (e) {
|
|
824
934
|
throw e;
|
|
@@ -845,13 +955,18 @@ export default class RtcEngine {
|
|
|
845
955
|
console.error('Please use enableEncryption instead');
|
|
846
956
|
}
|
|
847
957
|
|
|
848
|
-
async
|
|
958
|
+
// async removeAllListeners<EventType extends keyof RtcEngineEvents>(event: EventType) {
|
|
959
|
+
// this.client.removeAllListeners(eventName);
|
|
960
|
+
// }
|
|
961
|
+
|
|
962
|
+
async release(): Promise<void> {
|
|
849
963
|
if (this.inScreenshare) {
|
|
850
|
-
(this.eventsMap.get('
|
|
964
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
965
|
+
{},
|
|
851
966
|
this.screenClient.uid,
|
|
852
967
|
);
|
|
853
968
|
this.screenClient.leave();
|
|
854
|
-
(this.eventsMap.get('
|
|
969
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
855
970
|
}
|
|
856
971
|
this.eventsMap.forEach((callback, event, map) => {
|
|
857
972
|
this.client.off(event, callback);
|
|
@@ -902,6 +1017,7 @@ export default class RtcEngine {
|
|
|
902
1017
|
encryption: {
|
|
903
1018
|
screenKey: string;
|
|
904
1019
|
mode: RnEncryptionEnum;
|
|
1020
|
+
salt: string;
|
|
905
1021
|
},
|
|
906
1022
|
config: ScreenVideoTrackInitConfig = {},
|
|
907
1023
|
audio: 'enable' | 'disable' | 'auto' = 'auto',
|
|
@@ -922,6 +1038,8 @@ export default class RtcEngine {
|
|
|
922
1038
|
await this.screenClient.setEncryptionConfig(
|
|
923
1039
|
mode,
|
|
924
1040
|
encryption.screenKey,
|
|
1041
|
+
encryption.salt,
|
|
1042
|
+
true, // encryptDataStream
|
|
925
1043
|
);
|
|
926
1044
|
} catch (e) {
|
|
927
1045
|
console.log('e: Encryption for screenshare failed', e);
|
|
@@ -958,7 +1076,8 @@ export default class RtcEngine {
|
|
|
958
1076
|
);
|
|
959
1077
|
|
|
960
1078
|
this.screenStream.video.on('track-ended', () => {
|
|
961
|
-
(this.eventsMap.get('
|
|
1079
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
1080
|
+
{},
|
|
962
1081
|
this.screenClient.uid,
|
|
963
1082
|
);
|
|
964
1083
|
|
|
@@ -968,15 +1087,16 @@ export default class RtcEngine {
|
|
|
968
1087
|
this.screenStream.video?.close();
|
|
969
1088
|
this.screenStream = {};
|
|
970
1089
|
|
|
971
|
-
(this.eventsMap.get('
|
|
1090
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
972
1091
|
this.inScreenshare = false;
|
|
973
1092
|
});
|
|
974
1093
|
} else {
|
|
975
|
-
(this.eventsMap.get('
|
|
1094
|
+
(this.eventsMap.get('onUserOffline') as callbackType)(
|
|
1095
|
+
{},
|
|
976
1096
|
this.screenClient.uid,
|
|
977
1097
|
);
|
|
978
1098
|
this.screenClient.leave();
|
|
979
|
-
(this.eventsMap.get('
|
|
1099
|
+
(this.eventsMap.get('onScreenshareStopped') as callbackType)();
|
|
980
1100
|
try {
|
|
981
1101
|
this.screenStream.audio?.close();
|
|
982
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;
|
|
@@ -9,11 +9,26 @@
|
|
|
9
9
|
information visit https://appbuilder.agora.io.
|
|
10
10
|
*********************************************
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Adaptive,
|
|
12
|
+
|
|
13
|
+
export interface RtcEngineContext {
|
|
14
|
+
appId?: string;
|
|
16
15
|
}
|
|
16
|
+
|
|
17
|
+
export enum RenderModeType {
|
|
18
|
+
/**
|
|
19
|
+
* 1: Hidden mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). One dimension of the video may have clipped contents.
|
|
20
|
+
*/
|
|
21
|
+
RenderModeHidden = 1,
|
|
22
|
+
/**
|
|
23
|
+
* 2: Fit mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to disparity in the aspect ratio are filled with black.
|
|
24
|
+
*/
|
|
25
|
+
RenderModeFit = 2,
|
|
26
|
+
/**
|
|
27
|
+
* @ignore
|
|
28
|
+
*/
|
|
29
|
+
RenderModeAdaptive = 3,
|
|
30
|
+
}
|
|
31
|
+
|
|
17
32
|
export enum VideoMirrorMode {
|
|
18
33
|
/**
|
|
19
34
|
* 0: (Default) The SDK determines the mirror mode.
|
|
@@ -26,7 +41,7 @@ export enum VideoMirrorMode {
|
|
|
26
41
|
/**
|
|
27
42
|
* 2: Disables mirror mode.
|
|
28
43
|
*/
|
|
29
|
-
Disabled = 2
|
|
44
|
+
Disabled = 2,
|
|
30
45
|
}
|
|
31
46
|
/**
|
|
32
47
|
*
|