@tencentcloud/sdk-mcp 1.3.8 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/android-faq.md} +75 -308
- package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +2 -2
- package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/flutter-faq.md} +83 -315
- package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/ios-faq.md} +76 -313
- package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +78 -311
- package/resource/doc/callkit/preset/android/api.md +330 -0
- package/resource/doc/callkit/preset/android/integration.md +530 -0
- package/resource/doc/callkit/preset/flutter/api.md +401 -0
- package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +53 -273
- package/resource/doc/callkit/preset/ios/api.md +282 -0
- package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +39 -120
- package/resource/doc/callkit/preset/react/api.md +600 -0
- package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +6 -6
- package/resource/doc/callkit/preset/vue/api.md +600 -0
- package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +5 -5
- package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -37
- package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
- package/resource/doc/chatkit/android/integration.md +498 -0
- package/resource/doc/chatkit/faq/android_sdk/client-api.md +280 -0
- package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +4 -17
- package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -2
- package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +183 -0
- package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
- package/resource/doc/chatkit/faq/ios_sdk/client-api.md +279 -0
- package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +1 -1
- package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +4 -4
- package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
- package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +20 -95
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -37
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +78 -280
- package/resource/doc/{chatuikit/vue → chatkit/react}/components/avatar.md +0 -1
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +7 -12
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +10 -17
- package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +1 -1
- package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -1
- package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +122 -703
- package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
- package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
- package/resource/doc/chatkit/react/components/conversation-preview.md +116 -0
- package/resource/doc/chatkit/react/components/conversation-search.md +57 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -186
- package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +21 -113
- package/resource/doc/chatkit/react/components/search.md +282 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +5 -26
- package/resource/doc/{chatuikit → chatkit}/react/integration.md +37 -104
- package/resource/doc/{chatuikit/react → chatkit/vue}/components/avatar.md +0 -1
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -13
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +13 -18
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +1 -2
- package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -1
- package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
- package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -316
- package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
- package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +1 -23
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -134
- package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
- package/resource/doc/chatkit/vue/components/tuikit.md +45 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +4 -4
- package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
- package/resource/doc/{chatuikit → chatkit}/vue/integration.md +53 -121
- package/resource/doc/livekit/core-sdk/live/android/api-reference/AudioEffectStore.md +283 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +148 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +316 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/CameraView.md +57 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +419 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +325 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +436 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +165 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LikeStore.md +49 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +239 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +74 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +417 -0
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +207 -0
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +17 -88
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +26 -139
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +16 -99
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +54 -161
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +91 -338
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +108 -492
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +27 -165
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/AudioEffectStore.md +279 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +158 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BaseBeautyStore.md +155 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +304 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +394 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +303 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +410 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +160 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LikeStore.md +51 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +231 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveCoreView.md +143 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +375 -0
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +170 -0
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +13 -91
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -177
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +18 -102
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -164
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -161
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +66 -460
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
- package/resource/doc/livekit/core-sdk/live/flutter/live-integration.md +687 -0
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +22 -161
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/AudioEffectStore.md +287 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +165 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +143 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +298 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +349 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +297 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +471 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +179 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LikeStore.md +49 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +238 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +74 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +412 -0
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +173 -0
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +23 -96
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +33 -195
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +35 -150
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +20 -105
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +35 -140
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +77 -457
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +70 -317
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +90 -473
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +28 -163
- package/resource/doc/livekit/core-sdk/voice/android/voice-audience-list.md +264 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-audio-effect.md +226 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-barrage.md +456 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +539 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-gift.md +453 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-host-interaction.md +516 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-integration.md +509 -0
- package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +365 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-audience-list.md +259 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-audio-effect.md +596 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-barrage.md +494 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +516 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-gift.md +418 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-integration.md +563 -0
- package/resource/doc/livekit/core-sdk/voice/flutter/voice-room-list.md +709 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-audience-list.md +262 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-audio-effect.md +211 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-barrage.md +414 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +492 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-gift.md +405 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-host-interaction.md +611 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-integration.md +478 -0
- package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +336 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audience-list.md +234 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +218 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-barrage.md +376 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +648 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-gift.md +362 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-integration.md +323 -0
- package/resource/doc/livekit/core-sdk/voice/uni-app/voice-room-list.md +470 -0
- package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -3
- package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
- package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
- package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +9 -48
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +27 -145
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +13 -76
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +33 -224
- package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +211 -0
- package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
- package/resource/doc/livekit/preset/live/vue/live-list-integration.md +244 -0
- package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +301 -0
- package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +307 -0
- package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +754 -0
- package/resource/doc/roomkit/android/features/call-user-to-room.md +234 -0
- package/resource/doc/roomkit/android/features/room-participant-state.md +850 -0
- package/resource/doc/roomkit/android/features/room-state.md +358 -0
- package/resource/doc/roomkit/android/features/schedule-room.md +336 -0
- package/resource/doc/roomkit/android/integration.md +433 -0
- package/resource/doc/roomkit/{common/error_code.md → faq/common/error-code.md} +1 -1
- package/resource/doc/roomkit/flutter/features/call-user-to-room.md +228 -0
- package/resource/doc/roomkit/flutter/features/room-participant-state.md +796 -0
- package/resource/doc/roomkit/flutter/features/room-state.md +324 -0
- package/resource/doc/roomkit/flutter/features/schedule-room.md +324 -0
- package/resource/doc/roomkit/flutter/integration.md +405 -0
- package/resource/doc/roomkit/ios/features/call-user-to-room.md +226 -0
- package/resource/doc/roomkit/ios/features/room-participant-state.md +821 -0
- package/resource/doc/roomkit/ios/features/room-state.md +320 -0
- package/resource/doc/roomkit/ios/features/schedule-room.md +318 -0
- package/resource/doc/roomkit/ios/integration.md +384 -0
- package/resource/doc/roomkit/vue/faq.md +1 -0
- package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
- package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
- package/resource/doc/roomkit/vue/features/device-state.md +24 -44
- package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
- package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
- package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
- package/resource/doc/roomkit/vue/features/room-state.md +25 -36
- package/resource/doc/roomkit/vue/features/room-view.md +30 -127
- package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
- package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
- package/resource/doc/roomkit/vue/features/virtual-background.md +13 -34
- package/resource/doc/roomkit/vue/integration.md +118 -282
- package/resource/doc/rtcengine/faq/common/userSig.md +17 -141
- package/resource/doc/rtcengine/faq/web/web.md +15 -22
- package/resource/doc/rtcengine/web/api.md +17 -21
- package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +4 -10
- package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +4 -8
- package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +3 -3
- package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -3
- package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +6 -6
- package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +2 -2
- package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +2 -4
- package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +1 -2
- package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +2 -6
- package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +13 -14
- package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +10 -90
- package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -8
- package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +31 -35
- package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +0 -2
- package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +7 -49
- package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -1
- package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -3
- package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +20 -20
- package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
- package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -4
- package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
- package/resource/doc/trtc/C++/ITRTCCloud.md +718 -2847
- package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
- package/resource/doc/trtc/C++/ITXAudioEffectManager.md +207 -1041
- package/resource/doc/trtc/C++/ITXDeviceManager.md +127 -768
- package/resource/doc/trtc/C++/TRTCCloudCallback.md +634 -2259
- package/resource/doc/trtc/C++/TRTCTypeDef.md +726 -3465
- package/resource/doc/trtc/C++/TXLiteAVCode.md +117 -916
- package/resource/doc/trtc/android/TRTCCloud.md +638 -2612
- package/resource/doc/trtc/android/TRTCCloudDef.md +769 -3697
- package/resource/doc/trtc/android/TRTCCloudListener.md +609 -2070
- package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/android/TXAudioEffectManager.md +207 -1049
- package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
- package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
- package/resource/doc/trtc/android/TXLiteAVCode.md +115 -900
- package/resource/doc/trtc/iOS/TRTCCloud.md +726 -2930
- package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +580 -2099
- package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/iOS/TXAudioEffectManager.md +179 -896
- package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
- package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
- package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
- package/resource/doc/trtc/iOS/TXLiveSDKTypeDef.md +747 -3559
- package/server.js +1 -5
- package/server.js.map +1 -1
- package/tools/call/get_callkit_api.js +32 -0
- package/tools/call/get_callkit_api.js.map +1 -0
- package/tools/call/get_native_call_uikit_integration.js +34 -0
- package/tools/call/get_native_call_uikit_integration.js.map +1 -0
- package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
- package/tools/call/get_web_call_uikit_integration.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_integration.js +45 -0
- package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_integration.js +45 -0
- package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
- package/tools/common/get_faq.js +265 -0
- package/tools/common/get_faq.js.map +1 -0
- package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
- package/tools/common/get_usersig.js.map +1 -0
- package/tools/common/present_framework_choice.js +63 -0
- package/tools/common/present_framework_choice.js.map +1 -0
- package/tools/definitions/get_callkit_api_def.js +28 -0
- package/tools/definitions/get_callkit_api_def.js.map +1 -0
- package/tools/definitions/get_faq_def.js +18 -19
- package/tools/definitions/get_faq_def.js.map +1 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js +15 -18
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -19
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_livekit_core_features_def.js +33 -0
- package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js +33 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
- package/tools/definitions/get_usersig_def.js +17 -24
- package/tools/definitions/get_usersig_def.js.map +1 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
- package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
- package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js +13 -18
- package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_livekit_api_def.js +27 -0
- package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js +29 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
- package/tools/definitions/get_web_room_uikit_integration_def.js +13 -30
- package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_roomkit_feature_detail_def.js +30 -0
- package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js +25 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js +25 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js +25 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
- package/tools/definitions/present_framework_choice_def.js +23 -12
- package/tools/definitions/present_framework_choice_def.js.map +1 -1
- package/tools/index.js +47 -59
- package/tools/index.js.map +1 -1
- package/tools/live/get_native_livekit_core_features.js +65 -0
- package/tools/live/get_native_livekit_core_features.js.map +1 -0
- package/tools/live/get_native_livekit_core_integration.js +59 -0
- package/tools/live/get_native_livekit_core_integration.js.map +1 -0
- package/tools/live/get_web_live_uikit_integration.js +48 -0
- package/tools/live/get_web_live_uikit_integration.js.map +1 -0
- package/tools/live/get_web_livekit_api.js +32 -0
- package/tools/live/get_web_livekit_api.js.map +1 -0
- package/tools/live/get_web_livekit_component_detail.js +34 -0
- package/tools/live/get_web_livekit_component_detail.js.map +1 -0
- package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
- package/tools/room/get_web_room_uikit_integration.js.map +1 -0
- package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
- package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
- package/utils/generate-structured-result.js +61 -17
- package/utils/generate-structured-result.js.map +1 -1
- package/utils/report-cls-client.js +12 -1
- package/utils/report-cls-client.js.map +1 -1
- package/utils/report-es-client.js +1 -1
- package/resource/doc/chatuikit/android/integration.md +0 -612
- package/resource/doc/chatuikit/android/workflow.md +0 -0
- package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1376
- package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -860
- package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1371
- package/resource/doc/chatuikit/flutter/workflow.md +0 -816
- package/resource/doc/chatuikit/iOS/workflow.md +0 -0
- package/resource/doc/chatuikit/react/components/conversation-list.md +0 -765
- package/resource/doc/chatuikit/react/components/search.md +0 -885
- package/resource/doc/chatuikit/react/create-group.md +0 -22
- package/resource/doc/chatuikit/react/init.md +0 -25
- package/resource/doc/chatuikit/react/workflow.md +0 -254
- package/resource/doc/chatuikit/uniapp-app/faq.md +0 -0
- package/resource/doc/chatuikit/uniapp-app/integration.md +0 -619
- package/resource/doc/chatuikit/uniapp-app/workflow.md +0 -576
- package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
- package/resource/doc/chatuikit/vue/components/tuikit.md +0 -110
- package/resource/doc/chatuikit/vue/create-group.md +0 -26
- package/resource/doc/chatuikit/vue/init.md +0 -35
- package/resource/doc/chatuikit/vue/workflow.md +0 -395
- package/resource/doc/livekit/live/android/workflow.md +0 -322
- package/resource/doc/livekit/live/flutter/live-integration.md +0 -1029
- package/resource/doc/livekit/live/flutter/workflow.md +0 -353
- package/resource/doc/livekit/live/ios/workflow.md +0 -352
- package/resource/doc/livekit/live/vue/components/barrage.md +0 -615
- package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -442
- package/resource/doc/livekit/live/vue/faq.md +0 -0
- package/resource/doc/livekit/live/vue/live-list-integration.md +0 -195
- package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -293
- package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -381
- package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -598
- package/resource/doc/livekit/live/vue/states/live-state.md +0 -2656
- package/resource/doc/livekit/live/vue/workflow.md +0 -219
- package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -334
- package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -434
- package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -685
- package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -712
- package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -284
- package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
- package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
- package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
- package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
- package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -879
- package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -668
- package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -456
- package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -332
- package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
- package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -328
- package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -505
- package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
- package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -676
- package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
- package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -820
- package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1065
- package/resource/doc/roomkit/vue/features/workflow.md +0 -553
- package/resource/doc/roomkit/vue/workflow.md +0 -487
- package/resource/doc/tuicallkit/android/integration.md +0 -302
- package/resource/doc/tuicallkit/android/workflow.md +0 -0
- package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -786
- package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -663
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -932
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -926
- package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -452
- package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -779
- package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -635
- package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
- package/resource/doc/tuicallkit/react/api.md +0 -1512
- package/resource/doc/tuicallkit/vue/api.md +0 -1512
- package/resource/doc/tuicallkit/vue/faq.md +0 -986
- package/tools/call/get-native-call-integration.js +0 -43
- package/tools/call/get-native-call-integration.js.map +0 -1
- package/tools/call/get-web-call-api.js +0 -27
- package/tools/call/get-web-call-api.js.map +0 -1
- package/tools/call/get-web-call-integration.js.map +0 -1
- package/tools/chat/get-native-chat-feature-detail.js +0 -30
- package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
- package/tools/chat/get-native-chat-integration.js +0 -45
- package/tools/chat/get-native-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-component-detail.js +0 -31
- package/tools/chat/get-web-chat-component-detail.js.map +0 -1
- package/tools/chat/get-web-chat-integration.js +0 -45
- package/tools/chat/get-web-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-uikit-init.js +0 -28
- package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
- package/tools/chat/get-web-create-group-doc.js +0 -28
- package/tools/chat/get-web-create-group-doc.js.map +0 -1
- package/tools/common/get-faq.js +0 -91
- package/tools/common/get-faq.js.map +0 -1
- package/tools/common/get-usersig.js.map +0 -1
- package/tools/common/present-framework-choice.js +0 -16
- package/tools/common/present-framework-choice.js.map +0 -1
- package/tools/common/record-prompt.js +0 -55
- package/tools/common/record-prompt.js.map +0 -1
- package/tools/common/record-result.js +0 -60
- package/tools/common/record-result.js.map +0 -1
- package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
- package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_native_live_api_def.js +0 -22
- package/tools/definitions/get_native_live_api_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -109
- package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +0 -50
- package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -115
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
- package/tools/definitions/get_trtc_native_api_def.js +0 -17
- package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
- package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
- package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
- package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
- package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
- package/tools/definitions/get_web_create_group_doc_def.js +0 -18
- package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
- package/tools/definitions/get_web_live_state_detail_def.js +0 -19
- package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
- package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
- package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_feature_detail_def.js +0 -95
- package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
- package/tools/definitions/record_prompt_def.js +0 -53
- package/tools/definitions/record_prompt_def.js.map +0 -1
- package/tools/definitions/record_result_def.js +0 -30
- package/tools/definitions/record_result_def.js.map +0 -1
- package/tools/live/get-native-live-uikit-integration.js +0 -101
- package/tools/live/get-native-live-uikit-integration.js.map +0 -1
- package/tools/live/get-web-live-component-detail.js +0 -31
- package/tools/live/get-web-live-component-detail.js.map +0 -1
- package/tools/live/get-web-live-state-detail.js +0 -31
- package/tools/live/get-web-live-state-detail.js.map +0 -1
- package/tools/live/get-web-live-uikit-integration.js +0 -52
- package/tools/live/get-web-live-uikit-integration.js.map +0 -1
- package/tools/live/get_native_live_uikit_extra_features.js +0 -105
- package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
- package/tools/live/get_native_live_uikit_interaction.js +0 -101
- package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
- package/tools/native_live/get-native-live-api.js +0 -31
- package/tools/native_live/get-native-live-api.js.map +0 -1
- package/tools/room/get-web-room-feature-detail.js.map +0 -1
- package/tools/room/get-web-room-integration.js.map +0 -1
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
- package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
- package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
- package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
- package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
- package/tools/trtc/get-trtc-native-api.js +0 -31
- package/tools/trtc/get-trtc-native-api.js.map +0 -1
- package/utils/handle-component-name.js +0 -33
- package/utils/handle-component-name.js.map +0 -1
- /package/resource/doc/{rtcengine/web → callkit/core-sdk}/.gitkeep +0 -0
- /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
`LiveAudienceStore` 是 `AtomicXCore` 中专门负责管理直播间观众信息的模块。通过 `LiveAudienceStore`,您可以为您的直播应用构建一套完整的观众列表及管理系统。
|
|
2
|
+
|
|
3
|
+
## 核心功能
|
|
4
|
+
- **实时观众列表**:获取并展示当前在直播间内的所有观众信息。
|
|
5
|
+
|
|
6
|
+
- **观众人数统计**:实时获取当前直播间的准确观众总数。
|
|
7
|
+
|
|
8
|
+
- **观众动态监听**:通过事件订阅,实时感知观众的加入和离开。
|
|
9
|
+
|
|
10
|
+
- **管理员权限**:主播可以将普通观众设为管理员,或撤销其管理员身份。
|
|
11
|
+
|
|
12
|
+
- **房间管理**:主播或管理员可以将任意普通观众请出(踢出)直播间。
|
|
13
|
+
|
|
14
|
+
## 核心概念
|
|
15
|
+
|
|
16
|
+
在开始集成之前,我们先通过下表了解一下 LiveAudienceStore 相关的几个核心概念:
|
|
17
|
+
| **核心概念** | **类型** | **核心职责与描述** |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `LiveUserInfo` | struct | 代表一个观众(用户)的基础信息模型。它包含了用户的唯一标识 (`userID`)、昵称 (`userName`) 和头像地址 (`avatarURL`)。 |
|
|
20
|
+
| `LiveAudienceState` | struct | 代表观众模块的当前状态。其核心属性 `audienceList` 是一个 `[LiveUserInfo] `数组,存储了观众列表的快照;`audienceCount` 则代表当前观众总数。 |
|
|
21
|
+
| `LiveAudienceEvent` | enum | 代表观众动态的实时事件。分为 `.onAudienceJoined`(观众加入) 和 `.onAudienceLeft`(观众离开)两种,用于实现对观众列表的增量更新。 |
|
|
22
|
+
| `LiveAudienceStore` | class | 这是与观众列表功能交互的核心管理类。通过它,您可以获取观众列表快照、执行管理操作,并通过订阅其 `liveAudienceEventPublisher` 来接收实时动态。 |
|
|
23
|
+
|
|
24
|
+
## 实现步骤
|
|
25
|
+
|
|
26
|
+
### 步骤1:组件集成
|
|
27
|
+
|
|
28
|
+
请参考 开始直播 集成 **AtomicXCore**,完成接入。
|
|
29
|
+
|
|
30
|
+
### 步骤2:初始化并获取观众列表
|
|
31
|
+
|
|
32
|
+
获取一个与当前直播间 liveId 绑定的 `LiveAudienceStore` 实例,并主动拉取一次当前的观众列表,用于首次展示。
|
|
33
|
+
``` swift
|
|
34
|
+
import Foundation
|
|
35
|
+
import AtomicXCore
|
|
36
|
+
import Combine
|
|
37
|
+
|
|
38
|
+
class AudienceManager {
|
|
39
|
+
private let liveId: String
|
|
40
|
+
private let audienceStore: LiveAudienceStore
|
|
41
|
+
private var cancellables = Set<AnyCancellable>()
|
|
42
|
+
|
|
43
|
+
// 对外暴露【全量】观众列表的发布者,方便UI层订阅
|
|
44
|
+
let audienceListPublisher = CurrentValueSubject<[LiveUserInfo], Never>([])
|
|
45
|
+
// 对外暴露观众总数的发布者
|
|
46
|
+
let audienceCountPublisher = PassthroughSubject<UInt, Never>()
|
|
47
|
+
|
|
48
|
+
init(liveId: String) {
|
|
49
|
+
self.liveId = liveId
|
|
50
|
+
// 1. 通过 liveId 获取 LiveAudienceStore 的实例
|
|
51
|
+
self.audienceStore = LiveAudienceStore.create(liveID: liveId)
|
|
52
|
+
|
|
53
|
+
// 2. 订阅状态和事件
|
|
54
|
+
subscribeToAudienceState()
|
|
55
|
+
subscribeToAudienceEvents()
|
|
56
|
+
|
|
57
|
+
// 3. 主动拉取首屏数据
|
|
58
|
+
fetchInitialAudienceList()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// 主动获取一次观众列表快照
|
|
62
|
+
func fetchInitialAudienceList() {
|
|
63
|
+
audienceStore.fetchAudienceList { [weak self] result in
|
|
64
|
+
switch result {
|
|
65
|
+
case .success:
|
|
66
|
+
print("首次拉取观众列表成功")
|
|
67
|
+
// 成功后,数据会通过下面的 state 订阅通道自动更新
|
|
68
|
+
case .failure(let error):
|
|
69
|
+
print("首次拉取观众列表失败: \(error.localizedDescription)")
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ... 后续代码
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 步骤3:监听观众列表状态与实时动态
|
|
79
|
+
|
|
80
|
+
订阅 `audienceStore` 的 `state` 和 `event`,以接收全量列表快照和实时的观众进出事件,从而驱动 UI 更新。
|
|
81
|
+
``` swift
|
|
82
|
+
extension AudienceManager {
|
|
83
|
+
/// 订阅 state,用于获取观众总数和列表快照
|
|
84
|
+
private func subscribeToAudienceState() {
|
|
85
|
+
audienceStore.state
|
|
86
|
+
.subscribe()
|
|
87
|
+
.receive(on: DispatchQueue.main)
|
|
88
|
+
.sink { [weak self] state in
|
|
89
|
+
// state.audienceList 是一个全量快照
|
|
90
|
+
self?.audienceListPublisher.send(state.audienceList)
|
|
91
|
+
// state.audienceCount 是实时总数
|
|
92
|
+
self?.audienceCountPublisher.send(state.audienceCount)
|
|
93
|
+
}
|
|
94
|
+
.store(in: &cancellables)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// 订阅 event,用于处理观众的实时进出
|
|
98
|
+
private func subscribeToAudienceEvents() {
|
|
99
|
+
audienceStore.liveAudienceEventPublisher
|
|
100
|
+
.receive(on: DispatchQueue.main)
|
|
101
|
+
.sink { [weak self] event in
|
|
102
|
+
guard let self = self else { return }
|
|
103
|
+
|
|
104
|
+
var currentList = self.audienceListPublisher.value
|
|
105
|
+
|
|
106
|
+
switch event {
|
|
107
|
+
case .onAudienceJoined(let newAudience):
|
|
108
|
+
print("观众 \(newAudience.userName) 加入了直播间")
|
|
109
|
+
// 增量更新:在当前列表末尾添加新观众
|
|
110
|
+
if !currentList.contains(where: { $0.userID == newAudience.userID }) {
|
|
111
|
+
currentList.append(newAudience)
|
|
112
|
+
self.audienceListPublisher.send(currentList)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
case .onAudienceLeft(let departedAudience):
|
|
116
|
+
print("观众 \(departedAudience.userName) 离开了直播间")
|
|
117
|
+
// 增量更新:从当前列表中移除离开的观众
|
|
118
|
+
currentList.removeAll { $0.userID == departedAudience.userID }
|
|
119
|
+
self.audienceListPublisher.send(currentList)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
.store(in: &cancellables)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 步骤4:管理观众(踢人与设置管理员)
|
|
128
|
+
|
|
129
|
+
作为主播或管理员,对直播间内的观众进行管理操作。
|
|
130
|
+
|
|
131
|
+
#### 4.1 将观众踢出直播间
|
|
132
|
+
|
|
133
|
+
调用 `kickUserOutOfRoom` 接口可以将指定用户请出直播间。
|
|
134
|
+
``` swift
|
|
135
|
+
extension AudienceManager {
|
|
136
|
+
func kick(userId: String) {
|
|
137
|
+
audienceStore.kickUserOutOfRoom(userId: userId) { result in
|
|
138
|
+
switch result {
|
|
139
|
+
case .success:
|
|
140
|
+
print("成功将用户 \(userId) 踢出房间")
|
|
141
|
+
// 踢出成功后,您会收到 onAudienceLeft 事件
|
|
142
|
+
case .failure(let error):
|
|
143
|
+
print("踢出用户 \(userId) 失败: \(error.localizedDescription)")
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### 4.2 设置/撤销管理员
|
|
151
|
+
|
|
152
|
+
通过 `setAdministrator` 和 `revokeAdministrator` 接口可以管理用户的管理员身份。
|
|
153
|
+
``` swift
|
|
154
|
+
extension AudienceManager {
|
|
155
|
+
/// 将用户设为管理员
|
|
156
|
+
func promoteToAdmin(userId: String) {
|
|
157
|
+
audienceStore.setAdministrator(userId: userId) { result in
|
|
158
|
+
if case .success = result {
|
|
159
|
+
print("成功将用户 \(userId) 设为管理员")
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/// 撤销用户的管理员身份
|
|
165
|
+
func revokeAdmin(userId: String) {
|
|
166
|
+
audienceStore.revokeAdministrator(userId: userId) { result in
|
|
167
|
+
if case .success = result {
|
|
168
|
+
print("成功撤销用户 \(userId) 的管理员身份")
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## 功能进阶
|
|
176
|
+
|
|
177
|
+
### 在弹幕区展示观众入场欢迎语
|
|
178
|
+
|
|
179
|
+
当有新观众进入直播间时,弹幕/聊天区域会在本地自动显示一条欢迎消息,例如:“欢迎 [用户昵称] 进入直播间”。
|
|
180
|
+
|
|
181
|
+
#### 实现方式
|
|
182
|
+
|
|
183
|
+
我们通过订阅 `LiveAudienceStore` 的观众加入事件(`LiveAudienceEvent.onAudienceJoined`)来获取新观众加入的实时通知。一旦事件触发,我们便提取出新观众的昵称信息,然后立即调用 `BarrageStore` 的本地插入接口 `appendLocalTip`。
|
|
184
|
+
``` swift
|
|
185
|
+
import Foundation
|
|
186
|
+
import AtomicXCore
|
|
187
|
+
import Combine
|
|
188
|
+
|
|
189
|
+
class LiveRoomManager {
|
|
190
|
+
private let liveId: String
|
|
191
|
+
private let audienceManager: AudienceManager
|
|
192
|
+
private let barrageManager: BarrageManager // 假设您已实现了弹幕文档中的BarrageManager
|
|
193
|
+
private var cancellables = Set<AnyCancellable>()
|
|
194
|
+
|
|
195
|
+
init(liveId: String) {
|
|
196
|
+
self.liveId = liveId
|
|
197
|
+
// 初始化两个核心管理器
|
|
198
|
+
self.audienceManager = AudienceManager(liveId: liveId)
|
|
199
|
+
self.barrageManager = BarrageManager(liveId: liveId)
|
|
200
|
+
|
|
201
|
+
// 设置联动
|
|
202
|
+
setupWelcomeMessageFlow()
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private func setupWelcomeMessageFlow() {
|
|
206
|
+
// 1. 获取 LiveAudienceStore 的实例
|
|
207
|
+
let audienceStore = LiveAudienceStore.create(liveID: self.liveId)
|
|
208
|
+
|
|
209
|
+
// 2. 获取 BarrageStore 的实例 (得益于内部机制,这会是同一个实例)
|
|
210
|
+
let barrageStore = BarrageStore.create(liveID: self.liveId)
|
|
211
|
+
|
|
212
|
+
// 3. 订阅观众事件
|
|
213
|
+
audienceStore.liveAudienceEventPublisher
|
|
214
|
+
.receive(on: DispatchQueue.main)
|
|
215
|
+
.sink { event in
|
|
216
|
+
// 4. 只处理观众加入事件
|
|
217
|
+
guard case .onAudienceJoined(let newAudience) = event else {
|
|
218
|
+
return
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// 5. 创建一条本地提示消息
|
|
222
|
+
var welcomeTip = Barrage()
|
|
223
|
+
welcomeTip.messageType = .text
|
|
224
|
+
welcomeTip.textContent = "欢迎 \(newAudience.userName) 进入直播间!"
|
|
225
|
+
|
|
226
|
+
// 6. 调用 BarrageStore 的接口将其插入弹幕列表
|
|
227
|
+
barrageStore.appendLocalTip(message: welcomeTip)
|
|
228
|
+
}
|
|
229
|
+
.store(in: &cancellables)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## API 文档
|
|
235
|
+
|
|
236
|
+
关于 [LiveAudienceStore](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/liveaudiencestore) 及其相关类的所有公开接口、属性和方法的详细信息,请参阅随 [AtomicXCore](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore) 框架的官方 API 文档。本文档使用到的相关 Store 如下:
|
|
237
|
+
| Store/Component | 功能描述 | API 文档 |
|
|
238
|
+
| --- | --- | --- |
|
|
239
|
+
| LiveCoreView | 直播视频流展示与交互的核心视图组件:负责视频流渲染和视图挂件处理,支持主播直播、观众连麦、主播连线等场景。 | [API 文档](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/livecoreview) |
|
|
240
|
+
| LiveAudienceStore | 观众管理:获取实时观众列表(ID / 名称 / 头像),统计观众数量,监听观众进出事件。 | [API 文档](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/liveaudiencestore) |
|
|
241
|
+
| BarrageStore | 弹幕功能:发送文本 / 自定义弹幕,维护弹幕列表,实时监听弹幕状态。 | [API 文档](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/barragestore) |
|
|
242
|
+
|
|
243
|
+
## 常见问题
|
|
244
|
+
|
|
245
|
+
### `LiveAudienceState` 中的在线人数(`audienceCount`)是如何更新的?时机和频率是怎样的?
|
|
246
|
+
|
|
247
|
+
`audienceCount` 的更新并非总是实时的,其机制如下:
|
|
248
|
+
- **主动进出房间**:当用户主动加入或正常退出直播间时,在线人数的变更通知会即时触发。您会很快在 `LiveAudienceState` 中观察到 `audienceCount` 的变化。
|
|
249
|
+
|
|
250
|
+
- **异常掉线**:当用户因网络问题、应用崩溃等原因异常掉线时,系统需要通过心跳机制来判断其真实状态。只有当该用户连续 90 秒没有心跳后,系统才会判定其为离线,并触发人数变更通知。
|
|
251
|
+
|
|
252
|
+
- **更新机制与频率控制:**
|
|
253
|
+
|
|
254
|
+
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
255
|
+
|
|
256
|
+
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
257
|
+
|
|
258
|
+
- **关键点:**在“弹幕风暴”或礼物刷屏等消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
|
|
259
|
+
|
|
260
|
+
**这对开发者意味着什么?**
|
|
261
|
+
|
|
262
|
+
`audienceCount` 是一个非常接近实时的**高精度估算值**,但在极端高并发场景下,它可能存在短暂的延迟或数据丢失。因此,我们建议您将其用于 **UI 展示**,而不应作为计费、统计等需要绝对精准场景的唯一依据。
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
本篇文档旨在指导您如何使用 `AtomicXCore` 框架中的 `AudioEffectStore` 和 `DeviceStore` 模块,为您的直播应用快速集成音效控制功能,包括麦克风音量、耳返监听,并添加多种趣味变声效果和混响效果。
|
|
2
|
+
|
|
3
|
+
## 核心功能
|
|
4
|
+
|
|
5
|
+
通过组合 `AudioEffectStore` 和 `DeviceStore`,您将能实现以下核心功能:
|
|
6
|
+
- **人声音量调节**:控制本地音频上行的采集音量大小,即观众听到的您的声音大小。
|
|
7
|
+
|
|
8
|
+
- **耳返功能**:允许主播或连麦用户通过耳机实时听到自己的声音,用于监听和矫正发音。
|
|
9
|
+
|
|
10
|
+
- **变声效果**:提供多种趣味变声选项,例如萝莉、大叔、熊孩子等。
|
|
11
|
+
|
|
12
|
+
- **混响效果**:模拟不同环境的声场效果,例如 KTV、金属声、低沉、洪亮等。
|
|
13
|
+
|
|
14
|
+
## 概念说明
|
|
15
|
+
| **核心概念** | **类型** | **核心职责与描述** |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `AudioChangerType` | `enum` | 变声效果枚举,例如,“小孩”,“男人”等。 |
|
|
18
|
+
| `AudioReverbType` | `enum` | 混响效果枚举,例如,“ktv”,“礼堂”等。 |
|
|
19
|
+
| `AudioEffectState` | `struct` | 代表音效模块的当前状态,通常用于 UI 渲染。包括变声状态、混响状态、耳返开启状态、耳返音量。 |
|
|
20
|
+
| `AudioEffectStore` | `class` | 代表音效模块**单例数据管理类**。通过它您可以调用修改音效接口,当您调用接口后,相应的`state`属性会自动更新,可以通过订阅这个 state 响应式数据来接收和监听状态更新。 |
|
|
21
|
+
| `DeviceState` | `struct` | 代表设备模块的当前状态,通常用于 UI 渲染。核心属性包括摄像头、麦克风的设备状态。 |
|
|
22
|
+
| `DeviceStore` | `class` | 代表设备模块**单例数据管理类**。通过它您可以调用操作摄像头、麦克风接口,当您调用接口后,相应的`state`属性会自动更新,可以通过订阅这个 state 响应式数据来接收和监听状态更新。 |
|
|
23
|
+
|
|
24
|
+
## 实现步骤
|
|
25
|
+
|
|
26
|
+
### 步骤1:组件集成
|
|
27
|
+
|
|
28
|
+
请参考 快速接入 集成 **AtomicXCore。**
|
|
29
|
+
|
|
30
|
+
### 步骤2:获取 Store 实例
|
|
31
|
+
|
|
32
|
+
`AudioEffectStore` 和 `DeviceStore`是单例对象,您可以直接通过 shared 属性在项目的任何位置获取实例。您也可以参考 TUILiveKit 开源 UI Demo 项目中的 [AudioEffectView.swift](https://github.com/Tencent-RTC/TUIKit_iOS/blob/main/live/Sources/Component/AudioEffect/AudioEffectView.swift) 文件来了解完整的实现逻辑。
|
|
33
|
+
``` swift
|
|
34
|
+
import UIKit
|
|
35
|
+
import AtomicXCore
|
|
36
|
+
import Combine
|
|
37
|
+
|
|
38
|
+
let audioEffectStore = AudioEffectStore.shared
|
|
39
|
+
let deviceStore = DeviceStore.shared
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 步骤3:实现耳返功能
|
|
43
|
+
|
|
44
|
+
耳返功能允许用户实时监听自己的麦克风声音,可以通过调用本节介绍的接口管理耳返功能。
|
|
45
|
+
|
|
46
|
+
> **注意:**
|
|
47
|
+
>
|
|
48
|
+
|
|
49
|
+
> 耳返功能通常需要连接耳机才能正常工作。
|
|
50
|
+
>
|
|
51
|
+
|
|
52
|
+
#### 实现方式:
|
|
53
|
+
1. **开关耳返**:您可以使用`UISwitch`控件实现开关耳返功能。
|
|
54
|
+
|
|
55
|
+
2. **设置耳返音量值**:您可以使用 `UISlider` 控件实现左右拖动滑块来调节音量的功能,并将 `UISlider` 的值映射成音量值,调用`setOutputVolume(_ volume:)。`请注意,该接口接收的参数范围是 `[0, 150]`,所以您需要将 UI 控件的值(例如 UISlider 的 `0 - 1.0`)映射到 `0 - 150` 的范围。
|
|
56
|
+
|
|
57
|
+
3. **监听状态更新UI**:您可以订阅实时的耳返状态值更新UI。
|
|
58
|
+
|
|
59
|
+
#### 代码示例:
|
|
60
|
+
``` swift
|
|
61
|
+
// 1. 开启耳返
|
|
62
|
+
audioEffectStore.setVoiceEarMonitorEnable(enable: true)
|
|
63
|
+
|
|
64
|
+
// 2. 调节耳返音量
|
|
65
|
+
audioEffectStore.setVoiceEarMonitorVolume(volume: 80)
|
|
66
|
+
|
|
67
|
+
// 3. 关闭耳返
|
|
68
|
+
audioEffectStore.setVoiceEarMonitorEnable(enable: false)
|
|
69
|
+
|
|
70
|
+
// 4. 监听状态
|
|
71
|
+
audioEffectStore.state
|
|
72
|
+
.subscribe(StatePublisherSelector(keyPath: \AudioEffectState.earMonitorVolume))
|
|
73
|
+
.removeDuplicates()
|
|
74
|
+
.sink { currentVolume in
|
|
75
|
+
print("耳返音量: \(currentVolume)")
|
|
76
|
+
valueLabel.text = "\(currentVolume)" //更新UILabel显示数值
|
|
77
|
+
}
|
|
78
|
+
.store(in: &cancellables)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### setVoiceEarMonitorEnable 接口参数
|
|
82
|
+
| **参数名** | **类型** | **描述** |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| `enable` | `Bool` | 是否开启耳返。<br>- true:开启<br>- false:关闭 |
|
|
85
|
+
|
|
86
|
+
#### setVoiceEarMonitorVolume 接口参数
|
|
87
|
+
| **参数名** | **类型** | **描述** |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
| `volume` | `Int` | 耳返音量大小。<br>- 取值范围: [0, 150]<br>- 默认值:100 |
|
|
90
|
+
|
|
91
|
+
### 步骤4:实现人声音量调节
|
|
92
|
+
|
|
93
|
+
当主播希望调节自己的上行采集音量大小时,调用`DeviceStore`的`setCaptureVolume(volume: )`方法传入音量值即可。
|
|
94
|
+
|
|
95
|
+
#### 实现方式:
|
|
96
|
+
1. **设置采集音量值**:您可以使用 `UISlider` 控件实现左右拖动滑块来调节音量的功能,并将 `UISlider` 的值映射成音量值后调用`setCaptureVolume(volume: 80)。`请注意,该接口接收的参数范围是 `[0, 150]`,所以您需要将 UI 控件的值(例如 UISlider 的 `0 - 1.0`)映射到 `0 - 150` 的范围。
|
|
97
|
+
|
|
98
|
+
2. **监听状态更新 UI**:您可以订阅实时的音量状态值更新 UI。
|
|
99
|
+
|
|
100
|
+
#### 示例代码:
|
|
101
|
+
``` swift
|
|
102
|
+
// 1. 调节音量
|
|
103
|
+
deviceStore.setCaptureVolume(volume: 80)
|
|
104
|
+
|
|
105
|
+
// 2. 监听状态
|
|
106
|
+
deviceStore.state
|
|
107
|
+
.subscribe(StatePublisherSelector(keyPath: \DeviceState.captureVolume))
|
|
108
|
+
.removeDuplicates()
|
|
109
|
+
.sink { captureVolume in
|
|
110
|
+
print("采集音量: \(captureVolume)")
|
|
111
|
+
valueLabel.text = "\(captureVolume)" //更新UILabel显示数值
|
|
112
|
+
}
|
|
113
|
+
.store(in: &cancellables)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### setCaptureVolume 接口参数
|
|
117
|
+
| **参数名** | **类型** | **描述** |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| `volume` | `Int` | 采集音量大小。<br>- 取值范围: [0, 150]<br>- 默认值:100 |
|
|
120
|
+
|
|
121
|
+
### 步骤5:实现变声效果
|
|
122
|
+
|
|
123
|
+
当主播希望改变自己的声音时,您可以调用 `setAudioChangerType(type:)`方法,传入相应的Type 枚举值即可切换效果。
|
|
124
|
+
|
|
125
|
+
#### 示例代码:
|
|
126
|
+
``` swift
|
|
127
|
+
// 示例:将变声效果设置为“小孩”
|
|
128
|
+
audioEffectStore.setAudioChangerType(type: .child)
|
|
129
|
+
// 示例:关闭变声效果
|
|
130
|
+
audioEffectStore.setAudioChangerType(type: .none)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### setAudioChangerType 接口参数
|
|
134
|
+
| **参数名** | **类型** | **描述** |
|
|
135
|
+
| --- | --- | --- |
|
|
136
|
+
| `type` | `AudioChangerType` | 变声效果枚举。 |
|
|
137
|
+
|
|
138
|
+
### 步骤6:实现混响效果
|
|
139
|
+
|
|
140
|
+
当主播希望给自己的声音添加混响效果时,您可以调用`setAudioReverbType(type:)` 方法,传入相应的Type 枚举值即可切换效果。
|
|
141
|
+
``` swift
|
|
142
|
+
// 示例:设置为“KTV”混响效果
|
|
143
|
+
audioEffectStore.setAudioReverbType(type: .ktv)
|
|
144
|
+
// 示例:关闭混响效果
|
|
145
|
+
audioEffectStore.setAudioReverbType(type: .none)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### setAudioReverbType 接口参数
|
|
149
|
+
| **参数名** | **类型** | **描述** |
|
|
150
|
+
| --- | --- | --- |
|
|
151
|
+
| `type` | `AudioReverbType` | 混响效果枚举。 |
|
|
152
|
+
|
|
153
|
+
### 步骤7:重置音效设置
|
|
154
|
+
|
|
155
|
+
> **重要:**
|
|
156
|
+
>
|
|
157
|
+
|
|
158
|
+
> AudioEffectStore和DeviceStore是单例,这意味着音效和设备设置是全局生效的,如果您在当前直播间的设置不想影响到您创建的其他直播间,就需要在当前直播间结束的时候重置音效和设备设置。
|
|
159
|
+
>
|
|
160
|
+
|
|
161
|
+
以下两种情况您可能需要重置音效设置:
|
|
162
|
+
1. 当前直播间结束时,需要重置音效设置。
|
|
163
|
+
|
|
164
|
+
2. 您需要提供“一键恢复”的功能,可以通过调用 store的`reset()` 方法实现。
|
|
165
|
+
|
|
166
|
+
``` swift
|
|
167
|
+
class YourMainViewController: UIViewController {
|
|
168
|
+
func reset() {
|
|
169
|
+
AudioEffectStore.shared.reset()
|
|
170
|
+
DeviceStore.shared.reset()
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## API 文档
|
|
176
|
+
|
|
177
|
+
关于 [AudioEffectStore](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/audioeffectstore) 和 [DeviceStore](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/devicestore) 及其相关类的所有公开接口、属性的详细信息,请参阅随 [AtomicXCore](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore) 框架的官方 API 文档。
|
|
178
|
+
| **Store/Component** | **功能描述** | **API 文档** |
|
|
179
|
+
| --- | --- | --- |
|
|
180
|
+
| AudioEffectStore | 音效管理:进行音效设置,并获取实时音效状态。 | [API 文档](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/audioeffectstore/) |
|
|
181
|
+
| DeviceStore | 设备管理:进行摄像头、麦克风操作,并获取实时设备状态。 | [API 文档](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/devicestore) |
|
|
182
|
+
|
|
183
|
+
## 常见问题
|
|
184
|
+
|
|
185
|
+
### 音效和设备接口的调用时机有没有要求?
|
|
186
|
+
|
|
187
|
+
没有限制。`AudioEffectStore`和`DeviceStore` 的设置是全局生效的,您可以在进入直播间之前或之后随时调用相关接口(例如设置变声、混响或耳返),设置会立即生效并被保留。
|
|
188
|
+
|
|
189
|
+
### **“人声音量” 和“耳返音量” 有什么区别?**
|
|
190
|
+
|
|
191
|
+
这是一个非常重要且易混淆的概念,区别如下:
|
|
192
|
+
- **人声音量 (CaptureVolume):**通过 `DeviceStore.setCaptureVolume()` 设置**。它决定了观众**能听到的您的声音大小。
|
|
193
|
+
|
|
194
|
+
- **耳返音量 (EarMonitorVolume):**通过 `AudioEffectStore.setVoiceEarMonitorVolume()`** 设置。它只**决定了**您自己**在耳机里听到的监听声音大小,**不会**影响观众。
|
|
195
|
+
|
|
196
|
+
### **新创建的直播间为什么直接就有音效、或者出现音量很大、很小等问题?**
|
|
197
|
+
|
|
198
|
+
`AudioEffectStore`和`DeviceStore`是单例,这意味着音效和设备设置是全局生效的,出现这种情况很可能是因为您之前设置过音效但是没有重置,需要在合适的地方调用`reset()`方法重置。
|
|
199
|
+
|
|
200
|
+
### **为什么我开启了“耳返”,但是听不到自己的声音?**
|
|
201
|
+
|
|
202
|
+
请您按照以下步骤检查:
|
|
203
|
+
1. **是否插入耳机**:耳返功能绝大多数情况下依赖耳机才能生效,请确保已连接有线或蓝牙耳机。
|
|
204
|
+
|
|
205
|
+
2. **音量是否为0**:检查“耳返音量”是否被设置为了 0。
|
|
206
|
+
|
|
207
|
+
3. **麦克风是否开启**:确认 `DeviceStore` 中的麦克风是开启状态(即已调用 `openLocalMicrophone`)。
|
|
208
|
+
|
|
209
|
+
### **变声效果 和混响效果 可以同时生效吗?**
|
|
210
|
+
|
|
211
|
+
可以。`AudioChangerType` 和 `AudioReverbType` 是可以叠加生效的。例如,您可以同时设置 `.littleGirl` 变声和 `.ktv` 混响。
|