@tencentcloud/sdk-mcp 1.6.3 → 1.6.5
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 +0 -4
- package/knowledge/build-index.js +1 -1
- package/knowledge/chunker.js +81 -52
- package/knowledge/path-meta.js +181 -21
- package/knowledge/search/exact-lookup.js +166 -0
- package/knowledge/search/filter-pool.js +73 -19
- package/knowledge/search/product-scope-intent.js +2 -2
- package/knowledge/search/requires-framework.js +1 -1
- package/knowledge/search/search-knowledge.js +234 -57
- package/package.json +1 -1
- package/resource/_schema/feature-aliases.yaml +1 -0
- package/resource/integration/callkit/preset/android/integration.md +3 -5
- package/resource/integration/callkit/preset/flutter/integration.md +2 -3
- package/resource/integration/callkit/preset/ios/integration.md +2 -5
- package/resource/integration/callkit/preset/react/integration.md +12 -26
- package/resource/integration/callkit/preset/vue/integration.md +17 -33
- package/resource/integration/chat/preset/android/integration.md +44 -14
- package/resource/integration/chat/preset/flutter/integration.md +54 -13
- package/resource/integration/chat/preset/ios/integration.md +42 -6
- package/resource/integration/chat/preset/react/integration.md +30 -28
- package/resource/integration/chat/preset/uni-app/integration.md +101 -40
- package/resource/integration/chat/preset/vue/integration.md +62 -28
- package/resource/integration/livekit/preset/live/android/live-audience-integration.md +133 -0
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +225 -0
- package/resource/integration/livekit/preset/live/android/live-list-integration.md +278 -0
- package/resource/integration/livekit/preset/live/android/prepare-integration.md +271 -0
- package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +207 -0
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +358 -0
- package/resource/integration/livekit/preset/live/ios/live-list-integration.md +246 -0
- package/resource/integration/livekit/preset/live/ios/prepare-integration.md +218 -0
- package/resource/integration/livekit/preset/live/vue/live-list-integration.md +4 -7
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +5 -12
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +4 -11
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +250 -482
- package/resource/integration/roomkit/preset/vue/integration.md +399 -106
- package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +80 -0
- package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +20 -0
- package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +116 -0
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +11 -15
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +10 -13
- package/resource/knowledge/callkit/core-sdk/android/offline-push.md +2 -4
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +10 -17
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +11 -17
- package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +11 -20
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +10 -15
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +9 -14
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +12 -18
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +390 -0
- package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +317 -0
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +16 -22
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +17 -23
- package/resource/knowledge/callkit/core-sdk/web/call-engine.md +39 -0
- package/resource/knowledge/callkit/core-sdk/web/call-event.md +341 -0
- package/resource/knowledge/callkit/core-sdk/web/callengine-api-overview.md +39 -0
- package/resource/knowledge/callkit/faq/android.md +1 -5
- package/resource/knowledge/callkit/faq/common.md +10 -12
- package/resource/knowledge/callkit/faq/ios.md +5 -7
- package/resource/knowledge/callkit/faq/uniapp-app.md +7 -7
- package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +9 -12
- package/resource/knowledge/callkit/faq/web.md +2 -12
- package/resource/knowledge/callkit/preset/android/api.md +5 -8
- package/resource/knowledge/callkit/preset/ios/api.md +4 -6
- package/resource/knowledge/callkit/preset/miniprogram/api.md +295 -0
- package/resource/knowledge/callkit/preset/react/api.md +622 -0
- package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +475 -0
- package/resource/knowledge/callkit/preset/vue/api.md +622 -0
- package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +587 -0
- package/resource/knowledge/callkit/preset/web/api.md +1 -1
- package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +16 -0
- package/resource/knowledge/chat/preset/android/features/chat-setting.md +1 -1
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +0 -1
- package/resource/knowledge/chat/preset/android/features/language.md +2 -4
- package/resource/knowledge/chat/preset/android/features/message-input.md +1 -1
- package/resource/knowledge/chat/preset/android/features/message-list.md +1 -2
- package/resource/knowledge/chat/preset/android/features/search.md +0 -1
- package/resource/knowledge/chat/preset/android/features/theme.md +1 -1
- package/resource/knowledge/chat/preset/android-view/integration.md +35 -10
- package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +0 -1
- package/resource/knowledge/chat/preset/flutter/features/language.md +1 -1
- package/resource/knowledge/chat/preset/flutter/features/message-list.md +0 -1
- package/resource/knowledge/chat/preset/flutter/features/search.md +4 -5
- package/resource/knowledge/chat/preset/flutter/features/theme.md +1 -1
- package/resource/knowledge/chat/preset/ios/features/chat-setting.md +1 -1
- package/resource/knowledge/chat/preset/ios/features/conversation-list.md +0 -1
- package/resource/knowledge/chat/preset/ios/features/language.md +2 -5
- package/resource/knowledge/chat/preset/ios/features/message-list.md +0 -1
- package/resource/knowledge/chat/preset/ios/features/search.md +0 -1
- package/resource/knowledge/chat/preset/ios/features/theme.md +1 -1
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +57 -166
- package/resource/knowledge/chat/preset/react/features/chat-setting.md +0 -1
- package/resource/knowledge/chat/preset/react/features/conversation-actions.md +3 -3
- package/resource/knowledge/chat/preset/react/features/conversation-list.md +3 -3
- package/resource/knowledge/chat/preset/react/features/conversation-preview.md +1 -1
- package/resource/knowledge/chat/preset/react/features/message-input.md +2 -3
- package/resource/knowledge/chat/preset/react/features/search.md +0 -1
- package/resource/knowledge/chat/preset/vue/features/chat-header.md +1 -1
- package/resource/knowledge/chat/preset/vue/features/chat-setting.md +3 -4
- package/resource/knowledge/chat/preset/vue/features/conversation-list.md +4 -4
- package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +1 -1
- package/resource/knowledge/chat/preset/vue/features/message-input.md +2 -2
- package/resource/knowledge/chat/preset/vue/features/message-list.md +2 -2
- package/resource/knowledge/chat/preset/vue/features/search.md +0 -1
- package/resource/knowledge/chat/preset/vue/features/theme.md +4 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +2 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +12 -15
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +1 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +3 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +12 -15
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +1 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +2 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +3 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +1 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/vue/capability-matrix.md +82 -0
- package/resource/knowledge/livekit/core-sdk/{voice/android/voice-audio-effect.md → features/android/audio-effect.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/{live/android/live-barrage.md → features/android/barrage.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{live/android/live-base-beauty.md → features/android/base-beauty.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{voice/android/voice-gift.md → features/android/gift.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/{live/android/live-live-list.md → features/android/live-list.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audio-effect.md → features/flutter/audio-effect.md} +0 -2
- package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-barrage.md → features/flutter/barrage.md} +3 -3
- package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-gift.md → features/flutter/gift.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-room-list.md → features/flutter/live-list.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audience-list.md → features/ios/audience-list.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audio-effect.md → features/ios/audio-effect.md} +1 -3
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-barrage.md → features/ios/barrage.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/{live/ios/live-base-beauty.md → features/ios/base-beauty.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{live/ios/live-gift.md → features/ios/gift.md} +8 -9
- package/resource/knowledge/livekit/core-sdk/{live/ios/live-live-list.md → features/ios/live-list.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-audio-effect.md → features/uni-app/audio-effect.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-barrage.md → features/uni-app/barrage.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/features/uni-app/base-beauty.md +145 -0
- package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-gift.md → features/uni-app/gift.md} +6 -7
- package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-room-list.md → features/uni-app/live-list.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/live/android/{live-co-guest-interaction.md → co-guest-interaction.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/live/android/{live-host-interaction.md → host-interaction.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/live/android/{live-integration.md → integration.md} +6 -9
- package/resource/knowledge/livekit/core-sdk/live/flutter/{live-host-interaction.md → host-interaction.md} +1 -3
- package/resource/knowledge/livekit/core-sdk/live/flutter/{live-integration.md → integration.md} +1 -6
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-co-guest-interaction.md → co-guest-interaction.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-host-interaction.md → host-interaction.md} +3 -5
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-integration.md → integration.md} +7 -10
- package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +561 -0
- package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +323 -0
- package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +312 -0
- package/resource/knowledge/livekit/core-sdk/voice/android/{voice-co-guest-interaction.md → co-guest-interaction.md} +3 -3
- package/resource/knowledge/livekit/core-sdk/voice/android/{voice-host-interaction.md → host-interaction.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/voice/android/{voice-integration.md → integration.md} +11 -14
- package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-co-guest-interaction.md → co-guest-interaction.md} +0 -1
- package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-integration.md → integration.md} +1 -4
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-co-guest-interaction.md → co-guest-interaction.md} +3 -3
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-host-interaction.md → host-interaction.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-integration.md → integration.md} +7 -10
- package/resource/knowledge/livekit/core-sdk/voice/uni-app/{voice-co-guest-interaction.md → co-guest-interaction.md} +6 -6
- package/resource/knowledge/livekit/core-sdk/voice/uni-app/{voice-integration.md → integration.md} +6 -7
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +2 -3
- package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +1 -1
- package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +1 -1
- package/resource/knowledge/push/api-reference/android.md +337 -0
- package/resource/knowledge/push/api-reference/donut.md +190 -0
- package/resource/knowledge/push/api-reference/flutter.md +176 -0
- package/resource/knowledge/push/api-reference/harmonyos.md +140 -0
- package/resource/knowledge/push/api-reference/ios.md +537 -0
- package/resource/knowledge/push/api-reference/react-native.md +154 -0
- package/resource/knowledge/push/api-reference/uni-app.md +148 -0
- package/resource/knowledge/push/api-reference/unity.md +119 -0
- package/resource/knowledge/push/api-reference/unreal-engine.md +123 -0
- package/resource/knowledge/push/config/android/fcm.md +1 -8
- package/resource/knowledge/push/config/android/honor.md +3 -7
- package/resource/knowledge/push/config/android/huawei.md +0 -5
- package/resource/knowledge/push/config/android/meizu.md +0 -5
- package/resource/knowledge/push/config/android/oppo.md +0 -4
- package/resource/knowledge/push/config/android/vivo.md +0 -4
- package/resource/knowledge/push/config/android/xiaomi.md +0 -2
- package/resource/knowledge/push/config/donut.md +33 -46
- package/resource/knowledge/push/config/harmonyos.md +6 -9
- package/resource/knowledge/push/config/ios.md +2 -9
- package/resource/knowledge/push/config/react-native.md +17 -25
- package/resource/knowledge/push/config/unity.md +16 -24
- package/resource/knowledge/push/config/unreal-engine.md +16 -24
- package/resource/knowledge/push/integration/android.md +21 -21
- package/resource/knowledge/push/integration/donut.md +24 -34
- package/resource/knowledge/push/integration/flutter.md +12 -1
- package/resource/knowledge/push/integration/harmonyos.md +2 -1
- package/resource/knowledge/push/integration/ios.md +16 -10
- package/resource/knowledge/push/integration/react-native.md +10 -14
- package/resource/knowledge/push/integration/uni-app.md +10 -6
- package/resource/knowledge/push/integration/unity.md +19 -22
- package/resource/knowledge/push/integration/unreal-engine.md +7 -9
- package/resource/knowledge/push/overview/prepare.md +2 -2
- package/resource/knowledge/roomkit/core-sdk/android/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/android/unsupported-features.md +82 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/flutter/unsupported-features.md +82 -0
- package/resource/knowledge/roomkit/core-sdk/ios/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/ios/unsupported-features.md +82 -0
- package/resource/knowledge/roomkit/core-sdk/vue/call-user-to-room.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +2 -5
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +0 -2
- package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +2 -6
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -1
- package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +2 -4
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +2 -3
- package/resource/knowledge/roomkit/preset/android/integration.md +14 -16
- package/resource/knowledge/roomkit/preset/flutter/integration.md +9 -17
- package/resource/knowledge/roomkit/preset/ios/integration.md +9 -17
- package/resource/knowledge/roomkit/preset/react/integration.md +0 -4
- package/resource/knowledge/trtc/android/TRTCCloud.md +97 -180
- package/resource/knowledge/trtc/android/TRTCCloudDef.md +20 -20
- package/resource/knowledge/trtc/android/TRTCCloudListener.md +43 -77
- package/resource/knowledge/trtc/android/TRTCStatistics.md +1 -1
- package/resource/knowledge/trtc/android/TXAudioEffectManager.md +4 -24
- package/resource/knowledge/trtc/android/TXDeviceManager.md +2 -2
- package/resource/knowledge/trtc/android/TXLiteAVCode.md +1 -1
- package/resource/knowledge/trtc/c++/ITRTCCloud.md +96 -189
- package/resource/knowledge/trtc/c++/ITRTCStatistics.md +1 -1
- package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +1 -21
- package/resource/knowledge/trtc/c++/ITXDeviceManager.md +4 -6
- package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +42 -76
- package/resource/knowledge/trtc/c++/TRTCTypeDef.md +18 -19
- package/resource/knowledge/trtc/c++/TXLiteAVCode.md +1 -1
- package/resource/knowledge/trtc/ios/TRTCCloud.md +95 -181
- package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +43 -78
- package/resource/knowledge/trtc/ios/TRTCStatistics.md +1 -1
- package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +1 -20
- package/resource/knowledge/trtc/ios/TXDeviceManager.md +4 -6
- package/resource/knowledge/trtc/ios/TXLiteAVCode.md +1 -1
- package/resource/knowledge/trtc/ios/TXLiveSDKTypeDef.md +20 -20
- package/server-config.js +7 -4
- package/server.js +2 -2
- package/tools/common/finalize_answer.js +1 -1
- package/tools/common/present_framework_choice.js +2 -2
- package/tools/common/search_trtc_knowledge.js +3 -3
- package/tools/common/submit_feedback.js +1 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +60 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js +1 -1
- package/tools/definitions/present_framework_choice_def.js +2 -2
- package/tools/definitions/search_trtc_knowledge_def.js +5 -5
- package/tools/index.js +2 -0
- package/tools/live/get_native_live_uikit_integration.js +69 -0
- package/tools/live/get_native_livekit_core_integration.js +6 -6
- package/utils/is-valid-sdkappid.js +4 -0
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
- package/resource/index/component-slugs.json +0 -1
- package/resource/index/doc-source-urls.json +0 -1
- package/resource/index/manifest.json +0 -1
- package/resource/knowledge/livekit/core-sdk/live/android/live-audio-effect.md +0 -229
- package/resource/knowledge/livekit/core-sdk/live/android/live-gift.md +0 -459
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-barrage.md +0 -506
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-gift.md +0 -427
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-live-list.md +0 -726
- package/resource/knowledge/livekit/core-sdk/live/ios/live-audience-list.md +0 -265
- package/resource/knowledge/livekit/core-sdk/live/ios/live-audio-effect.md +0 -214
- package/resource/knowledge/livekit/core-sdk/live/ios/live-barrage.md +0 -427
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-audience-list.md +0 -272
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-barrage.md +0 -486
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-room-list.md +0 -523
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +0 -262
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +0 -600
- package/resource/knowledge/livekit/core-sdk/voice/ios/voice-gift.md +0 -411
- package/resource/knowledge/livekit/core-sdk/voice/ios/voice-room-list.md +0 -404
- /package/resource/knowledge/livekit/core-sdk/api-reference/{web → vue}/index.md +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/android/live-audience-list.md → features/android/audience-list.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audience-list.md → features/flutter/audience-list.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-base-beauty.md → features/flutter/base-beauty.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{voice/uni-app/voice-audience-list.md → features/uni-app/audience-list.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/live/flutter/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -0
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
本篇文档旨在指导 Flutter 开发者如何使用 `AtomicXCore` 框架中的 `BarrageStore` 模块,为您的直播应用快速集成功能丰富、性能卓越的弹幕系统。
|
|
2
|
-
|
|
3
|
-
## 核心功能
|
|
4
|
-
|
|
5
|
-
`BarrageStore` 为您的直播应用提供了一套完整的弹幕解决方案,核心功能包括:
|
|
6
|
-
- 接收并展示直播间弹幕消息。
|
|
7
|
-
|
|
8
|
-
- 发送文本弹幕与观众互动。
|
|
9
|
-
|
|
10
|
-
- 发送自定义业务弹幕,以支持礼物、点赞等复杂场景。
|
|
11
|
-
|
|
12
|
-
- 在本地消息列表中插入系统提示(例如,"欢迎 XX 进入直播间")。
|
|
13
|
-
|
|
14
|
-
## 核心概念解析
|
|
15
|
-
|
|
16
|
-
|**核心概念**|**类型**|**核心职责与描述**|
|
|
17
|
-
|---------|---------|---------|
|
|
18
|
-
|[Barrage](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/Barrage-class.html)|`class`|代表一条弹幕消息的数据模型。它包含了发送者信息 (`sender`)、消息内容 (`textContent` 或 `data`)、消息类型 (`messageType`) 等所有关键信息。|
|
|
19
|
-
|[BarrageState](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/BarrageState-class.html)|`class`|代表弹幕模块的当前状态。其核心属性 `messageList` 是一个 `ValueListenable<List<Barrage>>`,按时间顺序存储了当前直播间的所有弹幕消息,是 UI 渲染的数据源。|
|
|
20
|
-
|[BarrageStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/BarrageStore-class.html)|`class`|这是与弹幕功能交互的核心管理类。通过它,您可以发送消息 (`sendTextMessage`, `sendCustomMessage`),并通过监听其 `barrageState.messageList` 属性来接收和监听所有弹幕消息的更新。|
|
|
21
|
-
|
|
22
|
-
## 实现步骤
|
|
23
|
-
|
|
24
|
-
### 步骤1:组件集成
|
|
25
|
-
- **视频直播**:请参考 开播与观看 集成 **AtomicXCore**,完成接入。
|
|
26
|
-
|
|
27
|
-
- **语聊房**:请参考 开播与收听 集成 **AtomicXCore**,完成接入。
|
|
28
|
-
|
|
29
|
-
完成集成后回到当前工程。
|
|
30
|
-
|
|
31
|
-
### 步骤2:初始化并监听弹幕
|
|
32
|
-
|
|
33
|
-
获取一个与当前直播间 `liveId` 绑定的 `BarrageStore` 实例,并设置一个监听器来实时接收最新的**全量**弹幕消息列表。
|
|
34
|
-
``` java
|
|
35
|
-
import 'package:flutter/foundation.dart';
|
|
36
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
37
|
-
|
|
38
|
-
class BarrageManager {
|
|
39
|
-
final String liveId;
|
|
40
|
-
late final BarrageStore barrageStore;
|
|
41
|
-
late final VoidCallback _messageListChangedListener = _onMessageListChanged;
|
|
42
|
-
|
|
43
|
-
// 对外暴露消息列表的变化通知
|
|
44
|
-
final ValueNotifier<List<Barrage>> messagesNotifier =
|
|
45
|
-
ValueNotifier<List<Barrage>>([]);
|
|
46
|
-
|
|
47
|
-
BarrageManager({required this.liveId}) {
|
|
48
|
-
// 1. 通过 liveId 获取 BarrageStore 的单例(位置参数)
|
|
49
|
-
barrageStore = BarrageStore.create(liveId);
|
|
50
|
-
|
|
51
|
-
// 2. 初始化后立即开始监听弹幕消息
|
|
52
|
-
_subscribeToBarrageUpdates();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
void _subscribeToBarrageUpdates() {
|
|
56
|
-
// 3. 使用 ValueListenable 的 addListener 监听消息列表变化
|
|
57
|
-
barrageStore.barrageState.messageList.addListener(_messageListChangedListener);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
void _onMessageListChanged() {
|
|
61
|
-
// 4. 当 messageList 更新时,获取新列表并通知 UI 层
|
|
62
|
-
// 关键点:这里获取到的是包含所有历史消息的【完整列表】
|
|
63
|
-
messagesNotifier.value = barrageStore.barrageState.messageList.value;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
void dispose() {
|
|
67
|
-
barrageStore.barrageState.messageList.removeListener(_messageListChangedListener);
|
|
68
|
-
messagesNotifier.dispose();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 步骤3:发送文本弹幕
|
|
74
|
-
|
|
75
|
-
调用 `sendTextMessage` 方法向直播间内的所有用户广播一条纯文本消息。
|
|
76
|
-
``` java
|
|
77
|
-
extension BarrageManagerSend on BarrageManager {
|
|
78
|
-
/// 发送一条文本弹幕
|
|
79
|
-
Future<void> sendTextMessage(String text) async {
|
|
80
|
-
// 建议:增加非空校验,避免发送无效消息
|
|
81
|
-
if (text.isEmpty) {
|
|
82
|
-
debugPrint("弹幕内容不能为空");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// 调用核心 API 发送消息
|
|
87
|
-
final result = await barrageStore.sendTextMessage(
|
|
88
|
-
text: text,
|
|
89
|
-
extensionInfo: null,
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
// 使用 isSuccess 检查结果
|
|
93
|
-
if (result.isSuccess) {
|
|
94
|
-
debugPrint("文本弹幕 '$text' 发送成功");
|
|
95
|
-
} else {
|
|
96
|
-
debugPrint("文本弹幕发送失败: ${result.errorMessage}");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**接口参数:**
|
|
103
|
-
|
|
104
|
-
|**参数**|**类型**|**描述**|
|
|
105
|
-
|---------|---------|---------|
|
|
106
|
-
|`text`|`String`|要发送的文本内容。|
|
|
107
|
-
|`extensionInfo`|`Map<String, String>?`|附加的扩展信息,可用于业务自定义。|
|
|
108
|
-
|
|
109
|
-
### 步骤4:发送自定义弹幕
|
|
110
|
-
|
|
111
|
-
发送一条包含自定义业务逻辑的消息,例如礼物、点赞或游戏化互动指令。这条消息对其他客户端来说是透明的,需要业务层自行解析。
|
|
112
|
-
``` java
|
|
113
|
-
import 'dart:convert';
|
|
114
|
-
|
|
115
|
-
extension BarrageManagerCustom on BarrageManager {
|
|
116
|
-
/// 发送一条自定义弹幕,例如用于发送礼物
|
|
117
|
-
Future<void> sendGiftMessage({
|
|
118
|
-
required String giftId,
|
|
119
|
-
required int giftCount,
|
|
120
|
-
}) async {
|
|
121
|
-
// 1. 定义一个能识别业务的 ID
|
|
122
|
-
const businessID = "live_gift";
|
|
123
|
-
|
|
124
|
-
// 2. 将业务数据编码为 JSON 字符串
|
|
125
|
-
final giftData = {"gift_id": giftId, "gift_count": giftCount};
|
|
126
|
-
final jsonString = jsonEncode(giftData);
|
|
127
|
-
|
|
128
|
-
// 3. 调用核心 API 发送自定义消息
|
|
129
|
-
final result = await barrageStore.sendCustomMessage(
|
|
130
|
-
businessID: businessID,
|
|
131
|
-
data: jsonString,
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
if (result.isSuccess) {
|
|
135
|
-
debugPrint("礼物消息(自定义弹幕)发送成功");
|
|
136
|
-
} else {
|
|
137
|
-
debugPrint("礼物消息发送失败: ${result.errorMessage}");
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**接口参数:**
|
|
144
|
-
|
|
145
|
-
|**参数**|**类型**|**描述**|
|
|
146
|
-
|---------|---------|---------|
|
|
147
|
-
|`businessID`|`String`|业务唯一标识符,例如 "live_gift",用于接收端区分不同的自定义消息。|
|
|
148
|
-
|`data`|`String`|业务数据,通常为 JSON 格式的字符串。|
|
|
149
|
-
|
|
150
|
-
### 步骤5:在本地插入提示消息
|
|
151
|
-
|
|
152
|
-
在当前用户的消息列表中插入一条本地消息,这条消息不会被发送到直播间的其他用户。这非常适合用来显示系统欢迎、警告或操作提示等信息。
|
|
153
|
-
``` java
|
|
154
|
-
extension BarrageManagerLocal on BarrageManager {
|
|
155
|
-
/// 在本地消息列表中插入一条欢迎提示
|
|
156
|
-
void showWelcomeMessage(LiveUserInfo user) {
|
|
157
|
-
// 1. 创建一条 Barrage 消息(使用命名参数构造函数)
|
|
158
|
-
final welcomeTip = Barrage(
|
|
159
|
-
messageType: BarrageType.text,
|
|
160
|
-
textContent: "欢迎 ${user.userName} 进入直播间!",
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
// 2. 调用 API 将其插入本地列表
|
|
164
|
-
barrageStore.appendLocalTip(welcomeTip);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### 步骤6:管理用户发言(禁言与解禁)
|
|
170
|
-
|
|
171
|
-
作为主播或管理员,您可以对直播间内的用户发言权限进行管理,维护健康的社区氛围。
|
|
172
|
-
|
|
173
|
-
#### 禁止/解禁单个用户发言
|
|
174
|
-
|
|
175
|
-
通过 `LiveAudienceStore` 中的 `disableSendMessage` 接口来实现对指定用户的禁言或解禁。
|
|
176
|
-
``` java
|
|
177
|
-
// 1. 获取与当前直播间绑定的 LiveAudienceStore 实例(位置参数)
|
|
178
|
-
final liveId = "your_live_id";
|
|
179
|
-
final audienceStore = LiveAudienceStore.create(liveId);
|
|
180
|
-
|
|
181
|
-
// 2. 定义要操作的用户 ID 和禁言状态
|
|
182
|
-
final userIdToMute = "user_id_to_be_muted";
|
|
183
|
-
final shouldDisable = true; // true 为禁言, false 为解禁
|
|
184
|
-
|
|
185
|
-
// 3. 调用接口执行操作
|
|
186
|
-
final result = await audienceStore.disableSendMessage(
|
|
187
|
-
userID: userIdToMute,
|
|
188
|
-
isDisable: shouldDisable,
|
|
189
|
-
);
|
|
190
|
-
|
|
191
|
-
if (result.isSuccess) {
|
|
192
|
-
debugPrint("${shouldDisable ? "禁言" : "解禁"}用户 $userIdToMute 成功");
|
|
193
|
-
} else {
|
|
194
|
-
debugPrint("操作失败: ${result.errorMessage}");
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
#### 开启/关闭全体禁言
|
|
199
|
-
|
|
200
|
-
要对直播间内所有用户(通常不包括主播自己)进行禁言,您需要通过 `LiveListStore` 更新直播间信息来实现。
|
|
201
|
-
``` java
|
|
202
|
-
// 1. 获取 LiveListStore 单例
|
|
203
|
-
final liveListStore = LiveListStore.shared;
|
|
204
|
-
|
|
205
|
-
// 2. 获取当前直播间信息,并创建新的 LiveInfo 对象修改全体禁言状态
|
|
206
|
-
final currentLiveInfo = liveListStore.liveState.currentLive.value;
|
|
207
|
-
final updatedLiveInfo = LiveInfo(
|
|
208
|
-
liveID: currentLiveInfo.liveID,
|
|
209
|
-
liveName: currentLiveInfo.liveName,
|
|
210
|
-
isMessageDisable: true, // true 为全体禁言, false 为关闭
|
|
211
|
-
);
|
|
212
|
-
|
|
213
|
-
// 3. 调用更新接口,并指定修改的标志位列表
|
|
214
|
-
final result = await liveListStore.updateLiveInfo(
|
|
215
|
-
liveInfo: updatedLiveInfo,
|
|
216
|
-
modifyFlagList: [ModifyFlag.isMessageDisable],
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
if (result.isSuccess) {
|
|
220
|
-
debugPrint("全体禁言状态更新成功");
|
|
221
|
-
} else {
|
|
222
|
-
debugPrint("操作失败: ${result.errorMessage}");
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## 完整 UI 示例
|
|
227
|
-
``` java
|
|
228
|
-
import 'package:flutter/material.dart';
|
|
229
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
230
|
-
|
|
231
|
-
class BarrageWidget extends StatefulWidget {
|
|
232
|
-
final String liveId;
|
|
233
|
-
|
|
234
|
-
const BarrageWidget({Key? key, required this.liveId}) : super(key: key);
|
|
235
|
-
|
|
236
|
-
@override
|
|
237
|
-
State<BarrageWidget> createState() => _BarrageWidgetState();
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
class _BarrageWidgetState extends State<BarrageWidget> {
|
|
241
|
-
late BarrageManager _barrageManager;
|
|
242
|
-
final TextEditingController _inputController = TextEditingController();
|
|
243
|
-
final ScrollController _scrollController = ScrollController();
|
|
244
|
-
|
|
245
|
-
@override
|
|
246
|
-
void initState() {
|
|
247
|
-
super.initState();
|
|
248
|
-
_barrageManager = BarrageManager(liveId: widget.liveId);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
void _scrollToBottom() {
|
|
252
|
-
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
253
|
-
if (_scrollController.hasClients) {
|
|
254
|
-
_scrollController.animateTo(
|
|
255
|
-
_scrollController.position.maxScrollExtent,
|
|
256
|
-
duration: const Duration(milliseconds: 200),
|
|
257
|
-
curve: Curves.easeOut,
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
@override
|
|
264
|
-
void dispose() {
|
|
265
|
-
_barrageManager.dispose();
|
|
266
|
-
_inputController.dispose();
|
|
267
|
-
_scrollController.dispose();
|
|
268
|
-
super.dispose();
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
@override
|
|
272
|
-
Widget build(BuildContext context) {
|
|
273
|
-
return Column(
|
|
274
|
-
children: [
|
|
275
|
-
// 弹幕列表
|
|
276
|
-
Expanded(
|
|
277
|
-
child: ValueListenableBuilder<List<Barrage>>(
|
|
278
|
-
valueListenable: _barrageManager.messagesNotifier,
|
|
279
|
-
builder: (context, messageList, child) {
|
|
280
|
-
// 滚动到底部
|
|
281
|
-
_scrollToBottom();
|
|
282
|
-
return ListView.builder(
|
|
283
|
-
controller: _scrollController,
|
|
284
|
-
itemCount: messageList.length,
|
|
285
|
-
itemBuilder: (context, index) {
|
|
286
|
-
final barrage = messageList[index];
|
|
287
|
-
return _buildBarrageItem(barrage);
|
|
288
|
-
},
|
|
289
|
-
);
|
|
290
|
-
},
|
|
291
|
-
),
|
|
292
|
-
),
|
|
293
|
-
// 输入框
|
|
294
|
-
_buildInputBar(),
|
|
295
|
-
],
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
Widget _buildBarrageItem(Barrage barrage) {
|
|
300
|
-
return Container(
|
|
301
|
-
margin: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
|
|
302
|
-
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
|
303
|
-
decoration: BoxDecoration(
|
|
304
|
-
color: Colors.black54,
|
|
305
|
-
borderRadius: BorderRadius.circular(16),
|
|
306
|
-
),
|
|
307
|
-
child: RichText(
|
|
308
|
-
text: TextSpan(
|
|
309
|
-
children: [
|
|
310
|
-
TextSpan(
|
|
311
|
-
text: '${barrage.sender.userName}: ',
|
|
312
|
-
style: const TextStyle(
|
|
313
|
-
color: Colors.yellow,
|
|
314
|
-
fontSize: 14,
|
|
315
|
-
fontWeight: FontWeight.bold,
|
|
316
|
-
),
|
|
317
|
-
),
|
|
318
|
-
TextSpan(
|
|
319
|
-
text: barrage.textContent,
|
|
320
|
-
style: const TextStyle(color: Colors.white, fontSize: 14),
|
|
321
|
-
),
|
|
322
|
-
],
|
|
323
|
-
),
|
|
324
|
-
),
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
Widget _buildInputBar() {
|
|
329
|
-
return Container(
|
|
330
|
-
padding: const EdgeInsets.all(8),
|
|
331
|
-
color: Colors.white,
|
|
332
|
-
child: Row(
|
|
333
|
-
children: [
|
|
334
|
-
Expanded(
|
|
335
|
-
child: TextField(
|
|
336
|
-
controller: _inputController,
|
|
337
|
-
decoration: const InputDecoration(
|
|
338
|
-
hintText: '说点什么...',
|
|
339
|
-
border: OutlineInputBorder(),
|
|
340
|
-
contentPadding: EdgeInsets.symmetric(horizontal: 12),
|
|
341
|
-
),
|
|
342
|
-
onSubmitted: (_) => _sendMessage(),
|
|
343
|
-
),
|
|
344
|
-
),
|
|
345
|
-
const SizedBox(width: 8),
|
|
346
|
-
ElevatedButton(
|
|
347
|
-
onPressed: _sendMessage,
|
|
348
|
-
child: const Text('发送'),
|
|
349
|
-
),
|
|
350
|
-
],
|
|
351
|
-
),
|
|
352
|
-
);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
void _sendMessage() {
|
|
356
|
-
final text = _inputController.text.trim();
|
|
357
|
-
if (text.isNotEmpty) {
|
|
358
|
-
_barrageManager.sendTextMessage(text);
|
|
359
|
-
_inputController.clear();
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
## 功能进阶:优化高并发场景性能
|
|
366
|
-
|
|
367
|
-
当您使用 `BarrageStore` 构建弹幕功能后,本章将指导您如何处理更复杂的业务场景,确保它能在真实、复杂的高并发直播场景下,依然为用户提供流畅、稳定的体验。本章将围绕三个核心业务场景,为您提供明确的优化方案和代码示例。
|
|
368
|
-
|
|
369
|
-
### 场景一:高并发弹幕场景
|
|
370
|
-
|
|
371
|
-
#### 场景描述
|
|
372
|
-
|
|
373
|
-
在一场热门活动中,直播间涌入大量观众,弹幕以每秒数十条的频率刷新。
|
|
374
|
-
|
|
375
|
-
#### **技术挑战**
|
|
376
|
-
|
|
377
|
-
SDK 会以极高频率返回完整的弹幕列表。如果每次都重建 UI,主线程会被密集的 UI 布局和渲染操作阻塞,导致界面卡顿。
|
|
378
|
-
|
|
379
|
-
#### **优化方案: **批处理与流量削峰 (Batch Processing & Debouncing)
|
|
380
|
-
|
|
381
|
-
不必响应每一次的数据更新,而是设定一个时间阈值(例如300毫秒)。只在距离上次 UI 刷新超过这个阈值后,才执行下一次刷新操作。这能将每秒数十次的 UI 重绘,降低到每秒3-4次,极大提升流畅度。
|
|
382
|
-
``` java
|
|
383
|
-
class BarrageUIManager {
|
|
384
|
-
List<Barrage>? _latestMessageList;
|
|
385
|
-
Timer? _refreshTimer;
|
|
386
|
-
final void Function(List<Barrage>) onUpdate;
|
|
387
|
-
|
|
388
|
-
BarrageUIManager({required this.onUpdate}) {
|
|
389
|
-
// 每 0.3 秒检查一次是否需要刷新
|
|
390
|
-
_refreshTimer = Timer.periodic(
|
|
391
|
-
const Duration(milliseconds: 300),
|
|
392
|
-
(_) => _refreshUIIfNeeded(),
|
|
393
|
-
);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
/// 外部高频调用此方法,传入最新的全量列表
|
|
397
|
-
void update(List<Barrage> fullList) {
|
|
398
|
-
_latestMessageList = fullList;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
void _refreshUIIfNeeded() {
|
|
402
|
-
// 检查是否有新的数据待刷新
|
|
403
|
-
final newList = _latestMessageList;
|
|
404
|
-
if (newList == null) return;
|
|
405
|
-
|
|
406
|
-
_latestMessageList = null; // 清空标志位,避免重复刷新
|
|
407
|
-
|
|
408
|
-
// 更新数据源并刷新UI
|
|
409
|
-
onUpdate(newList);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
void dispose() {
|
|
413
|
-
_refreshTimer?.cancel();
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
### 场景二:保障长时间直播的内存稳定性
|
|
419
|
-
|
|
420
|
-
#### 场景描述
|
|
421
|
-
|
|
422
|
-
您的应用需要支持数小时乃至全天候的“不间断直播”,例如游戏直播或慢直播。在此期间,App 必须保持稳定运行,不能因为长时间运行而意外退出。
|
|
423
|
-
|
|
424
|
-
#### 技术挑战
|
|
425
|
-
|
|
426
|
-
SDK 返回的全量 `messageList` 会在长时间直播中无限增长,即使 UI 层做了节流,数据层持有的这个巨大数组也会持续占用内存,最终导致应用闪退。
|
|
427
|
-
|
|
428
|
-
#### **优化方案**:固定容量的循环数组 (Circular Buffer)
|
|
429
|
-
|
|
430
|
-
**只让您自己的数据源(DataSource)持有有限数量的消息**。无论 SDK 返回的全量列表有多大,您的应用只截取其中最新的部分用于显示。
|
|
431
|
-
``` java
|
|
432
|
-
void _refreshUIIfNeeded() {
|
|
433
|
-
final fullList = _latestMessageList;
|
|
434
|
-
if (fullList == null) return;
|
|
435
|
-
|
|
436
|
-
_latestMessageList = null;
|
|
437
|
-
|
|
438
|
-
// 关键点:截取最新的 N 条消息
|
|
439
|
-
const capacity = 500; // 客户端只保留最新的500条消息
|
|
440
|
-
final cappedList = fullList.length > capacity
|
|
441
|
-
? fullList.sublist(fullList.length - capacity)
|
|
442
|
-
: fullList;
|
|
443
|
-
|
|
444
|
-
onUpdate(cappedList);
|
|
445
|
-
}
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
## API 文档
|
|
449
|
-
|
|
450
|
-
关于 [BarrageStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_barrage_barrage_store/BarrageStore-class.html) 及其相关类的所有公开接口、属性和方法的详细信息,请参阅随 [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Flutter/index.html) 框架的官方 API 文档。
|
|
451
|
-
|
|
452
|
-
## 常见问题
|
|
453
|
-
|
|
454
|
-
### 如何实现彩色弹幕、礼物弹幕等更丰富的弹幕样式?
|
|
455
|
-
|
|
456
|
-
这是通过自定义消息 `sendCustomMessage` 来实现的。`BarrageStore` 不会限制您的业务想象力。
|
|
457
|
-
|
|
458
|
-
**实现思路**
|
|
459
|
-
1. **定义数据结构:** 与您的客户端和服务器团队共同定义好自定义消息的 JSON 结构。例如,一条彩色弹幕可以这样定义:
|
|
460
|
-
|
|
461
|
-
``` json
|
|
462
|
-
{ "type": "colored_text", "text": "这是一条彩色弹幕!", "color": "#FF5733" }
|
|
463
|
-
```
|
|
464
|
-
2. **发送端:** 在发送时,将这个 JSON 结构转换为字符串,并通过 `sendCustomMessage` 的 `data` 参数发送出去。`businessId` 可以设置为一个能代表您业务的唯一标识,例如 "`barrage_style_v1`"。
|
|
465
|
-
|
|
466
|
-
3. **接收端**: 在接收到弹幕消息后,检查其 `messageType` 是否为 `.custom` 以及 `businessId` 是否匹配。如果匹配,则解析 `data` 字符串(通常是解析 JSON),根据解析出的数据(例如 `color、text`)来渲染您的自定义 UI 样式。
|
|
467
|
-
|
|
468
|
-
### 不同的类、不同的文件中都调用了 `BarrageStore.create("some_id")`,这会创建出多个实例导致混乱吗?
|
|
469
|
-
|
|
470
|
-
完全不会。`AtomicXCore` 内部机制会确保只要您传入的 `liveId` 相同,获取到的永远是同一个与该直播间绑定的 `BarrageStore` 实例。您可以在需要的地方随用随取,无需手动管理单例。
|
|
471
|
-
|
|
472
|
-
### 为什么调用了 sendTextMessage,但是在消息列表中看不到发送的消息?
|
|
473
|
-
|
|
474
|
-
**请按以下步骤排查:**
|
|
475
|
-
1. **检查返回结果**:`sendTextMessage` 方法有一个完成回调。请检查回调返回的结果是成功还是失败。如果失败,错误信息会明确指出问题所在(例如“您已被禁言”、“网络错误”等)。
|
|
476
|
-
|
|
477
|
-
2. **确认监听时机**:确保您对 `barrageStore.state` 的订阅发生在该 `liveId` 对应的直播开始之后。如果在加入直播房间之前就开始监听,可能会错过部分消息。
|
|
478
|
-
|
|
479
|
-
3. **检查 liveId**:确认您在创建 `BarrageStore` 实例、加入直播房间、以及发送消息时使用的 `liveId` 完全一致,包括大小写。
|
|
480
|
-
|
|
481
|
-
4. **网络问题**:检查设备当前的网络连接是否正常。消息发送依赖于网络。
|
|
482
|
-
|
|
483
|
-
### 新观众进入直播间时,如何让他们看到加入前的历史弹幕消息?
|
|
484
|
-
|
|
485
|
-
`AtomicXCore` 支持拉取历史弹幕消息,但这需要您在**服务端控制台**进行一项简单的配置。配置完成后,SDK 会自动处理后续的一切,您无需编写额外的代码。
|
|
486
|
-
|
|
487
|
-
**步骤1:在控制台进行配置**
|
|
488
|
-
|
|
489
|
-
根据您的应用创建方式,选择对应的控制台进行配置(实时音视频控制台或即时通信 IM 控制台)。
|
|
490
|
-
|
|
491
|
-
在控制台的配置页面中,找到**查看直播间历史消息**选项,修改其配置(最大支持 **50** 条消息)。
|
|
492
|
-
- 若您的应用在 [实时音视频控制台](https://console.cloud.tencent.com/trtc/app) 创建,配置步骤如下:
|
|
493
|
-
|
|
494
|
-
左侧导航栏选择**应用管理** > **功能配置 **>** LiveKit 功能**,在**应用管理**选择对应的应用后,单击**查看直播间历史消息 > 编辑**。
|
|
495
|
-
|
|
496
|
-
- 若您的应用在 [即时通信 IM 控制台](https://console.cloud.tencent.com/im/rtc-config) 创建,配置步骤如下:
|
|
497
|
-
|
|
498
|
-
左侧导航栏选择**音视频服务 RTC**,选择对应的应用后,单击**在线直播/语音聊天室(TUILiveKit) > 配置**。
|
|
499
|
-
|
|
500
|
-
进入 **LiveKit 功能配置**后,单击**查看直播间历史消息** > **编辑**。
|
|
501
|
-
|
|
502
|
-
**步骤2:客户端无感获取 **
|
|
503
|
-
|
|
504
|
-
完成上述配置后,您的客户端代码**无需做任何改动**。
|
|
505
|
-
|
|
506
|
-
当新用户加入直播间时,`AtomicXCore` 的底层 会自动拉取您配置的历史消息数量。这些历史消息会和实时消息一样,通过您已实现的 `BarrageStore.barrageState` 订阅通道推送给您的 UI 层。您的应用会像接收实时弹幕一样,自然地接收并展示这些历史弹幕。
|