@tencent-rtc/mcp 1.4.7 → 1.6.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/cursor-setting.png +0 -0
- package/index.js +0 -1
- package/knowledge/bm25-cache.js +73 -0
- package/knowledge/bm25.js +147 -0
- package/knowledge/build-index.js +69 -0
- package/knowledge/chunker.js +167 -0
- package/knowledge/content-loader.js +39 -0
- package/knowledge/doc-url-resolver.js +142 -0
- package/knowledge/extractors.js +25 -0
- package/knowledge/path-meta.js +184 -0
- package/knowledge/search/exact-lookup.js +497 -0
- package/knowledge/search/filter-pool.js +104 -0
- package/knowledge/search/product-scope-intent.js +40 -0
- package/knowledge/search/requires-framework.js +81 -0
- package/knowledge/search/search-knowledge.js +229 -0
- package/mcp-server-prompt.png +0 -0
- package/package.json +1 -1
- package/resource/_schema/feature-aliases.yaml +10 -0
- package/resource/_schema/goal-tags.yaml +72 -0
- package/resource/_schema/products.yaml +19 -0
- package/resource/_schema/trtc-intents.yaml +27 -0
- package/resource/_schema/types.yaml +43 -0
- package/resource/index/component-slugs.json +1 -0
- package/resource/index/doc-source-urls.json +1 -0
- package/resource/index/manifest.json +1 -0
- package/resource/{doc → integration}/callkit/preset/android/integration.md +34 -28
- package/resource/integration/callkit/preset/flutter/integration.md +346 -0
- package/resource/integration/callkit/preset/ios/integration.md +408 -0
- package/resource/integration/callkit/preset/react/integration.md +362 -0
- package/resource/integration/callkit/preset/vue/integration.md +356 -0
- package/resource/integration/chat/preset/android/integration.md +500 -0
- package/resource/integration/chat/preset/flutter/integration.md +370 -0
- package/resource/integration/chat/preset/ios/integration.md +566 -0
- package/resource/integration/chat/preset/react/integration.md +490 -0
- package/resource/integration/chat/preset/vue/integration.md +504 -0
- package/resource/{doc → integration}/livekit/preset/live/vue/live-list-integration.md +26 -22
- package/resource/{doc → integration}/livekit/preset/live/vue/live-player-desk-integration.md +22 -18
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +309 -0
- package/resource/{doc → integration}/livekit/preset/live/vue/live-pusher-integration.md +47 -39
- package/resource/integration/roomkit/preset/vue/integration.md +562 -0
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +828 -0
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +897 -0
- package/resource/knowledge/callkit/core-sdk/android/offline-push.md +363 -0
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1111 -0
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1132 -0
- package/resource/{doc → knowledge}/callkit/core-sdk/flutter/offline-push.md +174 -151
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1084 -0
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1252 -0
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +534 -0
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +953 -0
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +1061 -0
- package/resource/knowledge/callkit/faq/android.md +92 -0
- package/resource/{doc/callkit/faq/android-faq.md → knowledge/callkit/faq/common.md} +11 -12
- package/resource/knowledge/callkit/faq/error-code.md +67 -0
- package/resource/knowledge/callkit/faq/flutter.md +52 -0
- package/resource/knowledge/callkit/faq/ios.md +104 -0
- package/resource/knowledge/callkit/faq/web.md +74 -0
- package/resource/knowledge/callkit/preset/android/api.md +412 -0
- package/resource/knowledge/callkit/preset/flutter/api.md +22 -0
- package/resource/knowledge/callkit/preset/ios/api.md +234 -0
- package/resource/knowledge/callkit/preset/web/api.md +83 -0
- package/resource/knowledge/chat/preset/android/features/chat-setting.md +74 -0
- package/resource/knowledge/chat/preset/android/features/contact-list.md +43 -0
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +117 -0
- package/resource/knowledge/chat/preset/android/features/language.md +136 -0
- package/resource/knowledge/chat/preset/android/features/message-input.md +57 -0
- package/resource/knowledge/chat/preset/android/features/message-list.md +142 -0
- package/resource/knowledge/chat/preset/android/features/search.md +64 -0
- package/resource/knowledge/chat/preset/android/features/theme.md +222 -0
- package/resource/knowledge/chat/preset/android-view/integration.md +300 -0
- package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +64 -0
- package/resource/knowledge/chat/preset/flutter/features/contact-list.md +40 -0
- package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +129 -0
- package/resource/knowledge/chat/preset/flutter/features/language.md +104 -0
- package/resource/knowledge/chat/preset/flutter/features/message-input.md +54 -0
- package/resource/knowledge/chat/preset/flutter/features/message-list.md +158 -0
- package/resource/knowledge/chat/preset/flutter/features/search.md +59 -0
- package/resource/knowledge/chat/preset/flutter/features/theme.md +261 -0
- package/resource/knowledge/chat/preset/ios/features/chat-setting.md +94 -0
- package/resource/knowledge/chat/preset/ios/features/contact-list.md +119 -0
- package/resource/knowledge/chat/preset/ios/features/conversation-list.md +134 -0
- package/resource/knowledge/chat/preset/ios/features/language.md +125 -0
- package/resource/knowledge/chat/preset/ios/features/message-input.md +69 -0
- package/resource/knowledge/chat/preset/ios/features/message-list.md +162 -0
- package/resource/knowledge/chat/preset/ios/features/search.md +93 -0
- package/resource/knowledge/chat/preset/ios/features/theme.md +270 -0
- package/resource/{doc/chatkit/ios → knowledge/chat/preset/ios-uikit}/integration.md +160 -158
- package/resource/knowledge/chat/preset/react/features/chat-setting.md +101 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/contact-list.md +43 -41
- package/resource/knowledge/chat/preset/react/features/conversation-actions.md +215 -0
- package/resource/knowledge/chat/preset/react/features/conversation-list.md +339 -0
- package/resource/knowledge/chat/preset/react/features/conversation-preview.md +101 -0
- package/resource/knowledge/chat/preset/react/features/conversation-search.md +61 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-input.md +117 -156
- package/resource/knowledge/chat/preset/react/features/message-list.md +297 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/search.md +65 -59
- package/resource/knowledge/chat/preset/react/features/theme.md +93 -0
- package/resource/knowledge/chat/preset/vue/features/chat-header.md +331 -0
- package/resource/knowledge/chat/preset/vue/features/chat-setting.md +79 -0
- package/resource/knowledge/chat/preset/vue/features/contact-list.md +277 -0
- package/resource/knowledge/chat/preset/vue/features/conversation-actions.md +234 -0
- package/resource/knowledge/chat/preset/vue/features/conversation-list.md +331 -0
- package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +216 -0
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-search.md +13 -13
- package/resource/knowledge/chat/preset/vue/features/message-input.md +551 -0
- package/resource/knowledge/chat/preset/vue/features/message-list.md +350 -0
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/search.md +79 -73
- package/resource/knowledge/chat/preset/vue/features/theme.md +136 -0
- package/resource/knowledge/chat/urls/error-code.md +17 -0
- package/resource/knowledge/chat/urls/product.md +43 -0
- package/resource/knowledge/chat/urls/restapi.md +204 -0
- package/resource/knowledge/chat/urls/sdk/android.md +80 -0
- package/resource/knowledge/chat/urls/sdk/flutter.md +71 -0
- package/resource/knowledge/chat/urls/sdk/ios.md +80 -0
- package/resource/knowledge/chat/urls/sdk/web.md +80 -0
- package/resource/knowledge/chat/urls/webhook.md +68 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +286 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +174 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +329 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +55 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +434 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +362 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +466 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +173 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +51 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +291 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +78 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +488 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +219 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +282 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +212 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +153 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +312 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +404 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +334 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +426 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +166 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +52 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +281 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +150 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +438 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +190 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +291 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +192 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +146 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +309 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +370 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +339 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +503 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +188 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +51 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +289 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +78 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +487 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +183 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/web/index.md +736 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audience-list.md +53 -47
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audio-effect.md +28 -24
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-barrage.md +22 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-base-beauty.md +17 -15
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-co-guest-interaction.md +19 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-gift.md +102 -89
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-host-interaction.md +41 -37
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-integration.md +45 -43
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-live-list.md +23 -20
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audience-list.md +41 -41
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audio-effect.md +70 -69
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-barrage.md +68 -71
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-base-beauty.md +43 -47
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-co-guest-interaction.md +59 -56
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-gift.md +103 -105
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-host-interaction.md +869 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-integration.md +84 -87
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-live-list.md +43 -40
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audience-list.md +11 -10
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audio-effect.md +28 -24
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-barrage.md +22 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-base-beauty.md +15 -14
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-co-guest-interaction.md +19 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-gift.md +54 -50
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-host-interaction.md +41 -37
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-integration.md +40 -40
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-live-list.md +19 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audience-list.md +53 -47
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audio-effect.md +28 -24
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-barrage.md +22 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +41 -33
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-gift.md +94 -81
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-host-interaction.md +35 -30
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-integration.md +45 -42
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-room-list.md +23 -20
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +260 -0
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +598 -0
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-barrage.md +490 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +65 -59
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-gift.md +424 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-integration.md +69 -76
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-room-list.md +726 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audience-list.md +11 -10
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audio-effect.md +28 -24
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-barrage.md +22 -18
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +41 -33
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-gift.md +54 -50
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-host-interaction.md +35 -30
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-integration.md +49 -46
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-room-list.md +19 -18
- package/resource/knowledge/livekit/faq/error-code.md +193 -0
- package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/barrage.md +56 -53
- package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/live-audience-list.md +22 -21
- package/resource/{doc/livekit/preset/live/vue/components → knowledge/livekit/preset/live/vue/features}/live-view.md +34 -32
- package/resource/knowledge/push/config/android.md +92 -0
- package/resource/knowledge/push/config/harmonyos.md +83 -0
- package/resource/knowledge/push/config/ios.md +254 -0
- package/resource/knowledge/push/config/react-native.md +254 -0
- package/resource/knowledge/push/config/unity.md +209 -0
- package/resource/knowledge/push/config/unreal-engine.md +194 -0
- package/resource/knowledge/push/integration/android.md +404 -0
- package/resource/knowledge/push/integration/flutter.md +465 -0
- package/resource/knowledge/push/integration/harmonyos.md +63 -0
- package/resource/knowledge/push/integration/ios.md +246 -0
- package/resource/knowledge/push/integration/react-native.md +366 -0
- package/resource/knowledge/push/integration/uni-app.md +208 -0
- package/resource/knowledge/push/integration/unity.md +389 -0
- package/resource/knowledge/push/integration/unreal-engine.md +390 -0
- package/resource/knowledge/push/overview/prepare.md +60 -0
- package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +241 -0
- package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +588 -0
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +364 -0
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +340 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +230 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +797 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +325 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +325 -0
- package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +233 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +569 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +325 -0
- package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +322 -0
- package/resource/knowledge/roomkit/core-sdk/vue/call-user-to-room.md +221 -0
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/device-detection.md +49 -48
- package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +461 -0
- package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +216 -0
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +370 -0
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/room-participant-state.md +61 -60
- package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +280 -0
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/room-view.md +57 -56
- package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +319 -0
- package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +267 -0
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +261 -0
- package/resource/knowledge/roomkit/preset/android/integration.md +396 -0
- package/resource/knowledge/roomkit/preset/flutter/integration.md +404 -0
- package/resource/knowledge/roomkit/preset/ios/integration.md +369 -0
- package/resource/knowledge/roomkit/preset/react/integration.md +576 -0
- package/resource/knowledge/rtcengine/web/how_to_run_web_sdk_demo.md +44 -0
- package/resource/{doc → knowledge}/rtcengine/web/plugin/21-advanced-auto-play-policy.md +8 -2
- package/resource/{doc → knowledge}/rtcengine/web/plugin/22-advanced-audio-mixer.md +19 -1
- package/resource/{doc → knowledge}/rtcengine/web/plugin/23-advanced-support-detection.md +1 -1
- package/resource/{doc → knowledge}/rtcengine/web/plugin/24-advanced-network-quality.md +8 -8
- package/resource/{doc → knowledge}/rtcengine/web/plugin/25-advanced-device-change.md +1 -1
- package/resource/{doc → knowledge}/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +6 -6
- package/resource/{doc → knowledge}/rtcengine/web/plugin/27-advanced-small-stream.md +3 -3
- package/resource/{doc → knowledge}/rtcengine/web/plugin/29-advanced-water-mark.md +18 -0
- package/resource/{doc → knowledge}/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
- package/resource/{doc → knowledge}/rtcengine/web/plugin/34-advanced-proxy.md +2 -2
- package/resource/{doc → knowledge}/rtcengine/web/plugin/35-advanced-ai-denoiser.md +1 -1
- package/resource/knowledge/trtc/android/TRTCCloud.md +1915 -0
- package/resource/knowledge/trtc/android/TRTCCloudDef.md +1029 -0
- package/resource/knowledge/trtc/android/TRTCCloudListener.md +1095 -0
- package/resource/knowledge/trtc/android/TRTCStatistics.md +68 -0
- package/resource/knowledge/trtc/android/TXAudioEffectManager.md +502 -0
- package/resource/knowledge/trtc/android/TXBeautyManager.md +415 -0
- package/resource/knowledge/trtc/android/TXDeviceManager.md +169 -0
- package/resource/knowledge/trtc/android/TXLiteAVCode.md +125 -0
- package/resource/knowledge/trtc/c++/ITRTCCloud.md +2069 -0
- package/resource/knowledge/trtc/c++/ITRTCStatistics.md +73 -0
- package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +502 -0
- package/resource/knowledge/trtc/c++/ITXDeviceManager.md +391 -0
- package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +1191 -0
- package/resource/knowledge/trtc/c++/TRTCTypeDef.md +931 -0
- package/resource/knowledge/trtc/c++/TXLiteAVCode.md +127 -0
- package/resource/knowledge/trtc/ios/TRTCCloud.md +2118 -0
- package/resource/knowledge/trtc/ios/TRTCCloudDef.md +975 -0
- package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +1131 -0
- package/resource/knowledge/trtc/ios/TRTCStatistics.md +68 -0
- package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +423 -0
- package/resource/knowledge/trtc/ios/TXBeautyManager.md +416 -0
- package/resource/knowledge/trtc/ios/TXDeviceManager.md +387 -0
- package/resource/knowledge/trtc/ios/TXLiteAVCode.md +127 -0
- package/server-config.js +0 -1
- package/server.js +35 -12
- package/streamable-http.js +0 -1
- package/tools/call/get_native_call_uikit_integration.js +2 -4
- package/tools/call/get_native_callkit_core_integration.js +2 -6
- package/tools/call/get_web_call_uikit_integration.js +2 -4
- package/tools/chat/get_native_chat_uikit_integration.js +2 -4
- package/tools/chat/get_web_chat_uikit_integration.js +2 -4
- package/tools/common/get_usersig.js +0 -1
- package/tools/common/present_framework_choice.js +19 -14
- package/tools/common/record_answer.js +19 -26
- package/tools/common/record_feedback.js +17 -31
- package/tools/common/search_trtc_knowledge.js +44 -0
- package/tools/definitions/get_native_call_uikit_integration_def.js +3 -2
- package/tools/definitions/get_native_callkit_core_integration_def.js +5 -4
- package/tools/definitions/get_native_chat_uikit_integration_def.js +5 -3
- package/tools/definitions/get_native_livekit_core_integration_def.js +6 -6
- package/tools/definitions/get_usersig_def.js +0 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js +4 -3
- package/tools/definitions/get_web_chat_uikit_integration_def.js +2 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js +5 -6
- package/tools/definitions/get_web_room_core_integration_def.js +49 -0
- package/tools/definitions/get_web_room_uikit_integration_def.js +5 -5
- package/tools/definitions/integration-boundary.js +5 -0
- package/tools/definitions/present_framework_choice_def.js +12 -11
- package/tools/definitions/record_answer_def.js +19 -18
- package/tools/definitions/record_feedback_def.js +14 -14
- package/tools/definitions/search_trtc_knowledge_def.js +39 -0
- package/tools/index.js +5 -37
- package/tools/live/get_native_livekit_core_integration.js +1 -4
- package/tools/live/get_web_live_uikit_integration.js +2 -5
- package/tools/room/get_web_room_core_integration.js +47 -0
- package/tools/room/get_web_room_uikit_integration.js +2 -4
- package/utils/generate-structured-result.js +24 -31
- package/utils/generate-usersig.js +0 -1
- package/utils/get-device-identifier.js +0 -1
- package/utils/get-doc-content.js +14 -9
- package/utils/http-get.js +0 -1
- package/utils/http-post.js +0 -1
- package/utils/report-cls-client.js +18 -21
- package/utils/report-es-client.js +1 -2
- package/index.js.map +0 -1
- package/resource/doc/callkit/core-sdk/.gitkeep +0 -0
- package/resource/doc/callkit/core-sdk/android/answer-call.md +0 -852
- package/resource/doc/callkit/core-sdk/android/make-call.md +0 -954
- package/resource/doc/callkit/core-sdk/android/offline-push.md +0 -361
- package/resource/doc/callkit/core-sdk/flutter/answer-call.md +0 -1160
- package/resource/doc/callkit/core-sdk/flutter/make-call.md +0 -1205
- package/resource/doc/callkit/core-sdk/ios/answer-call.md +0 -1090
- package/resource/doc/callkit/core-sdk/ios/make-call.md +0 -1248
- package/resource/doc/callkit/core-sdk/ios/offline-push.md +0 -485
- package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +0 -950
- package/resource/doc/callkit/core-sdk/uni-app/make-call.md +0 -1052
- package/resource/doc/callkit/faq/common/error-code.md +0 -47
- package/resource/doc/callkit/faq/flutter-faq.md +0 -115
- package/resource/doc/callkit/faq/ios-faq.md +0 -115
- package/resource/doc/callkit/faq/web-faq.md +0 -36
- package/resource/doc/callkit/preset/android/api.md +0 -296
- package/resource/doc/callkit/preset/flutter/api.md +0 -410
- package/resource/doc/callkit/preset/flutter/integration.md +0 -164
- package/resource/doc/callkit/preset/ios/api.md +0 -80
- package/resource/doc/callkit/preset/ios/integration.md +0 -187
- package/resource/doc/callkit/preset/react/api.md +0 -501
- package/resource/doc/callkit/preset/react/integration.md +0 -86
- package/resource/doc/callkit/preset/vue/api.md +0 -501
- package/resource/doc/callkit/preset/vue/integration.md +0 -83
- package/resource/doc/chatkit/android/faq.md +0 -111
- package/resource/doc/chatkit/android/features/theme.md +0 -219
- package/resource/doc/chatkit/android/integration.md +0 -490
- package/resource/doc/chatkit/faq/android_sdk/client-api.md +0 -281
- package/resource/doc/chatkit/faq/common/product.md +0 -7
- package/resource/doc/chatkit/faq/common/server.md +0 -44
- package/resource/doc/chatkit/faq/common/server_error_code.md +0 -74
- package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +0 -199
- package/resource/doc/chatkit/faq/flutter_sdk/faq.md +0 -53
- package/resource/doc/chatkit/faq/ios_sdk/client-api.md +0 -235
- package/resource/doc/chatkit/faq/web_sdk/error_code.md +0 -47
- package/resource/doc/chatkit/faq/web_sdk/faq.md +0 -287
- package/resource/doc/chatkit/flutter/faq.md +0 -23
- package/resource/doc/chatkit/flutter/features/theme.md +0 -235
- package/resource/doc/chatkit/flutter/integration.md +0 -344
- package/resource/doc/chatkit/ios/faq.md +0 -111
- package/resource/doc/chatkit/ios/features/theme.md +0 -267
- package/resource/doc/chatkit/react/components/avatar.md +0 -104
- package/resource/doc/chatkit/react/components/chat-header.md +0 -148
- package/resource/doc/chatkit/react/components/chat-setting.md +0 -57
- package/resource/doc/chatkit/react/components/chat.md +0 -38
- package/resource/doc/chatkit/react/components/component-list.md +0 -37
- package/resource/doc/chatkit/react/components/conversation-actions.md +0 -174
- package/resource/doc/chatkit/react/components/conversation-list.md +0 -333
- package/resource/doc/chatkit/react/components/conversation-preview.md +0 -118
- package/resource/doc/chatkit/react/components/conversation-search.md +0 -60
- package/resource/doc/chatkit/react/components/message-list.md +0 -293
- package/resource/doc/chatkit/react/components/tuikit.md +0 -34
- package/resource/doc/chatkit/react/faq.md +0 -26
- package/resource/doc/chatkit/react/integration.md +0 -416
- package/resource/doc/chatkit/vue/components/avatar.md +0 -104
- package/resource/doc/chatkit/vue/components/chat-header.md +0 -148
- package/resource/doc/chatkit/vue/components/chat-setting.md +0 -62
- package/resource/doc/chatkit/vue/components/chat.md +0 -45
- package/resource/doc/chatkit/vue/components/component-list.md +0 -87
- package/resource/doc/chatkit/vue/components/contact-list.md +0 -271
- package/resource/doc/chatkit/vue/components/conversation-actions.md +0 -228
- package/resource/doc/chatkit/vue/components/conversation-list.md +0 -320
- package/resource/doc/chatkit/vue/components/conversation-preview.md +0 -213
- package/resource/doc/chatkit/vue/components/message-input.md +0 -1054
- package/resource/doc/chatkit/vue/components/message-list.md +0 -433
- package/resource/doc/chatkit/vue/components/tuikit.md +0 -31
- package/resource/doc/chatkit/vue/components/userpicker.md +0 -256
- package/resource/doc/chatkit/vue/faq.md +0 -36
- package/resource/doc/chatkit/vue/integration.md +0 -428
- package/resource/doc/livekit/core-sdk/live/flutter/live-host-interaction.md +0 -866
- package/resource/doc/livekit/faq/common/error-code.md +0 -88
- package/resource/doc/livekit/preset/live/vue/api-reference/index.md +0 -780
- package/resource/doc/livekit/preset/live/vue/components/co-guest-panel.md +0 -91
- package/resource/doc/livekit/preset/live/vue/components/live-scene-panel.md +0 -112
- package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +0 -215
- package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +0 -300
- package/resource/doc/roomkit/faq/common/error-code.md +0 -67
- package/resource/doc/roomkit/vue/features/call-user-to-room.md +0 -220
- package/resource/doc/roomkit/vue/features/device-state.md +0 -460
- package/resource/doc/roomkit/vue/features/free-beauty-panel.md +0 -215
- package/resource/doc/roomkit/vue/features/room-chat.md +0 -369
- package/resource/doc/roomkit/vue/features/room-state.md +0 -282
- package/resource/doc/roomkit/vue/features/schedule-room.md +0 -318
- package/resource/doc/roomkit/vue/features/screen-share.md +0 -265
- package/resource/doc/roomkit/vue/features/virtual-background.md +0 -271
- package/resource/doc/roomkit/vue/integration.md +0 -315
- package/resource/doc/rtcengine/faq/common/error_code.md +0 -1
- package/resource/doc/rtcengine/faq/web_sdk/.gitkeep +0 -0
- package/resource/doc/rtcengine/web/.gitkeep +0 -0
- package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +0 -59
- package/resource/doc/trtc/C++/ITRTCCloud.md +0 -1970
- package/resource/doc/trtc/C++/ITRTCStatistics.md +0 -70
- package/resource/doc/trtc/C++/ITXAudioEffectManager.md +0 -469
- package/resource/doc/trtc/C++/ITXDeviceManager.md +0 -387
- package/resource/doc/trtc/C++/TRTCCloudCallback.md +0 -1082
- package/resource/doc/trtc/C++/TRTCTypeDef.md +0 -925
- package/resource/doc/trtc/C++/TXLiteAVCode.md +0 -129
- package/resource/doc/trtc/android/TRTCCloud.md +0 -1815
- package/resource/doc/trtc/android/TRTCCloudDef.md +0 -992
- package/resource/doc/trtc/android/TRTCCloudListener.md +0 -1004
- package/resource/doc/trtc/android/TRTCStatistics.md +0 -65
- package/resource/doc/trtc/android/TXAudioEffectManager.md +0 -469
- package/resource/doc/trtc/android/TXBeautyManager.md +0 -402
- package/resource/doc/trtc/android/TXDeviceManager.md +0 -173
- package/resource/doc/trtc/android/TXLiteAVCode.md +0 -127
- package/resource/doc/trtc/iOS/TRTCCloud.md +0 -2028
- package/resource/doc/trtc/iOS/TRTCCloudDef.md +0 -958
- package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +0 -1046
- package/resource/doc/trtc/iOS/TRTCStatistics.md +0 -65
- package/resource/doc/trtc/iOS/TXAudioEffectManager.md +0 -397
- package/resource/doc/trtc/iOS/TXBeautyManager.md +0 -403
- package/resource/doc/trtc/iOS/TXDeviceManager.md +0 -381
- package/resource/doc/trtc/iOS/TXLiteAVCode.md +0 -130
- package/server-config.js.map +0 -1
- package/server.js.map +0 -1
- package/streamable-http.js.map +0 -1
- package/tools/call/get_callkit_api.js +0 -33
- package/tools/call/get_callkit_api.js.map +0 -1
- package/tools/call/get_native_call_uikit_integration.js.map +0 -1
- package/tools/call/get_native_callkit_core_integration.js.map +0 -1
- package/tools/call/get_web_call_uikit_integration.js.map +0 -1
- package/tools/chat/get_native_chat_uikit_feature_detail.js +0 -35
- package/tools/chat/get_native_chat_uikit_feature_detail.js.map +0 -1
- package/tools/chat/get_native_chat_uikit_integration.js.map +0 -1
- package/tools/chat/get_web_chat_uikit_component_detail.js +0 -35
- package/tools/chat/get_web_chat_uikit_component_detail.js.map +0 -1
- package/tools/chat/get_web_chat_uikit_integration.js.map +0 -1
- package/tools/common/get_faq.js +0 -266
- 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.map +0 -1
- package/tools/common/record_answer.js.map +0 -1
- package/tools/common/record_feedback.js.map +0 -1
- package/tools/common/record_skill_session.js +0 -69
- package/tools/common/record_skill_session.js.map +0 -1
- package/tools/definitions/get_callkit_api_def.js +0 -29
- package/tools/definitions/get_callkit_api_def.js.map +0 -1
- package/tools/definitions/get_faq_def.js +0 -47
- package/tools/definitions/get_faq_def.js.map +0 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_native_callkit_core_integration_def.js.map +0 -1
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +0 -31
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_native_livekit_core_features_def.js +0 -34
- package/tools/definitions/get_native_livekit_core_features_def.js.map +0 -1
- package/tools/definitions/get_native_livekit_core_integration_def.js.map +0 -1
- package/tools/definitions/get_native_trtc_sdk_docs_def.js +0 -32
- package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +0 -1
- package/tools/definitions/get_usersig_def.js.map +0 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +0 -31
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +0 -1
- package/tools/definitions/get_web_chat_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_web_livekit_api_def.js +0 -30
- package/tools/definitions/get_web_livekit_api_def.js.map +0 -1
- package/tools/definitions/get_web_livekit_component_detail_def.js +0 -32
- package/tools/definitions/get_web_livekit_component_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_web_roomkit_feature_detail_def.js +0 -31
- package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_api_def.js +0 -27
- package/tools/definitions/get_web_trtc_sdk_api_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_integration_def.js +0 -27
- package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js +0 -27
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +0 -1
- package/tools/definitions/present_framework_choice_def.js.map +0 -1
- package/tools/definitions/record_answer_def.js.map +0 -1
- package/tools/definitions/record_feedback_def.js.map +0 -1
- package/tools/definitions/record_skill_session_def.js +0 -31
- package/tools/definitions/record_skill_session_def.js.map +0 -1
- package/tools/index.js.map +0 -1
- package/tools/live/get_native_livekit_core_features.js +0 -68
- package/tools/live/get_native_livekit_core_features.js.map +0 -1
- package/tools/live/get_native_livekit_core_integration.js.map +0 -1
- package/tools/live/get_web_live_uikit_integration.js.map +0 -1
- package/tools/live/get_web_livekit_api.js +0 -33
- package/tools/live/get_web_livekit_api.js.map +0 -1
- package/tools/live/get_web_livekit_component_detail.js +0 -35
- package/tools/live/get_web_livekit_component_detail.js.map +0 -1
- package/tools/room/get_web_room_uikit_integration.js.map +0 -1
- package/tools/room/get_web_roomkit_feature_detail.js +0 -69
- package/tools/room/get_web_roomkit_feature_detail.js.map +0 -1
- package/tools/rtcengine/get_web_trtc_sdk_api.js +0 -32
- package/tools/rtcengine/get_web_trtc_sdk_api.js.map +0 -1
- package/tools/rtcengine/get_web_trtc_sdk_integration.js +0 -32
- package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +0 -1
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js +0 -32
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +0 -1
- package/tools/trtc/get_native_trtc_sdk_docs.js +0 -74
- package/tools/trtc/get_native_trtc_sdk_docs.js.map +0 -1
- package/utils/build-session-directives.js +0 -120
- package/utils/build-session-directives.js.map +0 -1
- package/utils/generate-structured-result.js.map +0 -1
- package/utils/generate-usersig.js.map +0 -1
- package/utils/get-device-identifier.js.map +0 -1
- package/utils/get-doc-content.js.map +0 -1
- package/utils/handle-framework.js +0 -9
- package/utils/handle-framework.js.map +0 -1
- package/utils/handle-state-name.js +0 -29
- package/utils/handle-state-name.js.map +0 -1
- package/utils/http-get.js.map +0 -1
- package/utils/http-post.js.map +0 -1
- package/utils/report-cls-client.js.map +0 -1
- package/utils/report-es-client.js.map +0 -1
- package/utils/report-runtime-error-cls-client.js +0 -91
- package/utils/report-runtime-error-cls-client.js.map +0 -1
- /package/resource/{doc/livekit/preset/live/vue/faq.md → knowledge/push/config/donut.md} +0 -0
- /package/resource/{doc/roomkit/vue/faq.md → knowledge/push/integration/donut.md} +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/api.md +0 -0
- /package/resource/{doc/rtcengine/faq/web/web.md → knowledge/rtcengine/web/faq.md} +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/how_to_integrated_web_sdk.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/28-advanced-beauty.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/30-advanced-cross-room-link.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/37-advanced-voice-changer.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/40-advanced-video-mixer.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/43-advanced-face-detection.md +0 -0
|
@@ -1,866 +0,0 @@
|
|
|
1
|
-
**AtomicXCore** provided [CoHostStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_host_store/CoHostStore-class.html) and [BattleStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_battle_store/BattleStore-class.html), two core modules used to process **cross-room connection and PK battle**. This document will guide you on how to use these two tools in combination to complete the complete process from connecting line to PK in live broadcasting scenario.
|
|
2
|
-
|
|
3
|
-
## Core Scenario
|
|
4
|
-
|
|
5
|
-
A complete "anchor connection PK" usually consists of three core stages, and the overall process is as follows:
|
|
6
|
-
|
|
7
|
-
## Implementation Steps
|
|
8
|
-
|
|
9
|
-
### Step 1: Integrating the Component
|
|
10
|
-
|
|
11
|
-
Refer to Quick Connection for seamless integration with **AtomicXCore** and complete **LiveCoreWidget** access.
|
|
12
|
-
|
|
13
|
-
### Step 2: Implementing Cross-Room Connection
|
|
14
|
-
|
|
15
|
-
The goal of this step is to have two Anchors appear in the same view, and we will use [CoHostStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_host_store/api_live_co_host_store-library.html) to complete it.
|
|
16
|
-
|
|
17
|
-
#### Inviter (Anchor A) Implementation
|
|
18
|
-
1. **Initiate connection invitation**
|
|
19
|
-
|
|
20
|
-
When Anchor A selects target Anchor B on the interface and initiates connecting line, call the `requestHostConnection` method.
|
|
21
|
-
|
|
22
|
-
``` java
|
|
23
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
24
|
-
|
|
25
|
-
// Anchor A's webpage
|
|
26
|
-
class AnchorAPage extends StatefulWidget {
|
|
27
|
-
final String liveId;
|
|
28
|
-
|
|
29
|
-
const AnchorAPage({Key? key, required this.liveId}) : super(key: key);
|
|
30
|
-
|
|
31
|
-
@override
|
|
32
|
-
State<AnchorAPage> createState() => _AnchorAPageState();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
class _AnchorAPageState extends State<AnchorAPage> {
|
|
36
|
-
late final CoHostStore _coHostStore;
|
|
37
|
-
late final CoHostListener _coHostListener;
|
|
38
|
-
|
|
39
|
-
@override
|
|
40
|
-
void initState() {
|
|
41
|
-
super.initState();
|
|
42
|
-
_coHostStore = CoHostStore.create(widget.liveId);
|
|
43
|
-
_setupListeners();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// User clicks the "connecting line" button and selected Anchor B
|
|
47
|
-
Future<void> inviteHostB(String targetHostLiveId) async {
|
|
48
|
-
final layout = CoHostLayoutTemplate.hostDynamicGrid; // Select a layout template
|
|
49
|
-
const timeout = 30; // Invitation timeout duration (seconds)
|
|
50
|
-
|
|
51
|
-
final result = await _coHostStore.requestHostConnection(
|
|
52
|
-
targetHostLiveID: targetHostLiveId,
|
|
53
|
-
layoutTemplate: layout,
|
|
54
|
-
timeout: timeout,
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
if (result.isSuccess) {
|
|
58
|
-
print('Connection invitation sent, waiting for peer to handle...');
|
|
59
|
-
} else {
|
|
60
|
-
print('Invitation sending failure: ${result.errorMessage}');
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@override
|
|
65
|
-
void dispose() {
|
|
66
|
-
_coHostStore.removeCoHostListener(_coHostListener);
|
|
67
|
-
super.dispose();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
2. **Listen for invitation result**
|
|
72
|
-
|
|
73
|
-
Through `CoHostListener`, you can receive the Anchor B's processing result.
|
|
74
|
-
|
|
75
|
-
``` java
|
|
76
|
-
// Set up monitoring when initializing _AnchorAPageState
|
|
77
|
-
void _setupListeners() {
|
|
78
|
-
_coHostListener = CoHostListener(
|
|
79
|
-
onCoHostRequestAccepted: (invitee) {
|
|
80
|
-
print('Anchor ${invitee.userName} granted your connection invitation');
|
|
81
|
-
},
|
|
82
|
-
onCoHostRequestRejected: (invitee) {
|
|
83
|
-
print('Anchor ${invitee.userName} refused your invitation');
|
|
84
|
-
},
|
|
85
|
-
onCoHostRequestTimeout: (inviter, invitee) {
|
|
86
|
-
print('Invitation timeout, no response from the other party');
|
|
87
|
-
},
|
|
88
|
-
onCoHostUserJoined: (userInfo) {
|
|
89
|
-
print('Anchor ${userInfo.userName} joined the connecting line');
|
|
90
|
-
},
|
|
91
|
-
onCoHostUserLeft: (userInfo) {
|
|
92
|
-
print('Anchor ${userInfo.userName} left the connecting line');
|
|
93
|
-
},
|
|
94
|
-
);
|
|
95
|
-
_coHostStore.addCoHostListener(_coHostListener);
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
#### Invitee (Anchor B) Implementation
|
|
100
|
-
1. **Receive connection invitation**
|
|
101
|
-
|
|
102
|
-
Through `CoHostListener`, Anchor B can listen to the invitation from Anchor A.
|
|
103
|
-
|
|
104
|
-
``` java
|
|
105
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
106
|
-
|
|
107
|
-
// Anchor B's webpage
|
|
108
|
-
class AnchorBPage extends StatefulWidget {
|
|
109
|
-
final String liveId;
|
|
110
|
-
|
|
111
|
-
const AnchorBPage({Key? key, required this.liveId}) : super(key: key);
|
|
112
|
-
|
|
113
|
-
@override
|
|
114
|
-
State<AnchorBPage> createState() => _AnchorBPageState();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
class _AnchorBPageState extends State<AnchorBPage> {
|
|
118
|
-
late final CoHostStore _coHostStore;
|
|
119
|
-
late final CoHostListener _coHostListener;
|
|
120
|
-
|
|
121
|
-
@override
|
|
122
|
-
void initState() {
|
|
123
|
-
super.initState();
|
|
124
|
-
_coHostStore = CoHostStore.create(widget.liveId);
|
|
125
|
-
_setupListeners();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Set up monitoring during initialization
|
|
129
|
-
void _setupListeners() {
|
|
130
|
-
_coHostListener = CoHostListener(
|
|
131
|
-
onCoHostRequestReceived: (inviter, extensionInfo) {
|
|
132
|
-
print('Received connection invitation from Anchor ${inviter.userName}');
|
|
133
|
-
// _showInvitationDialog(inviter);
|
|
134
|
-
},
|
|
135
|
-
);
|
|
136
|
-
_coHostStore.addCoHostListener(_coHostListener);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
@override
|
|
140
|
-
void dispose() {
|
|
141
|
-
_coHostStore.removeCoHostListener(_coHostListener);
|
|
142
|
-
super.dispose();
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
2. **Respond to connection invitation**
|
|
147
|
-
|
|
148
|
-
When Anchor B makes a selection in the pop-up dialog box, call the method accordingly.
|
|
149
|
-
|
|
150
|
-
``` java
|
|
151
|
-
// Part of _AnchorBPageState
|
|
152
|
-
Future<void> acceptInvitation(String fromHostLiveId) async {
|
|
153
|
-
final result = await _coHostStore.acceptHostConnection(fromHostLiveId);
|
|
154
|
-
if (result.isSuccess) {
|
|
155
|
-
print('Connection invitation accepted');
|
|
156
|
-
} else {
|
|
157
|
-
print('Connection acceptance failure: ${result.errorMessage}');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
Future<void> rejectInvitation(String fromHostLiveId) async {
|
|
162
|
-
final result = await _coHostStore.rejectHostConnection(fromHostLiveId);
|
|
163
|
-
if (result.isSuccess) {
|
|
164
|
-
print('Connection invitation denied');
|
|
165
|
-
} else {
|
|
166
|
-
print('Connection rejection failure: ${result.errorMessage}');
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Step 3: Implement Anchor PK
|
|
172
|
-
|
|
173
|
-
Upon success of the connecting line, either party can initiate PK. This step will be achieved by using [BattleStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_battle_store/BattleStore-class.html) to implement Anchor PK.
|
|
174
|
-
|
|
175
|
-
#### Challenger (Such As Anchor A) Implementation
|
|
176
|
-
1. **Initiate PK challenge**
|
|
177
|
-
|
|
178
|
-
When Anchor A clicks the "PK" button, call the `requestBattle` method.
|
|
179
|
-
|
|
180
|
-
``` java
|
|
181
|
-
// Part of _AnchorAPageState
|
|
182
|
-
late final BattleStore _battleStore;
|
|
183
|
-
late final BattleListener _battleListener;
|
|
184
|
-
|
|
185
|
-
@override
|
|
186
|
-
void initState() {
|
|
187
|
-
super.initState();
|
|
188
|
-
_coHostStore = CoHostStore.create(widget.liveId);
|
|
189
|
-
_battleStore = BattleStore.create(widget.liveId);
|
|
190
|
-
_setupListeners();
|
|
191
|
-
_setupBattleListeners();
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
Future<void> startPK(String opponentUserId) async {
|
|
195
|
-
final config = BattleConfig(duration: 300); // PK lasts 5 minutes
|
|
196
|
-
final result = await _battleStore.requestBattle(
|
|
197
|
-
config: config,
|
|
198
|
-
userIDList: [opponentUserId],
|
|
199
|
-
timeout: 30,
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
if (result.isSuccess) {
|
|
203
|
-
print('Battle request sent, battleID: ${result.battleID}');
|
|
204
|
-
} else {
|
|
205
|
-
print('PK request failure: ${result.errorMessage}');
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
2. **Listen for PK status**
|
|
210
|
-
|
|
211
|
-
Listen for key events such as PK start and end via `BattleListener`.
|
|
212
|
-
|
|
213
|
-
``` java
|
|
214
|
-
// Add to the _setupBattleListeners method in _AnchorAPageState
|
|
215
|
-
void _setupBattleListeners() {
|
|
216
|
-
_battleListener = BattleListener(
|
|
217
|
-
onBattleStarted: (battleInfo, inviter, invitees) {
|
|
218
|
-
print('PK started');
|
|
219
|
-
},
|
|
220
|
-
onBattleEnded: (battleInfo, reason) {
|
|
221
|
-
print('PK ended, reason: $reason');
|
|
222
|
-
},
|
|
223
|
-
onUserJoinBattle: (battleID, battleUser) {
|
|
224
|
-
print('User ${battleUser.userName} joined PK');
|
|
225
|
-
},
|
|
226
|
-
onUserExitBattle: (battleID, battleUser) {
|
|
227
|
-
print('User ${battleUser.userName} left the PK');
|
|
228
|
-
},
|
|
229
|
-
);
|
|
230
|
-
_battleStore.addBattleListener(_battleListener);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
@override
|
|
234
|
-
void dispose() {
|
|
235
|
-
_coHostStore.removeCoHostListener(_coHostListener);
|
|
236
|
-
_battleStore.removeBattleListener(_battleListener);
|
|
237
|
-
super.dispose();
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
#### Challenger (Anchor B) Implementation
|
|
242
|
-
1. **Accept PK challenge**
|
|
243
|
-
|
|
244
|
-
Listen for PK invitation via `BattleListener`.
|
|
245
|
-
|
|
246
|
-
``` java
|
|
247
|
-
// Add to the _setupBattleListeners method in _AnchorBPageState
|
|
248
|
-
void _setupBattleListeners() {
|
|
249
|
-
_battleListener = BattleListener(
|
|
250
|
-
onBattleRequestReceived: (battleId, inviter, invitee) {
|
|
251
|
-
print('Received PK challenge from Anchor ${inviter.userName}');
|
|
252
|
-
// Display a pop-up dialog box for Anchor B to select "Agree" or "Reject"
|
|
253
|
-
// _showPKChallengeDialog(battleId);
|
|
254
|
-
},
|
|
255
|
-
onBattleStarted: (battleInfo, inviter, invitees) {
|
|
256
|
-
print('PK started');
|
|
257
|
-
},
|
|
258
|
-
onBattleEnded: (battleInfo, reason) {
|
|
259
|
-
print('PK ended');
|
|
260
|
-
},
|
|
261
|
-
);
|
|
262
|
-
_battleStore.addBattleListener(_battleListener);
|
|
263
|
-
}
|
|
264
|
-
```
|
|
265
|
-
2. **Respond to PK challenge**
|
|
266
|
-
|
|
267
|
-
When Anchor B makes a selection, call the appropriate method.
|
|
268
|
-
|
|
269
|
-
``` java
|
|
270
|
-
// Part of _AnchorBPageState
|
|
271
|
-
// User click "Accept Challenge"
|
|
272
|
-
Future<void> acceptPK(String battleId) async {
|
|
273
|
-
final result = await _battleStore.acceptBattle(battleId);
|
|
274
|
-
if (result.isSuccess) {
|
|
275
|
-
print('PK challenge accepted');
|
|
276
|
-
} else {
|
|
277
|
-
print('PK acceptance failure: ${result.errorMessage}');
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// User click "Reject Challenge"
|
|
282
|
-
Future<void> rejectPK(String battleId) async {
|
|
283
|
-
final result = await _battleStore.rejectBattle(battleId);
|
|
284
|
-
if (result.isSuccess) {
|
|
285
|
-
print('PK challenge denied');
|
|
286
|
-
} else {
|
|
287
|
-
print('PK rejection failure: ${result.errorMessage}');
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### Execution Effect
|
|
293
|
-
|
|
294
|
-
After integrating the above feature implementation, perform the corresponding operation using Anchor A and Anchor B separately. The execution effect is as follows. You can refer to the next chapter Refine UI Detail to customize UI logic.
|
|
295
|
-
|
|
296
|
-
## Refine UI Detail
|
|
297
|
-
|
|
298
|
-
You can use the "slot" capacity provided by the `VideoWidgetBuilder` parameter of `LiveCoreWidget` to add custom view on top of the video stream image for displaying nickname, avatar, PK progress bar, etc., or provide placeholder image when they turn camera off to optimize visual experience.
|
|
299
|
-
|
|
300
|
-
### Implementing Nickname Display on Video Stream Image
|
|
301
|
-
|
|
302
|
-
#### Effect
|
|
303
|
-
|
|
304
|
-
#### Implementation Method
|
|
305
|
-
- **Step 1**: Create a foreground view (**CustomCoHostForegroundView**) to display user information above the video stream.
|
|
306
|
-
|
|
307
|
-
> **Note:**
|
|
308
|
-
>
|
|
309
|
-
|
|
310
|
-
> You can also refer to the [co_host_foreground_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/live_stream/features/decorations/co_host/co_host_foreground_widget.dart) and [co_host_background_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/live_stream/features/decorations/co_host/co_host_background_widget.dart) files in the TUILiveKit open-source project to understand the complete implementation logic.
|
|
311
|
-
>
|
|
312
|
-
|
|
313
|
-
``` java
|
|
314
|
-
import 'package:flutter/material.dart';
|
|
315
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
316
|
-
|
|
317
|
-
/// Custom connected host message floating view (foreground)
|
|
318
|
-
class CustomCoHostForegroundView extends StatelessWidget {
|
|
319
|
-
final SeatFullInfo seatInfo;
|
|
320
|
-
|
|
321
|
-
const CustomCoHostForegroundView({
|
|
322
|
-
Key? key,
|
|
323
|
-
required this.seatInfo,
|
|
324
|
-
}) : super(key: key);
|
|
325
|
-
|
|
326
|
-
@override
|
|
327
|
-
Widget build(BuildContext context) {
|
|
328
|
-
return Container(
|
|
329
|
-
color: Colors.transparent,
|
|
330
|
-
child: Align(
|
|
331
|
-
alignment: Alignment.bottomLeft,
|
|
332
|
-
child: Container(
|
|
333
|
-
margin: const EdgeInsets.all(5.0),
|
|
334
|
-
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
|
335
|
-
decoration: BoxDecoration(
|
|
336
|
-
color: Colors.black.withOpacity(0.5),
|
|
337
|
-
borderRadius: BorderRadius.circular(12),
|
|
338
|
-
),
|
|
339
|
-
child: Text(
|
|
340
|
-
seatInfo.userInfo.userName,
|
|
341
|
-
style: const TextStyle(
|
|
342
|
-
color: Colors.white,
|
|
343
|
-
fontSize: 14,
|
|
344
|
-
),
|
|
345
|
-
),
|
|
346
|
-
),
|
|
347
|
-
),
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
```
|
|
352
|
-
- **Step 2**: Create a background view (**CustomCoHostBackgroundView**) to display a placeholder image when there is no video stream from the user.
|
|
353
|
-
|
|
354
|
-
``` java
|
|
355
|
-
import 'package:flutter/material.dart';
|
|
356
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
357
|
-
|
|
358
|
-
/// Custom connected anchor avatar placeholder view (background)
|
|
359
|
-
class CustomCoHostBackgroundView extends StatelessWidget {
|
|
360
|
-
final SeatFullInfo seatInfo;
|
|
361
|
-
|
|
362
|
-
const CustomCoHostBackgroundView({
|
|
363
|
-
Key? key,
|
|
364
|
-
required this.seatInfo,
|
|
365
|
-
}) : super(key: key);
|
|
366
|
-
|
|
367
|
-
@override
|
|
368
|
-
Widget build(BuildContext context) {
|
|
369
|
-
final avatarUrl = seatInfo.userInfo.avatarUrl;
|
|
370
|
-
return Container(
|
|
371
|
-
decoration: BoxDecoration(
|
|
372
|
-
color: Colors.grey[800],
|
|
373
|
-
),
|
|
374
|
-
child: Center(
|
|
375
|
-
child: Column(
|
|
376
|
-
mainAxisSize: MainAxisSize.min,
|
|
377
|
-
children: [
|
|
378
|
-
ClipOval(
|
|
379
|
-
child: avatarUrl.isNotEmpty
|
|
380
|
-
? Image.network(
|
|
381
|
-
avatarUrl,
|
|
382
|
-
width: 60,
|
|
383
|
-
height: 60,
|
|
384
|
-
fit: BoxFit.cover,
|
|
385
|
-
errorBuilder: (context, error, stackTrace) {
|
|
386
|
-
return _buildDefaultAvatar();
|
|
387
|
-
},
|
|
388
|
-
)
|
|
389
|
-
: _buildDefaultAvatar(),
|
|
390
|
-
),
|
|
391
|
-
const SizedBox(height: 8),
|
|
392
|
-
Text(
|
|
393
|
-
seatInfo.userInfo.userName,
|
|
394
|
-
style: const TextStyle(
|
|
395
|
-
color: Colors.white,
|
|
396
|
-
fontSize: 12,
|
|
397
|
-
),
|
|
398
|
-
),
|
|
399
|
-
],
|
|
400
|
-
),
|
|
401
|
-
),
|
|
402
|
-
);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
Widget _buildDefaultAvatar() {
|
|
406
|
-
return Container(
|
|
407
|
-
width: 60,
|
|
408
|
-
height: 60,
|
|
409
|
-
color: Colors.grey,
|
|
410
|
-
child: const Icon(Icons.person, size: 40, color: Colors.white),
|
|
411
|
-
);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
```
|
|
415
|
-
- **Step 3**: Build a custom view through the `VideoWidgetBuilder`'s `coHostWidgetBuilder` callback, and return the corresponding view based on the `viewLayer` value.
|
|
416
|
-
|
|
417
|
-
``` java
|
|
418
|
-
import 'package:flutter/material.dart';
|
|
419
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
420
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
421
|
-
|
|
422
|
-
/// Live streaming page with custom connection view
|
|
423
|
-
class CustomCoHostLiveWidget extends StatefulWidget {
|
|
424
|
-
final String liveId;
|
|
425
|
-
|
|
426
|
-
const CustomCoHostLiveWidget({
|
|
427
|
-
Key? key,
|
|
428
|
-
required this.liveId,
|
|
429
|
-
}) : super(key: key);
|
|
430
|
-
|
|
431
|
-
@override
|
|
432
|
-
State<CustomCoHostLiveWidget> createState() => _CustomCoHostLiveWidgetState();
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
class _CustomCoHostLiveWidgetState extends State<CustomCoHostLiveWidget> {
|
|
436
|
-
late LiveCoreController _controller;
|
|
437
|
-
|
|
438
|
-
@override
|
|
439
|
-
void initState() {
|
|
440
|
-
super.initState();
|
|
441
|
-
_controller = LiveCoreController.create();
|
|
442
|
-
_controller.setLiveID(widget.liveId);
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
@override
|
|
446
|
-
void dispose() {
|
|
447
|
-
_controller.dispose();
|
|
448
|
-
super.dispose();
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/// Build a custom view for the connected host
|
|
452
|
-
Widget _buildCoHostWidget(
|
|
453
|
-
BuildContext context,
|
|
454
|
-
SeatFullInfo seatFullInfo,
|
|
455
|
-
ViewLayer viewLayer,
|
|
456
|
-
) {
|
|
457
|
-
if (viewLayer == ViewLayer.foreground) {
|
|
458
|
-
// Foreground layer: Always display on top of the video image for Nickname, information, etc.
|
|
459
|
-
return CustomCoHostForegroundView(seatInfo: seatFullInfo);
|
|
460
|
-
} else {
|
|
461
|
-
// Background layer: Display only when the corresponding user has no video stream, used for avatar placeholder image
|
|
462
|
-
return CustomCoHostBackgroundView(seatInfo: seatFullInfo);
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
@override
|
|
467
|
-
Widget build(BuildContext context) {
|
|
468
|
-
return Scaffold(
|
|
469
|
-
body: LiveCoreWidget(
|
|
470
|
-
controller: _controller,
|
|
471
|
-
videoWidgetBuilder: VideoWidgetBuilder(
|
|
472
|
-
coHostWidgetBuilder: _buildCoHostWidget,
|
|
473
|
-
),
|
|
474
|
-
),
|
|
475
|
-
);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
#### **Parameter description:**
|
|
481
|
-
| **Parameter** | **Type** | **Note** |
|
|
482
|
-
| --- | --- | --- |
|
|
483
|
-
| `seatFullInfo` | `SeatFullInfo` | Seat information object, containing the Anchor's detailed information |
|
|
484
|
-
| `seatFullInfo.userInfo.userId` | `String` | Anchor's user ID |
|
|
485
|
-
| `seatFullInfo.userInfo.userName` | `String` | Anchor's Nickname |
|
|
486
|
-
| `seatFullInfo.userInfo.avatarUrl` | `String` | Anchor's profile photo URL |
|
|
487
|
-
| `viewLayer` | `ViewLayer` | View hierarchy enumeration<br>`ViewLayer.foreground` refers to the pendant view in the foreground, always displayed on top of the video image.<br>`ViewLayer.background` refers to the pendant view in the background, located in the lower layer of the foreground view. It is only displayed when the corresponding user has no video stream (such as when the camera is off), usually used for displaying the default avatar or placeholder image. |
|
|
488
|
-
|
|
489
|
-
### Implementing Score Display for PK User View
|
|
490
|
-
|
|
491
|
-
When the Anchor starts PK, you can mount a custom view on the other party's video footage, usually used for showing the value of gifts received or other PK-related information.
|
|
492
|
-
|
|
493
|
-
#### **Effect**
|
|
494
|
-
|
|
495
|
-
#### Implementation Method
|
|
496
|
-
- **Step 1**: Create a custom PK user view. You can refer to the [battle_member_info_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/live_stream/features/decorations/battle/battle_member_info_widget.dart) file in the TUILiveKit open-source project to learn about the complete implementation logic.
|
|
497
|
-
|
|
498
|
-
``` java
|
|
499
|
-
import 'package:flutter/material.dart';
|
|
500
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
501
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
502
|
-
|
|
503
|
-
/// Custom PK User View
|
|
504
|
-
class CustomBattleUserView extends StatefulWidget {
|
|
505
|
-
final String liveId;
|
|
506
|
-
final TUIBattleUser battleUser;
|
|
507
|
-
|
|
508
|
-
const CustomBattleUserView({
|
|
509
|
-
Key? key,
|
|
510
|
-
required this.liveId,
|
|
511
|
-
required this.battleUser,
|
|
512
|
-
}) : super(key: key);
|
|
513
|
-
|
|
514
|
-
@override
|
|
515
|
-
State<CustomBattleUserView> createState() => _CustomBattleUserViewState();
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
class _CustomBattleUserViewState extends State<CustomBattleUserView> {
|
|
519
|
-
late final BattleStore _battleStore;
|
|
520
|
-
late final VoidCallback _scoreChangedListener = _onScoreChanged;
|
|
521
|
-
int _score = 0;
|
|
522
|
-
|
|
523
|
-
@override
|
|
524
|
-
void initState() {
|
|
525
|
-
super.initState();
|
|
526
|
-
_battleStore = BattleStore.create(widget.liveId);
|
|
527
|
-
_subscribeBattleState();
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
/// Subscribe to PK score changes
|
|
531
|
-
void _subscribeBattleState() {
|
|
532
|
-
_battleStore.battleState.battleScore.addListener(_scoreChangedListener);
|
|
533
|
-
// Initialize the score
|
|
534
|
-
_updateScore(_battleStore.battleState.battleScore.value);
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
void _onScoreChanged() {
|
|
538
|
-
_updateScore(_battleStore.battleState.battleScore.value);
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
void _updateScore(Map<String, int> battleScore) {
|
|
542
|
-
final score = battleScore[widget.battleUser.userId] ?? 0;
|
|
543
|
-
if (mounted && score != _score) {
|
|
544
|
-
setState(() {
|
|
545
|
-
_score = score;
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
@override
|
|
551
|
-
void dispose() {
|
|
552
|
-
_battleStore.battleState.battleScore.removeListener(_scoreChangedListener);
|
|
553
|
-
super.dispose();
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
@override
|
|
557
|
-
Widget build(BuildContext context) {
|
|
558
|
-
return IgnorePointer(
|
|
559
|
-
child: Align(
|
|
560
|
-
alignment: Alignment.bottomRight,
|
|
561
|
-
child: Container(
|
|
562
|
-
margin: const EdgeInsets.all(5),
|
|
563
|
-
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
|
564
|
-
decoration: BoxDecoration(
|
|
565
|
-
color: Colors.black.withOpacity(0.4),
|
|
566
|
-
borderRadius: BorderRadius.circular(12),
|
|
567
|
-
),
|
|
568
|
-
child: Text(
|
|
569
|
-
'$_score',
|
|
570
|
-
style: const TextStyle(
|
|
571
|
-
color: Colors.white,
|
|
572
|
-
fontSize: 14,
|
|
573
|
-
fontWeight: FontWeight.bold,
|
|
574
|
-
),
|
|
575
|
-
),
|
|
576
|
-
),
|
|
577
|
-
),
|
|
578
|
-
);
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
```
|
|
582
|
-
- **Step 2**: Build a custom PK view through the `battleWidgetBuilder` callback of `VideoWidgetBuilder`.
|
|
583
|
-
|
|
584
|
-
``` java
|
|
585
|
-
import 'package:flutter/material.dart';
|
|
586
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
587
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
588
|
-
|
|
589
|
-
Live streaming page with custom PK view
|
|
590
|
-
class CustomBattleLiveWidget extends StatefulWidget {
|
|
591
|
-
final String liveId;
|
|
592
|
-
|
|
593
|
-
const CustomBattleLiveWidget({
|
|
594
|
-
Key? key,
|
|
595
|
-
required this.liveId,
|
|
596
|
-
}) : super(key: key);
|
|
597
|
-
|
|
598
|
-
@override
|
|
599
|
-
State<CustomBattleLiveWidget> createState() => _CustomBattleLiveWidgetState();
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
class _CustomBattleLiveWidgetState extends State<CustomBattleLiveWidget> {
|
|
603
|
-
late LiveCoreController _controller;
|
|
604
|
-
|
|
605
|
-
@override
|
|
606
|
-
void initState() {
|
|
607
|
-
super.initState();
|
|
608
|
-
_controller = LiveCoreController.create();
|
|
609
|
-
_controller.setLiveID(widget.liveId);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
@override
|
|
613
|
-
void dispose() {
|
|
614
|
-
_controller.dispose();
|
|
615
|
-
super.dispose();
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
/// Build Custom PK User View
|
|
619
|
-
Widget _buildBattleWidget(BuildContext context, TUIBattleUser battleUser) {
|
|
620
|
-
return CustomBattleUserView(
|
|
621
|
-
liveId: widget.liveId,
|
|
622
|
-
battleUser: battleUser,
|
|
623
|
-
);
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
@override
|
|
627
|
-
Widget build(BuildContext context) {
|
|
628
|
-
return Scaffold(
|
|
629
|
-
body: LiveCoreWidget(
|
|
630
|
-
controller: _controller,
|
|
631
|
-
videoWidgetBuilder: VideoWidgetBuilder(
|
|
632
|
-
battleWidgetBuilder: _buildBattleWidget,
|
|
633
|
-
),
|
|
634
|
-
),
|
|
635
|
-
);
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
```
|
|
639
|
-
|
|
640
|
-
#### **Parameter description:**
|
|
641
|
-
| **Parameter** | **Type** | **Note** |
|
|
642
|
-
| --- | --- | --- |
|
|
643
|
-
| `battleUser` | `TUIBattleUser` | PK user information object. |
|
|
644
|
-
| `battleUser.roomId` | `String` | PK room ID. |
|
|
645
|
-
| `battleUser.userId` | `String` | PK user ID. |
|
|
646
|
-
| `battleUser.userName` | `String` | PK user nickname. |
|
|
647
|
-
| `battleUser.avatarUrl` | `String` | PK user avatar address. |
|
|
648
|
-
| `battleUser.score` | `int` | PK score. |
|
|
649
|
-
|
|
650
|
-
### Displaying PK Status on Video Stream Image
|
|
651
|
-
|
|
652
|
-
#### **Effect**
|
|
653
|
-
|
|
654
|
-
#### **Implementation Method**
|
|
655
|
-
- **Step 1:** Create a custom PK global view **CustomBattleContainerView**. You can refer to the [battle_info_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/live_stream/features/decorations/battle/battle_info_widget.dart) file in the TUILiveKit open-source project to achieve the same effect.
|
|
656
|
-
|
|
657
|
-
- **Step 2**: Build a custom PK container view through the `battleContainerWidgetBuilder` callback of `VideoWidgetBuilder`.
|
|
658
|
-
|
|
659
|
-
``` java
|
|
660
|
-
import 'package:flutter/material.dart';
|
|
661
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
662
|
-
|
|
663
|
-
Live streaming page with custom PK container view
|
|
664
|
-
class CustomBattleContainerLiveWidget extends StatefulWidget {
|
|
665
|
-
final String liveId;
|
|
666
|
-
|
|
667
|
-
const CustomBattleContainerLiveWidget({
|
|
668
|
-
Key? key,
|
|
669
|
-
required this.liveId,
|
|
670
|
-
}) : super(key: key);
|
|
671
|
-
|
|
672
|
-
@override
|
|
673
|
-
State<CustomBattleContainerLiveWidget> createState() => _CustomBattleContainerLiveWidgetState();
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
class _CustomBattleContainerLiveWidgetState extends State<CustomBattleContainerLiveWidget> {
|
|
677
|
-
late LiveCoreController _controller;
|
|
678
|
-
|
|
679
|
-
@override
|
|
680
|
-
void initState() {
|
|
681
|
-
super.initState();
|
|
682
|
-
_controller = LiveCoreController.create();
|
|
683
|
-
_controller.setLiveID(widget.liveId);
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
@override
|
|
687
|
-
void dispose() {
|
|
688
|
-
_controller.dispose();
|
|
689
|
-
super.dispose();
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
/// Build PK Container View
|
|
693
|
-
Widget _buildBattleContainerWidget(BuildContext context) {
|
|
694
|
-
// CustomBattleContainerView is your custom PK global view
|
|
695
|
-
return CustomBattleContainerView(liveId: widget.liveId);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
@override
|
|
699
|
-
Widget build(BuildContext context) {
|
|
700
|
-
return Scaffold(
|
|
701
|
-
body: LiveCoreWidget(
|
|
702
|
-
controller: _controller,
|
|
703
|
-
videoWidgetBuilder: VideoWidgetBuilder(
|
|
704
|
-
battleContainerWidgetBuilder: _buildBattleContainerWidget,
|
|
705
|
-
),
|
|
706
|
-
),
|
|
707
|
-
);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
```
|
|
711
|
-
|
|
712
|
-
### Combine Multiple Custom Views
|
|
713
|
-
|
|
714
|
-
In actual scenarios, you may need to customize the connected host view, PK user view, and PK container view at the same time. The following example shows how to use them in combination.
|
|
715
|
-
``` java
|
|
716
|
-
import 'package:flutter/material.dart';
|
|
717
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
718
|
-
import 'package:rtc_room_engine/rtc_room_engine.dart';
|
|
719
|
-
|
|
720
|
-
/// Complete custom view live streaming page
|
|
721
|
-
class FullCustomLiveWidget extends StatefulWidget {
|
|
722
|
-
final String liveId;
|
|
723
|
-
|
|
724
|
-
const FullCustomLiveWidget({
|
|
725
|
-
Key? key,
|
|
726
|
-
required this.liveId,
|
|
727
|
-
}) : super(key: key);
|
|
728
|
-
|
|
729
|
-
@override
|
|
730
|
-
State<FullCustomLiveWidget> createState() => _FullCustomLiveWidgetState();
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
class _FullCustomLiveWidgetState extends State<FullCustomLiveWidget> {
|
|
734
|
-
late LiveCoreController _controller;
|
|
735
|
-
|
|
736
|
-
@override
|
|
737
|
-
void initState() {
|
|
738
|
-
super.initState();
|
|
739
|
-
_controller = LiveCoreController.create();
|
|
740
|
-
_controller.setLiveID(widget.liveId);
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
@override
|
|
744
|
-
void dispose() {
|
|
745
|
-
_controller.dispose();
|
|
746
|
-
super.dispose();
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
/// Build a custom view for the connected host
|
|
750
|
-
Widget _buildCoHostWidget(
|
|
751
|
-
BuildContext context,
|
|
752
|
-
SeatFullInfo seatFullInfo,
|
|
753
|
-
ViewLayer viewLayer,
|
|
754
|
-
) {
|
|
755
|
-
if (viewLayer == ViewLayer.foreground) {
|
|
756
|
-
return CustomCoHostForegroundView(seatInfo: seatFullInfo);
|
|
757
|
-
} else {
|
|
758
|
-
return CustomCoHostBackgroundView(seatInfo: seatFullInfo);
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
/// Build Custom PK User View
|
|
763
|
-
Widget _buildBattleWidget(BuildContext context, TUIBattleUser userInfo) {
|
|
764
|
-
return CustomBattleUserView(
|
|
765
|
-
liveId: widget.liveId,
|
|
766
|
-
battleUser: userInfo,
|
|
767
|
-
);
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
/// Build PK Container View
|
|
771
|
-
Widget _buildBattleContainerWidget(BuildContext context) {
|
|
772
|
-
return CustomBattleContainerView(liveId: widget.liveId);
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
@override
|
|
776
|
-
Widget build(BuildContext context) {
|
|
777
|
-
return Scaffold(
|
|
778
|
-
body: LiveCoreWidget(
|
|
779
|
-
controller: _controller,
|
|
780
|
-
videoWidgetBuilder: VideoWidgetBuilder(
|
|
781
|
-
coHostWidgetBuilder: _buildCoHostWidget,
|
|
782
|
-
battleWidgetBuilder: _buildBattleWidget,
|
|
783
|
-
battleContainerWidgetBuilder: _buildBattleContainerWidget,
|
|
784
|
-
),
|
|
785
|
-
),
|
|
786
|
-
);
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
```
|
|
790
|
-
|
|
791
|
-
## Advanced Features
|
|
792
|
-
|
|
793
|
-
### Implement PK Score Update Via REST API
|
|
794
|
-
|
|
795
|
-
In the **live streamer PK scenario**, the value of gifts received by the Anchor will be linked to the PK value (for example: when the audience sends a "rocket" gift, the Anchor's PK score increases by 500 points). You can easily implement real-time score updates in the live PK scenario through our REST API.
|
|
796
|
-
|
|
797
|
-
> **Important Note:**
|
|
798
|
-
>
|
|
799
|
-
|
|
800
|
-
> The PK score system in the LiveKit backend uses pure numerical computation and cumulative mechanism. Therefore, you need to complete the PK score calculation before calling the update API based on your operational strategy and business requirement. See the following PK score calculation example:
|
|
801
|
-
>
|
|
802
|
-
| **Gift Type** | **Score Calculation Rule** | **Example** |
|
|
803
|
-
| --- | --- | --- |
|
|
804
|
-
| Basic Gift | Gift Value × 5 | 10 CNY Gift → 50 Points |
|
|
805
|
-
| Intermediate Gift | Gift Value × 8 | 50 CNY Gift → 400 Points |
|
|
806
|
-
| Senior Gift | Gift Value × 12 | 100 CNY Gift → 1200 Points |
|
|
807
|
-
| Special Effect Gift | fixed high score | 520 CNY Gift → 1314 Points |
|
|
808
|
-
|
|
809
|
-
#### REST API Call Process
|
|
810
|
-
|
|
811
|
-
#### Key Process Description
|
|
812
|
-
1. **Obtain PK Status:**
|
|
813
|
-
|
|
814
|
-
- **Callback Configuration**: Configure PK Status Callback to have the `LiveKit` backend actively notify your system when PK starts or ends.
|
|
815
|
-
|
|
816
|
-
- **Active Query**: Your backend can call the PK Status Query API at any time to check the current PK status.
|
|
817
|
-
|
|
818
|
-
2. **PK Score Calculation**: Your backend calculates the PK score increment based on your business rules.
|
|
819
|
-
|
|
820
|
-
3. **PK Score Update**: Your backend calls the Update PK Score API to update the PK score in the LiveKit backend.
|
|
821
|
-
|
|
822
|
-
4. **LiveKit Backend Syncs to Client**: The backend automatically synchronizes the updated PK score to all clients.
|
|
823
|
-
|
|
824
|
-
#### Involved REST API Endpoints
|
|
825
|
-
| **API** | **Function Description** | **Request Example** |
|
|
826
|
-
| --- | --- | --- |
|
|
827
|
-
| Active API - Query PK Status | Check whether the current room is in PK | Example |
|
|
828
|
-
| Active API - Update PK Score | Update the calculated PK score | Example |
|
|
829
|
-
| Callback Configuration - PK Start Callback | Receive real-time notification when PK starts | Example |
|
|
830
|
-
| Callback Configuration - PK End Callback | Receive real-time notification when PK ends | Example |
|
|
831
|
-
|
|
832
|
-
## API documentation
|
|
833
|
-
|
|
834
|
-
For detailed information about all public interfaces, attributes, and methods of [CoHostStore](https://pub.dev/documentation/atomic_x_core/latest/api_live_co_host_store/CoHostStore-class.html) and its related classes, see the official API documentation of the [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Flutter/index.html) framework. The related Store used in this guide is as follows:
|
|
835
|
-
| **Store/Component** | **Feature Description** | **API Reference** |
|
|
836
|
-
| --- | --- | --- |
|
|
837
|
-
| **LiveCoreWidget** | The core view component for live video stream display and interaction: responsible for stream rendering and view widget processing, supporting scenarios such as anchor live streaming, audience mic connection, and cross-room connection with other anchors. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreWidget-class.html) |
|
|
838
|
-
| **LiveCoreController** | The controller of LiveCoreWidget: are used to set the live stream ID, control the preview, and perform other operations. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/LiveCoreController-class.html) |
|
|
839
|
-
| **VideoWidgetBuilder** | Video view adapter: used for custom pendant view of video stream in scenarios such as connected host, PK user, and PK containers. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_view_live_live_core_widget/VideoWidgetBuilder-class.html) |
|
|
840
|
-
| **DeviceStore** | Audio/Video device control: microphone (on/off, volume), camera (on/off, switchover, video quality), screen sharing, and real-time monitoring of device status. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceStore-class.html) |
|
|
841
|
-
| **CoHostStore** | Anchor cross-room connection: supports multiple layout templates (dynamic grid, etc.), initiate/accept/reject connection, and manage interactive Anchor connections. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_co_host_store/api_live_co_host_store-library.html) |
|
|
842
|
-
| **BattleStore** | Anchor PK battle: trigger PK (duration configuration/competitor), manage PK status (started/ended), synchronize score, listen to battle results. | [API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_live_battle_store/BattleStore-class.html) |
|
|
843
|
-
|
|
844
|
-
## FAQs
|
|
845
|
-
|
|
846
|
-
### **Why Was the Connection Invitation Sent but Not Received by the Other Party?**
|
|
847
|
-
- Please check whether `targetHostLiveId` is correct and the other party's live streaming room is in normal live streaming status.
|
|
848
|
-
|
|
849
|
-
- Check the network connection is connected. The invitation signaling has a default timeout duration of 30 seconds.
|
|
850
|
-
|
|
851
|
-
### What to Do When Network Disconnection or App Crash Occurs during Connecting Line or PK for an Anchor?
|
|
852
|
-
|
|
853
|
-
**CoHostStore** and **BattleStore** have internal heartbeat and timeout detection mechanisms. If one party exits abnormally, the other will receive notifications through events such as **onCoHostUserLeft** or **onUserExitBattle**. Based on these events, you can handle the UI, for example, prompt "The other party has gone offline" and end the interaction.
|
|
854
|
-
|
|
855
|
-
### Why Can PK Score Only Be Updated Via REST API?
|
|
856
|
-
|
|
857
|
-
Because REST API can satisfy both the **security, real-timeness, and scalability** requirements of PK scores at the same time:
|
|
858
|
-
- **Tamper-proof and fair**: Authentication + data validation is required. Each update can trace the source (such as gift actions) to prevent manual score changes or cheating, guaranteeing fair competitive gaming.
|
|
859
|
-
|
|
860
|
-
- **Multi-end real-time synchronization**: Use a standardized format (such as JSON) to quickly connect the gift, PK, and show systems, ensuring real-time consistency of scores for anchors, audience, and backend with no latency.
|
|
861
|
-
|
|
862
|
-
- **Flexible rule adaptation**: Just modify the backend configuration (such as adjusting the score corresponding to gifts or bonus points) to adapt to business changes, with no need to modify the frontend, reducing iteration cost.
|
|
863
|
-
|
|
864
|
-
### How to Manage the Lifecycle and Event of Custom Views Added Via `VideoWidgetBuilder`?
|
|
865
|
-
|
|
866
|
-
**LiveCoreWidget** automatically manages the addition and removal of views returned by `coHostWidgetBuilder`, `battleWidgetBuilder`, and `battleContainerWidgetBuilder` callbacks, with no need for manual processing. If necessary to handle user interaction (such as click event) in custom views, just add the corresponding event when creating the view.
|