@tencentcloud/sdk-mcp 1.4.7 → 1.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +0 -1
- package/knowledge/bm25-cache.js +73 -0
- package/knowledge/bm25.js +147 -0
- package/knowledge/build-index.js +65 -0
- package/knowledge/chunker.js +167 -0
- package/knowledge/content-loader.js +44 -0
- package/knowledge/extractors.js +25 -0
- package/knowledge/path-meta.js +175 -0
- package/knowledge/search/exact-lookup.js +330 -0
- package/knowledge/search/filter-pool.js +86 -0
- package/knowledge/search/requires-framework.js +72 -0
- package/knowledge/search/search-knowledge.js +226 -0
- package/package.json +9 -9
- package/resource/_schema/feature-aliases.yaml +10 -0
- package/resource/_schema/goal-tags.yaml +72 -0
- package/resource/_schema/products.yaml +16 -0
- package/resource/_schema/trtc-intents.yaml +27 -0
- package/resource/_schema/types.yaml +44 -0
- package/resource/index/component-slugs.json +1 -0
- package/resource/index/manifest.json +1 -0
- package/resource/{doc → integration}/callkit/preset/android/integration.md +32 -28
- package/resource/{doc → integration}/callkit/preset/flutter/integration.md +109 -54
- package/resource/integration/callkit/preset/ios/integration.md +411 -0
- package/resource/integration/callkit/preset/react/integration.md +499 -0
- package/resource/integration/callkit/preset/vue/integration.md +768 -0
- package/resource/{doc/chatkit → integration/chat/preset}/android/integration.md +11 -11
- package/resource/{doc/chatkit → integration/chat/preset}/flutter/integration.md +59 -37
- package/resource/integration/chat/preset/ios/integration.md +568 -0
- package/resource/{doc/chatkit → integration/chat/preset}/react/integration.md +127 -95
- package/resource/integration/chat/preset/uni-app/integration.md +494 -0
- package/resource/{doc/chatkit → integration/chat/preset}/vue/integration.md +163 -143
- package/resource/{doc → integration}/livekit/preset/live/vue/live-list-integration.md +15 -15
- package/resource/{doc → integration}/livekit/preset/live/vue/live-player-desk-integration.md +25 -13
- package/resource/{doc → integration}/livekit/preset/live/vue/live-player-h5-integration.md +15 -9
- package/resource/{doc → integration}/livekit/preset/live/vue/live-pusher-integration.md +31 -26
- package/resource/integration/roomkit/preset/vue/integration.md +571 -0
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +852 -0
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +929 -0
- package/resource/knowledge/callkit/core-sdk/android/offline-push.md +364 -0
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1150 -0
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1216 -0
- package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +412 -0
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1191 -0
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1292 -0
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +537 -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 +168 -0
- package/resource/knowledge/callkit/faq/common.md +180 -0
- package/resource/knowledge/callkit/faq/flutter.md +52 -0
- package/resource/knowledge/callkit/faq/ios.md +116 -0
- package/resource/knowledge/callkit/faq/uniapp-app.md +89 -0
- package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +217 -0
- package/resource/knowledge/callkit/faq/web.md +363 -0
- package/resource/knowledge/callkit/preset/android/api.md +413 -0
- package/resource/knowledge/callkit/preset/flutter/api.md +22 -0
- package/resource/knowledge/callkit/preset/ios/api.md +256 -0
- package/resource/knowledge/callkit/preset/web/api.md +79 -0
- package/resource/knowledge/chat/preset/android/features/chat-setting.md +72 -0
- package/resource/knowledge/chat/preset/android/features/contact-list.md +41 -0
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +123 -0
- package/resource/knowledge/chat/preset/android/features/language.md +142 -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/{doc/chatkit → knowledge/chat/preset}/android/features/theme.md +21 -18
- package/resource/knowledge/chat/preset/android-view/integration.md +448 -0
- package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +62 -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 +163 -0
- package/resource/knowledge/chat/preset/flutter/features/search.md +59 -0
- package/resource/{doc/chatkit → knowledge/chat/preset}/flutter/features/theme.md +47 -19
- package/resource/knowledge/chat/preset/ios/features/chat-setting.md +92 -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 +105 -0
- package/resource/knowledge/chat/preset/ios/features/message-input.md +69 -0
- package/resource/knowledge/chat/preset/ios/features/message-list.md +164 -0
- package/resource/knowledge/chat/preset/ios/features/search.md +94 -0
- package/resource/{doc/chatkit → knowledge/chat/preset}/ios/features/theme.md +54 -51
- package/resource/{doc/chatkit/ios → knowledge/chat/preset/ios-uikit}/integration.md +157 -94
- package/resource/knowledge/chat/preset/react/features/chat-setting.md +123 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/contact-list.md +256 -104
- package/resource/knowledge/chat/preset/react/features/conversation-actions.md +217 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/conversation-list.md +86 -79
- package/resource/knowledge/chat/preset/react/features/conversation-preview.md +99 -0
- package/resource/knowledge/chat/preset/react/features/conversation-search.md +58 -0
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-input.md +30 -83
- package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-list.md +22 -25
- package/resource/knowledge/chat/preset/react/features/search.md +531 -0
- package/resource/knowledge/chat/preset/react/features/theme.md +16 -0
- package/resource/knowledge/chat/preset/vue/features/chat-header.md +331 -0
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/chat-setting.md +0 -4
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/contact-list.md +59 -53
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-actions.md +49 -43
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-list.md +61 -49
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-preview.md +43 -40
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-search.md +1 -1
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-input.md +128 -105
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-list.md +108 -195
- package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/search.md +74 -68
- package/resource/knowledge/chat/preset/vue/features/theme.md +136 -0
- package/resource/knowledge/chat/urls/error-code.md +16 -0
- package/resource/knowledge/chat/urls/product.md +61 -0
- package/resource/knowledge/chat/urls/restapi.md +226 -0
- package/resource/knowledge/chat/urls/sdk/android.md +84 -0
- package/resource/knowledge/chat/urls/sdk/flutter.md +73 -0
- package/resource/knowledge/chat/urls/sdk/ios.md +84 -0
- package/resource/knowledge/chat/urls/sdk/web.md +88 -0
- package/resource/knowledge/chat/urls/webhook.md +73 -0
- package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/AudioEffectStore.md +79 -76
- 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/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/CameraView.md +7 -6
- 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/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/LikeStore.md +12 -10
- 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 +439 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +221 -0
- package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/AudioEffectStore.md +79 -76
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +212 -0
- package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/BaseBeautyStore.md +43 -45
- 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 +420 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +166 -0
- package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LikeStore.md +12 -11
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +281 -0
- package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LiveCoreView.md +49 -42
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +397 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +183 -0
- package/resource/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/AudioEffectStore.md +79 -75
- 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/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/LikeStore.md +12 -10
- 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 +434 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +187 -0
- package/resource/knowledge/livekit/core-sdk/api-reference/web/index.md +780 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audience-list.md +59 -51
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audio-effect.md +37 -34
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-barrage.md +68 -38
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-base-beauty.md +18 -15
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-co-guest-interaction.md +17 -17
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-gift.md +86 -80
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-host-interaction.md +53 -49
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-integration.md +47 -45
- package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-live-list.md +26 -22
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audience-list.md +16 -13
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audio-effect.md +28 -24
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-barrage.md +33 -21
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-base-beauty.md +29 -25
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-co-guest-interaction.md +21 -20
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-gift.md +78 -69
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-host-interaction.md +47 -43
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-integration.md +48 -45
- package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-live-list.md +27 -23
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audience-list.md +15 -12
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audio-effect.md +39 -36
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-barrage.md +42 -29
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-base-beauty.md +19 -16
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-co-guest-interaction.md +20 -19
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-gift.md +55 -49
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-host-interaction.md +50 -46
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-integration.md +48 -46
- package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-live-list.md +26 -22
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audience-list.md +59 -51
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audio-effect.md +41 -38
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-barrage.md +67 -37
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +53 -46
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-gift.md +86 -80
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-host-interaction.md +45 -40
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-integration.md +43 -42
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-room-list.md +523 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audience-list.md +16 -13
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audio-effect.md +54 -50
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-barrage.md +33 -21
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +34 -28
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-gift.md +73 -64
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-integration.md +46 -43
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-room-list.md +165 -148
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audience-list.md +19 -16
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audio-effect.md +40 -37
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-barrage.md +41 -28
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +54 -47
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-gift.md +52 -46
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-host-interaction.md +55 -50
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-integration.md +47 -45
- package/resource/knowledge/livekit/core-sdk/voice/ios/voice-room-list.md +404 -0
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audience-list.md +40 -57
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +38 -49
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-barrage.md +53 -53
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +106 -116
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-gift.md +49 -59
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-integration.md +52 -45
- package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-room-list.md +38 -46
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +915 -0
- package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +179 -0
- package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +419 -0
- package/resource/knowledge/push/config/android/fcm.md +133 -0
- package/resource/knowledge/push/config/android/honor.md +111 -0
- package/resource/knowledge/push/config/android/huawei.md +106 -0
- package/resource/knowledge/push/config/android/meizu.md +121 -0
- package/resource/knowledge/push/config/android/oppo.md +108 -0
- package/resource/knowledge/push/config/android/vivo.md +101 -0
- package/resource/knowledge/push/config/android/xiaomi.md +99 -0
- package/resource/knowledge/push/integration/android.md +1028 -0
- package/resource/knowledge/push/integration/donut.md +271 -0
- package/resource/knowledge/push/integration/flutter.md +363 -0
- package/resource/knowledge/push/integration/harmonyos.md +72 -0
- package/resource/knowledge/push/integration/ios.md +705 -0
- package/resource/knowledge/push/integration/react-native.md +337 -0
- package/resource/knowledge/push/integration/uni-app.md +461 -0
- package/resource/knowledge/push/integration/unity.md +357 -0
- package/resource/knowledge/push/integration/unreal-engine.md +353 -0
- package/resource/knowledge/push/overview/prepare.md +30 -0
- package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/call-user-to-room.md +22 -20
- package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-participant-state.md +22 -193
- package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-state.md +33 -32
- package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/schedule-room.md +30 -29
- package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +230 -0
- package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-participant-state.md +22 -21
- package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-state.md +29 -28
- package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/schedule-room.md +17 -16
- package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/call-user-to-room.md +22 -20
- package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-participant-state.md +49 -218
- package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-state.md +37 -37
- package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/schedule-room.md +28 -28
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/call-user-to-room.md +122 -7
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/device-detection.md +318 -3
- package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +1504 -0
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/free-beauty-panel.md +4 -3
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +709 -0
- package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +1105 -0
- package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +635 -0
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +529 -0
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/schedule-room.md +256 -13
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/screen-share.md +218 -25
- package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/virtual-background.md +4 -3
- package/resource/{doc/roomkit → knowledge/roomkit/preset}/android/integration.md +50 -64
- package/resource/{doc/roomkit → knowledge/roomkit/preset}/flutter/integration.md +34 -31
- package/resource/{doc/roomkit → knowledge/roomkit/preset}/ios/integration.md +45 -53
- package/resource/knowledge/roomkit/preset/react/integration.md +571 -0
- package/resource/{doc → knowledge}/rtcengine/web/how_to_run_web_sdk_demo.md +31 -15
- package/resource/{doc → knowledge}/rtcengine/web/plugin/21-advanced-auto-play-policy.md +9 -3
- package/resource/{doc → knowledge}/rtcengine/web/plugin/22-advanced-audio-mixer.md +1 -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 +6 -6
- 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 +4 -4
- package/resource/{doc → knowledge}/rtcengine/web/plugin/27-advanced-small-stream.md +4 -4
- package/resource/{doc → knowledge}/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
- package/resource/{doc → knowledge}/trtc/android/TRTCCloud.md +547 -495
- package/resource/{doc → knowledge}/trtc/android/TRTCCloudDef.md +434 -403
- package/resource/{doc → knowledge}/trtc/android/TRTCCloudListener.md +394 -348
- package/resource/{doc → knowledge}/trtc/android/TRTCStatistics.md +17 -15
- package/resource/{doc → knowledge}/trtc/android/TXAudioEffectManager.md +227 -197
- package/resource/knowledge/trtc/android/TXBeautyManager.md +415 -0
- package/resource/{doc → knowledge}/trtc/android/TXDeviceManager.md +70 -63
- package/resource/{doc → knowledge}/trtc/android/TXLiteAVCode.md +19 -17
- package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCCloud.md +599 -544
- package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCStatistics.md +17 -15
- package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +502 -0
- package/resource/knowledge/trtc/c++/ITXDeviceManager.md +403 -0
- package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCCloudCallback.md +439 -387
- package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCTypeDef.md +417 -387
- package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TXLiteAVCode.md +19 -17
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloud.md +619 -559
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloudDelegate.md +409 -360
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCStatistics.md +17 -15
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXAudioEffectManager.md +187 -164
- package/resource/knowledge/trtc/ios/TXBeautyManager.md +416 -0
- package/resource/knowledge/trtc/ios/TXDeviceManager.md +399 -0
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiteAVCode.md +19 -17
- package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiveSDKTypeDef.md +422 -396
- package/server-config.js +0 -1
- package/server.js +22 -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 +9 -4
- 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 +2 -1
- package/tools/definitions/get_native_callkit_core_integration_def.js +2 -1
- package/tools/definitions/get_native_chat_uikit_integration_def.js +3 -2
- package/tools/definitions/get_native_livekit_core_integration_def.js +2 -1
- package/tools/definitions/get_usersig_def.js +0 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js +2 -1
- package/tools/definitions/get_web_chat_uikit_integration_def.js +2 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js +4 -3
- package/tools/definitions/get_web_room_core_integration_def.js +46 -0
- package/tools/definitions/get_web_room_uikit_integration_def.js +3 -1
- package/tools/definitions/integration-boundary.js +5 -0
- package/tools/definitions/present_framework_choice_def.js +11 -10
- package/tools/definitions/record_answer_def.js +6 -5
- package/tools/definitions/record_feedback_def.js +4 -3
- package/tools/definitions/search_trtc_knowledge_def.js +69 -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 +4 -11
- 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 +22 -21
- package/utils/report-es-client.js +1 -2
- package/utils/report-runtime-error-cls-client.js +0 -1
- 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 -942
- package/resource/doc/callkit/core-sdk/android/make-call.md +0 -876
- package/resource/doc/callkit/core-sdk/android/offline-push.md +0 -368
- package/resource/doc/callkit/core-sdk/flutter/answer-call.md +0 -1132
- package/resource/doc/callkit/core-sdk/flutter/make-call.md +0 -1206
- package/resource/doc/callkit/core-sdk/flutter/offline-push.md +0 -357
- package/resource/doc/callkit/core-sdk/ios/answer-call.md +0 -1009
- package/resource/doc/callkit/core-sdk/ios/make-call.md +0 -1154
- package/resource/doc/callkit/core-sdk/ios/offline-push.md +0 -470
- package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +0 -1146
- package/resource/doc/callkit/core-sdk/uni-app/make-call.md +0 -1267
- package/resource/doc/callkit/faq/android-faq.md +0 -767
- package/resource/doc/callkit/faq/flutter-faq.md +0 -749
- package/resource/doc/callkit/faq/ios-faq.md +0 -759
- package/resource/doc/callkit/faq/web-faq.md +0 -753
- package/resource/doc/callkit/preset/android/api.md +0 -330
- package/resource/doc/callkit/preset/flutter/api.md +0 -401
- package/resource/doc/callkit/preset/ios/api.md +0 -282
- package/resource/doc/callkit/preset/ios/integration.md +0 -188
- package/resource/doc/callkit/preset/react/api.md +0 -600
- package/resource/doc/callkit/preset/react/integration.md +0 -86
- package/resource/doc/callkit/preset/vue/api.md +0 -600
- package/resource/doc/callkit/preset/vue/integration.md +0 -83
- package/resource/doc/chatkit/android/faq.md +0 -109
- package/resource/doc/chatkit/faq/android_sdk/client-api.md +0 -280
- package/resource/doc/chatkit/faq/common/product.md +0 -82
- package/resource/doc/chatkit/faq/common/server.md +0 -53
- package/resource/doc/chatkit/faq/common/server_error_code.md +0 -74
- package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +0 -183
- package/resource/doc/chatkit/faq/flutter_sdk/faq.md +0 -54
- package/resource/doc/chatkit/faq/ios_sdk/client-api.md +0 -279
- package/resource/doc/chatkit/faq/web_sdk/error_code.md +0 -47
- package/resource/doc/chatkit/faq/web_sdk/faq.md +0 -292
- package/resource/doc/chatkit/flutter/faq.md +0 -22
- package/resource/doc/chatkit/ios/faq.md +0 -109
- 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 -117
- package/resource/doc/chatkit/react/components/chat.md +0 -38
- package/resource/doc/chatkit/react/components/component-list.md +0 -35
- package/resource/doc/chatkit/react/components/conversation-actions.md +0 -174
- package/resource/doc/chatkit/react/components/conversation-preview.md +0 -116
- package/resource/doc/chatkit/react/components/conversation-search.md +0 -57
- package/resource/doc/chatkit/react/components/search.md +0 -282
- package/resource/doc/chatkit/react/components/tuikit.md +0 -43
- package/resource/doc/chatkit/react/faq.md +0 -26
- package/resource/doc/chatkit/vue/components/avatar.md +0 -104
- package/resource/doc/chatkit/vue/components/chat-header.md +0 -149
- package/resource/doc/chatkit/vue/components/chat.md +0 -42
- package/resource/doc/chatkit/vue/components/component-list.md +0 -89
- package/resource/doc/chatkit/vue/components/tuikit.md +0 -45
- package/resource/doc/chatkit/vue/components/userpicker.md +0 -256
- package/resource/doc/chatkit/vue/faq.md +0 -35
- package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +0 -148
- package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +0 -316
- package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +0 -419
- package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +0 -325
- package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +0 -436
- package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +0 -165
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +0 -239
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +0 -74
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +0 -417
- package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +0 -207
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +0 -158
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +0 -304
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +0 -394
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +0 -303
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +0 -410
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +0 -160
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +0 -231
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +0 -375
- package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +0 -170
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +0 -165
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +0 -143
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +0 -298
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +0 -349
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +0 -297
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +0 -471
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +0 -179
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +0 -238
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +0 -74
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +0 -412
- package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +0 -173
- package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +0 -365
- package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +0 -336
- package/resource/doc/livekit/preset/live/vue/api-reference/index.md +0 -780
- package/resource/doc/livekit/preset/live/vue/components/barrage.md +0 -291
- package/resource/doc/livekit/preset/live/vue/components/co-guest-panel.md +0 -88
- package/resource/doc/livekit/preset/live/vue/components/live-audience-list.md +0 -164
- package/resource/doc/livekit/preset/live/vue/components/live-scene-panel.md +0 -130
- package/resource/doc/livekit/preset/live/vue/components/live-view.md +0 -203
- package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +0 -211
- package/resource/doc/livekit/preset/live/vue/faq.md +0 -1
- package/resource/doc/roomkit/faq/common/error-code.md +0 -67
- package/resource/doc/roomkit/flutter/features/call-user-to-room.md +0 -228
- package/resource/doc/roomkit/vue/faq.md +0 -1
- package/resource/doc/roomkit/vue/features/device-state.md +0 -460
- package/resource/doc/roomkit/vue/features/room-chat.md +0 -369
- package/resource/doc/roomkit/vue/features/room-participant-state.md +0 -385
- package/resource/doc/roomkit/vue/features/room-state.md +0 -280
- package/resource/doc/roomkit/vue/features/room-view.md +0 -241
- package/resource/doc/roomkit/vue/integration.md +0 -315
- package/resource/doc/rtcengine/faq/web_sdk/.gitkeep +0 -0
- package/resource/doc/trtc/C++/ITXAudioEffectManager.md +0 -472
- package/resource/doc/trtc/C++/ITXDeviceManager.md +0 -388
- package/resource/doc/trtc/android/TXBeautyManager.md +0 -403
- package/resource/doc/trtc/iOS/TXBeautyManager.md +0 -404
- package/resource/doc/trtc/iOS/TXDeviceManager.md +0 -382
- 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 -28
- package/tools/definitions/get_callkit_api_def.js.map +0 -1
- package/tools/definitions/get_faq_def.js +0 -40
- 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 -33
- 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 -27
- package/tools/definitions/get_web_livekit_api_def.js.map +0 -1
- package/tools/definitions/get_web_livekit_component_detail_def.js +0 -29
- 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 -30
- package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_api_def.js +0 -25
- package/tools/definitions/get_web_trtc_sdk_api_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_integration_def.js +0 -25
- package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +0 -1
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js +0 -25
- 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 -122
- 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.map +0 -1
- /package/resource/{doc/callkit/faq/common → knowledge/callkit/faq}/error-code.md +0 -0
- /package/resource/{doc/livekit/faq/common → knowledge/livekit/faq}/error-code.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/29-advanced-water-mark.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/34-advanced-proxy.md +0 -0
- /package/resource/{doc → knowledge}/rtcengine/web/plugin/35-advanced-ai-denoiser.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/38-advanced-basic-beauty.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
- /package/resource/{doc/rtcengine/faq/common → knowledge/share}/userSig.md +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
`TUILiveKit` 观众列表组件为直播场景提供实时在线观众展示方案,帮助开发者直观掌握直播间观众构成。通过本文档,可快速集成观众列表功能,并支持深度定制以满足业务需求。
|
|
2
|
+
|
|
3
|
+
## 组件构成
|
|
4
|
+
|
|
5
|
+
|**组件名称**|**具体内容**|
|
|
6
|
+
|---------|---------|
|
|
7
|
+
|**观众列表组件(LiveAudienceList)**|负责实时展示直播间在线观众的组件,提供**头像、昵称展示、自定义观众标识和完整列表项定制**等能力,支持通过插槽和属性进行灵活配置。|
|
|
8
|
+
|
|
9
|
+
## 组件接入
|
|
10
|
+
|
|
11
|
+
### 步骤1:环境配置及开通服务
|
|
12
|
+
|
|
13
|
+
在进行快速接入之前,请参考 准备工作,完成相关环境配置及开通对应服务。
|
|
14
|
+
|
|
15
|
+
### 步骤2:安装依赖
|
|
16
|
+
|
|
17
|
+
【npm】
|
|
18
|
+
``` bash
|
|
19
|
+
npm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 --save
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
【pnpm】
|
|
23
|
+
``` bash
|
|
24
|
+
pnpm add tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
【yarn】
|
|
28
|
+
``` bash
|
|
29
|
+
yarn add tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 步骤3:集成观众列表组件
|
|
33
|
+
|
|
34
|
+
在项目中引入并使用观众列表组件,可直接复制如下代码示例用于展示直播间观众列表。
|
|
35
|
+
``` typescript
|
|
36
|
+
<template>
|
|
37
|
+
<UIKitProvider theme="dark">
|
|
38
|
+
<div class="app">
|
|
39
|
+
<div class="live-audience-container">
|
|
40
|
+
<LiveAudienceList class="live-audience-list"/>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</UIKitProvider>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script setup lang="ts">
|
|
47
|
+
import { onMounted } from 'vue';
|
|
48
|
+
import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
|
|
49
|
+
import { LiveAudienceList, useLoginState, useLiveListState } from 'tuikit-atomicx-vue3';
|
|
50
|
+
|
|
51
|
+
const { login } = useLoginState();
|
|
52
|
+
const { joinLive } = useLiveListState();
|
|
53
|
+
|
|
54
|
+
async function initLogin() {
|
|
55
|
+
try {
|
|
56
|
+
await login({
|
|
57
|
+
sdkAppId: 0, // SDKAppID, 可以参考步骤 1 获取
|
|
58
|
+
userId: '', // UserID, 可以参考步骤 1 获取
|
|
59
|
+
userSig: '', // userSig, 可以参考步骤 1 获取
|
|
60
|
+
});
|
|
61
|
+
} catch (error) {
|
|
62
|
+
console.error('登录失败:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
onMounted(async () => {
|
|
67
|
+
await initLogin();
|
|
68
|
+
await joinLive({
|
|
69
|
+
liveId: '输入对应直播间 LiveId', // 进入直播间
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<style>.live-audience-container{display:flex;height:100%;width:300px;padding:20px}.live-audience-list{width:100%;height:100%}</style>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 自定义组件
|
|
78
|
+
|
|
79
|
+
**观众列表组件**提供了灵活的自定义能力,您可以根据业务需求选择不同的定制方式:
|
|
80
|
+
|
|
81
|
+
|**定制场景**|**推荐方式**|**说明**|
|
|
82
|
+
|---------|---------|---------|
|
|
83
|
+
|仅调整组件容器的高度、样式等|Props: `height` / `style`|最简单,几行属性配置即可实现。|
|
|
84
|
+
|在观众头像和昵称之间添加自定义标识(如 VIP 徽章、禁言标识)|Slot: `audience-mark`|通过插槽注入自定义标识元素,保留默认的列表项布局。|
|
|
85
|
+
|完全替换整个观众列表项的渲染,实现排名、自定义布局等|Slot: `audience-item`|最灵活,完全接管每个列表项的渲染逻辑。**优先级高于**`audience-mark`。|
|
|
86
|
+
|
|
87
|
+
| <strong>修改前</strong> | <strong>修改后</strong> | |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
| <strong>自定义观众标识(audience-mark)</strong> | <strong>完全接管列表项渲染(audience-item)</strong> | |
|
|
90
|
+
| | | |
|
|
91
|
+
|
|
92
|
+
### 自定义观众标识(audience-mark 插槽)
|
|
93
|
+
|
|
94
|
+
通过 [audience-mark](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveAudienceListComponent) 插槽,您可以在观众头像和昵称之间插入自定义标识元素(例如 VIP 徽章、禁言状态等),同时保留组件默认的列表项布局。
|
|
95
|
+
|
|
96
|
+
#### 插槽参数
|
|
97
|
+
|
|
98
|
+
|**插槽名**|**参数名**|**参数类型**|**说明**|
|
|
99
|
+
|---------|---------|---------|---------|
|
|
100
|
+
|audience-mark|audience|[AudienceInfo](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-AudienceInfo)|当前观众信息对象,包含 `userId`、`userName`、`avatarUrl`、`isMessageDisabled` 等字段。|
|
|
101
|
+
|
|
102
|
+
以下示例演示了如何根据观众数据动态渲染 **VIP 身份徽章**和**禁言状态标识**:
|
|
103
|
+
``` typescript
|
|
104
|
+
<template>
|
|
105
|
+
<LiveAudienceList>
|
|
106
|
+
<template #audience-mark="{ audience }">
|
|
107
|
+
<div class="custom-mark">
|
|
108
|
+
<span v-if="isVip(audience.userId)" class="vip-badge">VIP</span>
|
|
109
|
+
<span v-if="audience.isMessageDisabled" class="muted-badge">🔇</span>
|
|
110
|
+
</div>
|
|
111
|
+
</template>
|
|
112
|
+
</LiveAudienceList>
|
|
113
|
+
</template>
|
|
114
|
+
|
|
115
|
+
<script setup lang="ts">
|
|
116
|
+
import { LiveAudienceList } from 'tuikit-atomicx-vue3';
|
|
117
|
+
|
|
118
|
+
const vipUserIds = ['user_vip_001', 'user_vip_002'];
|
|
119
|
+
const isVip = (userId: string) => vipUserIds.includes(userId);
|
|
120
|
+
</script>
|
|
121
|
+
|
|
122
|
+
<style scoped>.custom-mark{display:flex;align-items:center;gap:4px}.vip-badge{background:linear-gradient(135deg,#ffd700,#ffb347);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px}.muted-badge{font-size:14px;opacity:.7}</style>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 完全接管列表项渲染(audience-item 插槽)
|
|
126
|
+
|
|
127
|
+
使用 [audience-item](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveAudienceListComponent) 插槽可获取观众的完整信息和列表索引,自由实现排名、自定义布局等效果。
|
|
128
|
+
|
|
129
|
+
#### 插槽参数
|
|
130
|
+
| <strong>插槽名</strong> | <strong>参数名</strong> | <strong>参数类型</strong> | <strong>说明</strong> |
|
|
131
|
+
| --- | --- | --- | --- |
|
|
132
|
+
| audience-item | index | number | 当前观众在列表中的索引位置。 |
|
|
133
|
+
| audience | <a href="https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-AudienceInfo">AudienceInfo</a> | 当前观众信息对象,包含 <code>userId</code>、<code>userName</code>、<code>avatarUrl</code> 等字段。 | |
|
|
134
|
+
|
|
135
|
+
以下示例演示了如何利用 `index` 和 `audience` 数据实现带排名奖牌的观众列表:
|
|
136
|
+
``` typescript
|
|
137
|
+
<template>
|
|
138
|
+
<LiveAudienceList>
|
|
139
|
+
<template #audience-item="{ index, audience }">
|
|
140
|
+
<div class="custom-audience-item">
|
|
141
|
+
<span v-if="index === 0" class="medal">🥇</span>
|
|
142
|
+
<span v-else-if="index === 1" class="medal">🥈</span>
|
|
143
|
+
<span v-else-if="index === 2" class="medal">🥉</span>
|
|
144
|
+
<span v-else class="rank-number">{{ index + 1 }}</span>
|
|
145
|
+
|
|
146
|
+
<span class="name">{{ audience.userName || audience.userId }}</span>
|
|
147
|
+
</div>
|
|
148
|
+
</template>
|
|
149
|
+
</LiveAudienceList>
|
|
150
|
+
</template>
|
|
151
|
+
|
|
152
|
+
<script setup lang="ts">
|
|
153
|
+
import { LiveAudienceList } from 'tuikit-atomicx-vue3';
|
|
154
|
+
</script>
|
|
155
|
+
|
|
156
|
+
<style scoped>.custom-audience-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:rgba(255,255,255,0.05)}.medal{font-size:20px}.rank-number{font-size:14px;font-weight:600;color:rgba(255,255,255,0.5);min-width:24px;text-align:center}.avatar{width:36px;height:36px;border-radius:50%;object-fit:cover}.name{font-size:14px;color:rgba(255,255,255,0.85);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### props 速查表
|
|
160
|
+
|
|
161
|
+
|**参数名**|**参数类型**|**默认值**|**说明**|
|
|
162
|
+
|---------|---------|---------|---------|
|
|
163
|
+
|height|String|'500px'|组件高度,支持 CSS 单位(px、%、vh 等)。|
|
|
164
|
+
|style|CSSProperties|{}|自定义样式对象,用于覆盖组件默认样式。|
|
|
165
|
+
|
|
166
|
+
## 常见问题
|
|
167
|
+
|
|
168
|
+
### 如何区分房主和观众?
|
|
169
|
+
|
|
170
|
+
您可以通过 `useLiveListState` 获取当前直播间信息,将观众的 `userId` 与直播间 [ownerId](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#interface-TUIRoomInfo) 对比来判断:
|
|
171
|
+
``` typescript
|
|
172
|
+
import { useLiveListState } from 'tuikit-atomicx-vue3';
|
|
173
|
+
|
|
174
|
+
const { currentLive } = useLiveListState();
|
|
175
|
+
|
|
176
|
+
function isLiveOwner(userId: string): boolean {
|
|
177
|
+
return userId === currentLive.value?.liveOwner.userId;
|
|
178
|
+
}
|
|
179
|
+
```
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
本文详细介绍了**直播视频组件(LiveView)**的接入方式与自定义能力。您可以直接参考本文示例快速集成组件,也可以根据业务需求对控制栏、插槽和播放器 UI 进行深度定制。
|
|
2
|
+
|
|
3
|
+
## 核心功能
|
|
4
|
+
| <strong>功能分类</strong> | <strong>具体能力</strong> |
|
|
5
|
+
| --- | --- |
|
|
6
|
+
| <strong>智能流切换</strong> | <strong>LiveView</strong> 能够根据当前用户的身份(观众或连麦者)自动切换流类型。<br>- <strong>观众模式</strong>: 组件将播放超低延迟视频流,确保数百万观众都能流畅观看,同时大幅节省流量成本。<br>- <strong>连线模式</strong>: 组件会自动切换到实时音视频流,提供毫秒级的超低延迟,保证连线用户之间实时、清晰的互动体验。 |
|
|
7
|
+
| <strong>多人连麦布局</strong> | 自动适配单人与多人连麦场景的视频流布局,包含 <code>Loading</code> 动画和主播离开提示等状态展示。 |
|
|
8
|
+
| <strong>内置播放器控制栏</strong> | 开箱即用的播放器控制栏,包含<strong>播放/暂停、音量调节、清晰度切换(360P-1080P)、画中画、全屏</strong>等功能。 |
|
|
9
|
+
| <strong>可定制化 UI</strong> | LiveView 提供从轻度到深度的渐进式自定义能力:<br>- <strong>插槽注入</strong>:通过 Slot 在视频流上叠加水印、自定义 Loading、自定义连麦麦位 UI 等。<br>- <strong>控制栏配置</strong>:隐藏/禁用/替换图标等方式定制内置按钮,或添加业务自定义按钮。<br>- <strong>自定义控制栏 UI</strong>:隐藏内置控制栏,通过 <code>useLivePlayerState()</code> 提供的完整响应式状态和控制方法,构建 100% 自定义的播放控制界面。 |
|
|
10
|
+
|
|
11
|
+
## 效果展示
|
|
12
|
+
|
|
13
|
+
|**自定义连麦挂件**|**自定义控制栏操作按钮**|
|
|
14
|
+
|---------|---------|
|
|
15
|
+
|||
|
|
16
|
+
|**自定义刷新时 Loading 效果**|**自定义播放器控制栏 UI 样式**|
|
|
17
|
+
|||
|
|
18
|
+
|
|
19
|
+
## 准备工作
|
|
20
|
+
|
|
21
|
+
在开始调整视频挂件前,请先参考 [主播开播](https://cloud.tencent.com/document/product/647/123470) 和 [观众观看](https://cloud.tencent.com/document/product/647/123004) 完成主流程的搭建。
|
|
22
|
+
|
|
23
|
+
## 组件定制化
|
|
24
|
+
|
|
25
|
+
[LiveView](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent) 提供从轻度到深度的渐进式自定义能力,您可以根据业务需求选择合适的定制方式。
|
|
26
|
+
|
|
27
|
+
### 组件插槽
|
|
28
|
+
|
|
29
|
+
LiveView 提供以下插槽,用于自定义视频流上层的 UI 内容。
|
|
30
|
+
|
|
31
|
+
|**名称**|**参数**|**参数类型**|**说明**|
|
|
32
|
+
|---------|---------|---------|---------|
|
|
33
|
+
|<br>[center-overlay](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent)|-|-|插槽内容会居中叠加在视频流上层,适合放置暂停按钮、水印等自定义元素。|
|
|
34
|
+
|<br>[streamViewUI](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent)|userInfo|<br>[SeatUserInfo](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-SeatUserInfo)|当前麦位上的用户信息,包含 `userId`、`userName`、`avatarUrl`、`microphoneStatus`、`cameraStatus` 等字段。如果麦位为空,则 `userInfo.userId` 为空字符串。|
|
|
35
|
+
|
|
36
|
+
#### center-overlay 插槽
|
|
37
|
+
|
|
38
|
+
使用 [center-overlay](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent) 插槽可以在视频流上层叠加自定义内容,不影响底层视频播放。适合放置水印、暂停按钮、视频刷新时 Loading 等覆盖层元素。
|
|
39
|
+
|
|
40
|
+
##### 基本用法
|
|
41
|
+
``` typescript
|
|
42
|
+
<LiveView>
|
|
43
|
+
<template #center-overlay>
|
|
44
|
+
<div class="watermark-container">
|
|
45
|
+
<div class="watermark-grid">
|
|
46
|
+
<span v-for="n in 20" :key="n" class="watermark-item">Live</span>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</template>
|
|
50
|
+
</LiveView>
|
|
51
|
+
|
|
52
|
+
<style scoped>.watermark-container{position:absolute;inset:0;overflow:hidden;pointer-events:none;user-select:none}.watermark-grid{position:absolute;top:-50%;left:-50%;width:200%;height:200%;display:flex;flex-wrap:wrap;align-content:center;justify-content:center;gap:60px 80px;transform:rotate(-30deg)}.watermark-item{color:rgba(255,255,255,.15);font-size:18px;font-weight:700;letter-spacing:2px;white-space:nowrap}</style>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
##### 自定义刷新 Loading 示例
|
|
56
|
+
|
|
57
|
+
结合 `useLivePlayerState()` 的 `refresh` 方法,实现带品牌 Logo 的刷新加载动画:
|
|
58
|
+
``` typescript
|
|
59
|
+
<template>
|
|
60
|
+
<LiveView>
|
|
61
|
+
<template #center-overlay>
|
|
62
|
+
<div v-if="isRefreshing" class="refresh-overlay">
|
|
63
|
+
|
|
64
|
+
<div class="refresh-spinner" />
|
|
65
|
+
<span class="refresh-text">加载中...</span>
|
|
66
|
+
</div>
|
|
67
|
+
<div v-else class="watermark">LIVE</div>
|
|
68
|
+
</template>
|
|
69
|
+
</LiveView>
|
|
70
|
+
<button @click="handleRefresh">刷新</button>
|
|
71
|
+
</template>
|
|
72
|
+
|
|
73
|
+
<script setup lang="ts">
|
|
74
|
+
import { ref } from 'vue';
|
|
75
|
+
import { LiveView, useLivePlayerState } from 'tuikit-atomicx-vue3';
|
|
76
|
+
|
|
77
|
+
const { refresh } = useLivePlayerState();
|
|
78
|
+
const isRefreshing = ref(false);
|
|
79
|
+
|
|
80
|
+
async function handleRefresh() {
|
|
81
|
+
isRefreshing.value = true;
|
|
82
|
+
await refresh();
|
|
83
|
+
isRefreshing.value = false;
|
|
84
|
+
}
|
|
85
|
+
</script>
|
|
86
|
+
|
|
87
|
+
<style scoped>.refresh-overlay{display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none}.refresh-logo{width:40px;height:40px;object-fit:contain}.refresh-spinner{width:32px;height:32px;border:3px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.refresh-text{color:rgba(255,255,255,.8);font-size:14px}.watermark{color:rgba(255,255,255,.3);font-size:24px;font-weight:700;letter-spacing:2px;pointer-events:none;user-select:none;text-shadow:0 2px 8px rgba(0,0,0,.3)}</style>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### streamViewUI 插槽
|
|
91
|
+
|
|
92
|
+
使用 [streamViewUI](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent) 插槽可以完全接管每个麦位的 UI 渲染。您将获得当前麦位的用户信息,可自由实现主播/观众标识、设备状态展示、自定义布局等。
|
|
93
|
+
|
|
94
|
+
##### 基本用法
|
|
95
|
+
``` typescript
|
|
96
|
+
<template>
|
|
97
|
+
<LiveView @empty-seat-click="handleApplyForSeat">
|
|
98
|
+
<template #streamViewUI="{ userInfo }">
|
|
99
|
+
<div class="custom-stream-ui">
|
|
100
|
+
<span class="user-name">{{ userInfo.userName || '未知用户' }}</span>
|
|
101
|
+
</div>
|
|
102
|
+
</template>
|
|
103
|
+
</LiveView>
|
|
104
|
+
</template>
|
|
105
|
+
|
|
106
|
+
<script setup lang="ts">
|
|
107
|
+
import { LiveView } from 'tuikit-atomicx-vue3';
|
|
108
|
+
|
|
109
|
+
const handleApplyForSeat = (seatIndex: number) => {
|
|
110
|
+
console.log('点击了空麦位,索引:', seatIndex);
|
|
111
|
+
// 在此处发起连麦申请
|
|
112
|
+
};
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<style scoped>.custom-stream-ui{position:absolute;bottom:0;left:0;right:0;padding:8px 12px;background:linear-gradient(transparent,rgba(0,0,0,.6));pointer-events:none}.custom-stream-ui .user-name{color:#fff;font-size:14px;font-weight:500}</style>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
##### 自定义连麦 UI 示例
|
|
119
|
+
``` typescript
|
|
120
|
+
<template>
|
|
121
|
+
<LiveView>
|
|
122
|
+
<template #streamViewUI="{ userInfo }">
|
|
123
|
+
<div class="stream-overlay">
|
|
124
|
+
<div class="top-bar">
|
|
125
|
+
<div class="role-badge" :class="{ 'anchor-badge': isAnchor(userInfo) }">
|
|
126
|
+
<span class="badge-dot" />
|
|
127
|
+
{{ isAnchor(userInfo) ? '主播' : '观众' }}
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="bottom-bar">
|
|
131
|
+
<div class="user-info">
|
|
132
|
+
<span class="user-name-text">{{ userInfo.userName || '未知用户' }}</span>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="device-icons">
|
|
135
|
+
<div class="icon-wrapper" :class="{ off: !isMicOn(userInfo) }">
|
|
136
|
+
<svg viewBox="0 0 24 24" fill="none">
|
|
137
|
+
<path d="M12 2a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" fill="currentColor" />
|
|
138
|
+
<path d="M19 11a7 7 0 0 1-14 0" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
|
|
139
|
+
<path d="M12 18v3M9 21h6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
|
|
140
|
+
</svg>
|
|
141
|
+
<svg v-if="!isMicOn(userInfo)" class="slash-line" viewBox="0 0 24 24">
|
|
142
|
+
<line x1="5" y1="2" x2="19" y2="22" stroke="#ff4d4f" stroke-width="2" stroke-linecap="round" />
|
|
143
|
+
</svg>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="icon-wrapper" :class="{ off: !isCameraOn(userInfo) }">
|
|
146
|
+
<svg viewBox="0 0 24 24" fill="none">
|
|
147
|
+
<rect x="2" y="5.5" width="14.5" height="13" rx="2.5" fill="currentColor" />
|
|
148
|
+
<path d="M17.5 10l3.5-2.2v8.4L17.5 14" fill="currentColor" />
|
|
149
|
+
</svg>
|
|
150
|
+
<svg v-if="!isCameraOn(userInfo)" class="slash-line" viewBox="0 0 24 24">
|
|
151
|
+
<line x1="5" y1="2" x2="19" y2="22" stroke="#ff4d4f" stroke-width="2" stroke-linecap="round" />
|
|
152
|
+
</svg>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</template>
|
|
158
|
+
</LiveView>
|
|
159
|
+
</template>
|
|
160
|
+
|
|
161
|
+
<script setup lang="ts">
|
|
162
|
+
import { LiveView, useLiveListState, DeviceStatus } from 'tuikit-atomicx-vue3';
|
|
163
|
+
import type { SeatUserInfo } from 'tuikit-atomicx-vue3';
|
|
164
|
+
|
|
165
|
+
const { currentLive } = useLiveListState();
|
|
166
|
+
|
|
167
|
+
const isAnchor = (userInfo: SeatUserInfo) => {
|
|
168
|
+
return userInfo.userId === currentLive.value?.liveOwner?.userId;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const isMicOn = (userInfo: SeatUserInfo) => {
|
|
172
|
+
return userInfo.microphoneStatus === DeviceStatus.On;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const isCameraOn = (userInfo: SeatUserInfo) => {
|
|
176
|
+
return userInfo.cameraStatus === DeviceStatus.On;
|
|
177
|
+
};
|
|
178
|
+
</script>
|
|
179
|
+
|
|
180
|
+
<style scoped>.stream-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;box-sizing:border-box;border-radius:6px;overflow:hidden}.top-bar{position:absolute;top:6px;left:6px;z-index:2}.role-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:500;line-height:16px;background:rgba(0,0,0,.45);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:rgba(255,255,255,.85)}.anchor-badge{background:linear-gradient(135deg,#ff6b35,#e8461e);color:#fff}.badge-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.anchor-badge .badge-dot{background:#fff;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,100%{opacity:1}50%{opacity:.4}}.bottom-bar{position:absolute;bottom:0;left:0;right:0;z-index:2;display:flex;align-items:flex-end;justify-content:space-between;padding:28px 8px 6px;background:linear-gradient(to top,rgba(0,0,0,.6) 0%,rgba(0,0,0,.2) 50%,transparent 100%)}.user-info{flex:1;min-width:0}.user-name-text{display:block;color:#fff;font-size:11px;font-weight:500;line-height:16px;text-shadow:0 1px 3px rgba(0,0,0,.7);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-icons{display:flex;align-items:center;gap:3px;flex-shrink:0;margin-left:6px}.icon-wrapper{position:relative;width:16px;height:16px;color:rgba(255,255,255,.9);transition:color .2s ease}.icon-wrapper.off{color:rgba(255,255,255,.3)}.icon-wrapper svg{position:absolute;top:0;left:0;width:100%;height:100%}.icon-wrapper .slash-line{z-index:1}</style>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 自定义控制栏操作按钮
|
|
184
|
+
|
|
185
|
+
[LiveView](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LiveViewComponent) 内置了播放器控制栏(播放/暂停、音量、清晰度、画中画、全屏等按钮)。通过 [useLivePlayerState()](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LivePlayerState) ,您可以 **控制播放行为、定制控制栏按钮、添加自定义按钮、监听播放器事件**。
|
|
186
|
+
|
|
187
|
+
#### 隐藏/禁用内置按钮
|
|
188
|
+
|
|
189
|
+
[buttons](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#buttons) 对象包含所有内置按钮(`play`、`volume`、`resolution`、`pictureInPicture`、`fullscreen`),直接修改即可实时生效,每个按钮支持以下属性( [ButtonState](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-ButtonState) ):
|
|
190
|
+
| <strong>属性</strong> | <strong>类型</strong> | <strong>说明</strong> |
|
|
191
|
+
| --- | --- | --- |
|
|
192
|
+
| visible | boolean | 是否显示按钮。 |
|
|
193
|
+
| disabled | boolean | 是否禁用按钮。 |
|
|
194
|
+
| icon | Component \\| (() => VNode) | 自定义按钮<strong>默认态</strong>图标。<br>- <strong>Play</strong> 按钮:播放时显示(即“暂停”图标,点击可暂停)。<br>- <strong>Volume</strong> 按钮:未静音时显示(即“喇叭”图标)。<br>- <strong>PictureInPicture</strong> 按钮:非画中画时显示。<br>- <strong>Fullscreen</strong> 按钮:非全屏时显示。 |
|
|
195
|
+
| activeIcon | Component \\| (() => VNode) | 自定义按钮<strong>激活态</strong>图标。<br>- <strong>Play</strong> 按钮:暂停时显示(即“播放”图标,点击可恢复播放)。<br>- <strong>Volume</strong> 按钮:静音时显示(即“静音”图标)。<br>- <strong>PictureInPicture</strong> 按钮:画中画模式下显示。<br>- <strong>Fullscreen </strong>按钮:全屏模式下显示。 |
|
|
196
|
+
| tooltip | string | 鼠标悬浮时的提示文案。 |
|
|
197
|
+
|
|
198
|
+
``` typescript
|
|
199
|
+
<script setup lang="ts">
|
|
200
|
+
import { useLivePlayerState } from 'tuikit-atomicx-vue3';
|
|
201
|
+
import MyPauseIcon from './icons/MyPauseIcon.vue';
|
|
202
|
+
import MyPlayIcon from './icons/MyPlayIcon.vue';
|
|
203
|
+
import MyVolumeOnIcon from './icons/MyVolumeOnIcon.vue';
|
|
204
|
+
import MyVolumeOffIcon from './icons/MyVolumeOffIcon.vue';
|
|
205
|
+
|
|
206
|
+
const { buttons } = useLivePlayerState();
|
|
207
|
+
|
|
208
|
+
// 隐藏/禁用按钮
|
|
209
|
+
buttons.pictureInPicture.visible = false; // 隐藏画中画按钮
|
|
210
|
+
buttons.fullscreen.disabled = true; // 禁用全屏按钮
|
|
211
|
+
|
|
212
|
+
// 自定义图标
|
|
213
|
+
buttons.play.icon = MyPauseIcon; // 默认:播放时显示(暂停按钮图标)
|
|
214
|
+
buttons.play.activeIcon = MyPlayIcon; // 激活:暂停时显示(恢复播放图标)
|
|
215
|
+
buttons.volume.icon = MyVolumeOnIcon; // 默认值:未静音时显示
|
|
216
|
+
buttons.volume.activeIcon = MyVolumeOffIcon; // 激活:静音时显示
|
|
217
|
+
|
|
218
|
+
// 自定义工具提示
|
|
219
|
+
buttons.resolution.tooltip = 'Switch Quality';
|
|
220
|
+
</script>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
#### 添加自定义按钮
|
|
224
|
+
|
|
225
|
+
通过 [addCustomButtons](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#addCustomButtons) 在控制栏添加业务按钮(例如分享、刷新):
|
|
226
|
+
``` typescript
|
|
227
|
+
<script setup lang="ts">
|
|
228
|
+
import { useLivePlayerState } from 'tuikit-atomicx-vue3';
|
|
229
|
+
import ShareIcon from './icons/ShareIcon.vue';
|
|
230
|
+
|
|
231
|
+
const { addCustomButtons, refresh } = useLivePlayerState();
|
|
232
|
+
|
|
233
|
+
addCustomButtons([
|
|
234
|
+
{
|
|
235
|
+
id: 'share',
|
|
236
|
+
icon: ShareIcon,
|
|
237
|
+
onClick: () => navigator.clipboard.writeText(window.location.href),
|
|
238
|
+
tooltip: 'Share',
|
|
239
|
+
position: 'end', // 'start' | 'end' | { slot: 'left'|'center'|'right' } | { anchor: ButtonId, position: 'before'|'after' }
|
|
240
|
+
},
|
|
241
|
+
]);
|
|
242
|
+
</script>
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### 监听播放器事件
|
|
246
|
+
|
|
247
|
+
支持的事件有:
|
|
248
|
+
|
|
249
|
+
|事件名|事件参数|说明|
|
|
250
|
+
|---------|---------|---------|
|
|
251
|
+
|[PlayStateChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-PlayStateChange)|isPlaying: boolean|当播放状态发生变化(播放/暂停)时触发。|
|
|
252
|
+
|[VolumeChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-VolumeChange)|volume: number|当音量发生变化时触发。|
|
|
253
|
+
|[FullscreenChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-FullscreenChange)|isFullscreen: boolean|当进入或退出全屏模式时触发。|
|
|
254
|
+
|[PictureInPictureChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-PictureInPictureChange)|isPictureInPicture: boolean|当进入或退出画中画模式时触发。|
|
|
255
|
+
|[ResolutionChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-ResolutionChange)|resolution: [Resolution](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Resolution)|当清晰度切换时触发。|
|
|
256
|
+
|[ControlBarVisibilityChange](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#event-ControlBarVisibilityChange)|visible: boolean|当控制栏可见性发生变化(显示/隐藏)时触发。|
|
|
257
|
+
|
|
258
|
+
``` typescript
|
|
259
|
+
<script setup lang="ts">
|
|
260
|
+
import { ref } from 'vue';
|
|
261
|
+
import { useLivePlayerState, PlayerControlEvent } from 'tuikit-atomicx-vue3';
|
|
262
|
+
|
|
263
|
+
const { subscribeEvent } = useLivePlayerState();
|
|
264
|
+
|
|
265
|
+
const titleVisible = ref(true);
|
|
266
|
+
const roomNameVisible = ref(true);
|
|
267
|
+
|
|
268
|
+
// 根据全屏状态显示/隐藏直播间标题
|
|
269
|
+
subscribeEvent(PlayerControlEvent.FullscreenChange, (isFullscreen: boolean) => {
|
|
270
|
+
titleVisible.value = !isFullscreen;
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// 根据控制栏显隐状态同步显示/隐藏房间名称
|
|
274
|
+
subscribeEvent(PlayerControlEvent.ControlBarVisibilityChange, (visible: boolean) => {
|
|
275
|
+
roomNameVisible.value = visible;
|
|
276
|
+
});
|
|
277
|
+
</script>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 自定义控制栏 UI
|
|
281
|
+
|
|
282
|
+
当内置控制栏的样式和布局无法满足您的业务需求时,您可以隐藏内置控制栏,使用 [useLivePlayerState](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LivePlayerState) 提供的全部**响应式状态**和**控制方法**构建 100% 自定义的播放器界面。
|
|
283
|
+
|
|
284
|
+
> **说明:**`useLivePlayerState()` 是全局单例,在任意组件中调用都共享同一份状态,无需通过 props 层层传递。
|
|
285
|
+
>
|
|
286
|
+
|
|
287
|
+
#### 步骤一:隐藏内置控制栏
|
|
288
|
+
``` typescript
|
|
289
|
+
<script setup lang="ts">
|
|
290
|
+
import { useLivePlayerState } from 'tuikit-atomicx-vue3';
|
|
291
|
+
|
|
292
|
+
const { buttons } = useLivePlayerState();
|
|
293
|
+
|
|
294
|
+
// 隐藏所有内置按钮,内置控制栏将不再渲染
|
|
295
|
+
Object.values(buttons).forEach(btn => (btn.visible = false));
|
|
296
|
+
</script>
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
#### 步骤二:用响应式状态和控制方法驱动自定义 UI
|
|
300
|
+
``` typescript
|
|
301
|
+
<template>
|
|
302
|
+
<div class="my-player" @mouseenter="showControls" @mouseleave="startAutoHide" @mousemove="showControls">
|
|
303
|
+
<LiveView />
|
|
304
|
+
<div class="my-controls" :class="{ hidden: !controlsVisible }">
|
|
305
|
+
<div class="controls-left">
|
|
306
|
+
<button class="ctrl-btn" @click="isPlaying ? pause() : resume()">
|
|
307
|
+
<svg v-if="!isPlaying" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z" /></svg>
|
|
308
|
+
<svg v-else viewBox="0 0 24 24" fill="currentColor"><rect x="6" y="4" width="4" height="16" rx="1" /><rect x="14" y="4" width="4" height="16" rx="1" /></svg>
|
|
309
|
+
</button>
|
|
310
|
+
<button class="ctrl-btn" @click="refresh()">
|
|
311
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M1 4v6h6" /><path d="M23 20v-6h-6" /><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10M23 14l-4.64 4.36A9 9 0 0 1 3.51 15" /></svg>
|
|
312
|
+
</button>
|
|
313
|
+
<div class="volume-group">
|
|
314
|
+
<button class="ctrl-btn" @click="isMuted ? unmute() : mute()">
|
|
315
|
+
<svg v-if="!isMuted" viewBox="0 0 24 24" fill="currentColor"><path d="M11 5L6 9H2v6h4l5 4V5z" /><path d="M15.54 8.46a5 5 0 0 1 0 7.07" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /><path d="M19.07 4.93a10 10 0 0 1 0 14.14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
|
|
316
|
+
<svg v-else viewBox="0 0 24 24" fill="currentColor"><path d="M11 5L6 9H2v6h4l5 4V5z" /><line x1="23" y1="9" x2="17" y2="15" stroke="currentColor" stroke-width="2" stroke-linecap="round" /><line x1="17" y1="9" x2="23" y2="15" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
|
|
317
|
+
</button>
|
|
318
|
+
<input class="volume-slider" type="range" :value="currentVolume" min="0" max="100"
|
|
319
|
+
@input="setVolume(Number(($event.target as HTMLInputElement).value))" />
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
<div class="controls-right">
|
|
323
|
+
<select v-if="resolutionList.value.length > 0" class="resolution-select"
|
|
324
|
+
:value="currentResolution.value?.value"
|
|
325
|
+
@change="switchResolution(resolutionList.value.find(r => r.value === Number(($event.target as HTMLSelectElement).value)))">
|
|
326
|
+
<option v-for="r in resolutionList.value" :key="r.value" :value="r.value">{{ r.label }}</option>
|
|
327
|
+
</select>
|
|
328
|
+
<button class="ctrl-btn" @click="isPictureInPicture ? exitPictureInPicture() : requestPictureInPicture()">
|
|
329
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" /><rect v-if="!isPictureInPicture" x="11" y="9" width="9" height="6" rx="1" fill="currentColor" stroke="none" /><path v-else d="M15 19l-3-3m0 0l3-3m-3 3h8" /></svg>
|
|
330
|
+
</button>
|
|
331
|
+
<button class="ctrl-btn" @click="isFullscreen ? exitFullscreen() : requestFullscreen()">
|
|
332
|
+
<svg v-if="!isFullscreen" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3" /></svg>
|
|
333
|
+
<svg v-else viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 14h4v4M20 10h-4V6M14 10h4V6M4 14h4v4" /></svg>
|
|
334
|
+
</button>
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
</template>
|
|
339
|
+
|
|
340
|
+
<script setup lang="ts">
|
|
341
|
+
import { ref } from 'vue';
|
|
342
|
+
import { LiveView, useLivePlayerState } from 'tuikit-atomicx-vue3';
|
|
343
|
+
|
|
344
|
+
const {
|
|
345
|
+
isPlaying, currentVolume, isMuted, isFullscreen,
|
|
346
|
+
isPictureInPicture, currentResolution, resolutionList,
|
|
347
|
+
buttons,
|
|
348
|
+
pause, resume, refresh,
|
|
349
|
+
setVolume, mute, unmute,
|
|
350
|
+
requestFullscreen, exitFullscreen,
|
|
351
|
+
requestPictureInPicture, exitPictureInPicture,
|
|
352
|
+
switchResolution,
|
|
353
|
+
} = useLivePlayerState();
|
|
354
|
+
|
|
355
|
+
// 隐藏所有内置按钮
|
|
356
|
+
Object.values(buttons).forEach(btn => (btn.visible = false));
|
|
357
|
+
|
|
358
|
+
// 控制栏自动显隐
|
|
359
|
+
const controlsVisible = ref(true);
|
|
360
|
+
let autoHideTimer: ReturnType<typeof setTimeout> | null = null;
|
|
361
|
+
|
|
362
|
+
function showControls() {
|
|
363
|
+
controlsVisible.value = true;
|
|
364
|
+
startAutoHide();
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function startAutoHide() {
|
|
368
|
+
if (autoHideTimer) clearTimeout(autoHideTimer);
|
|
369
|
+
autoHideTimer = setTimeout(() => { controlsVisible.value = false; }, 3000);
|
|
370
|
+
}
|
|
371
|
+
</script>
|
|
372
|
+
|
|
373
|
+
<style scoped>.my-player{position:relative;width:100%;height:100%}.my-controls{position:absolute;bottom:0;left:0;right:0;z-index:20;pointer-events:auto;display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:linear-gradient(to top,rgba(0,0,0,.75) 0%,rgba(0,0,0,.3) 70%,transparent 100%);transition:opacity .3s ease,transform .3s ease}.my-controls.hidden{opacity:0;transform:translateY(8px);pointer-events:none}.controls-left,.controls-right{display:flex;align-items:center;gap:4px}.ctrl-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:rgba(255,255,255,.85);cursor:pointer;transition:background .15s ease,color .15s ease}.ctrl-btn:hover{background:rgba(255,255,255,.12);color:#fff}.ctrl-btn:active{background:rgba(255,255,255,.2)}.ctrl-btn svg{width:18px;height:18px}.volume-group{display:flex;align-items:center;gap:2px}.volume-slider{width:70px;height:3px;-webkit-appearance:none;appearance:none;background:rgba(255,255,255,.25);border-radius:2px;outline:none;cursor:pointer}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;width:10px;height:10px;border-radius:50%;background:#fff;cursor:pointer;box-shadow:0 0 4px rgba(0,0,0,.3)}.resolution-select{height:28px;padding:0 8px;border:1px solid rgba(255,255,255,.15);border-radius:6px;background:rgba(0,0,0,.4);color:rgba(255,255,255,.85);font-size:11px;cursor:pointer;outline:none}.resolution-select:hover{border-color:rgba(255,255,255,.35)}.resolution-select option{background:#1a1a1a;color:#fff}</style>
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### 播放控制 API 汇总
|
|
377
|
+
|
|
378
|
+
以下 API 均通过 [useLivePlayerState()](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-LivePlayerState) 获取:
|
|
379
|
+
|
|
380
|
+
|**分类**|**API**|**说明**|
|
|
381
|
+
|---------|---------|---------|
|
|
382
|
+
|响应式状态|isPlaying、isMuted、currentVolume、isFullscreen、isPictureInPicture、controlBarVisible、currentResolution、resolutionList、buttons|可直接绑定到模板的响应式状态。[buttons](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#buttons) 可通过赋值控制内置按钮的显隐、禁用和图标。|
|
|
383
|
+
|播放控制|pause()、resume()、refresh()|暂停、恢复播放、刷新(重新拉流)。|
|
|
384
|
+
|音量控制|setVolume(volume)、mute()、unmute()|设置音量(0-100)、静音、取消静音。|
|
|
385
|
+
|全屏|requestFullscreen()、exitFullscreen()|进入/退出全屏模式。|
|
|
386
|
+
|画中画|requestPictureInPicture()、exitPictureInPicture()|进入/退出画中画模式。|
|
|
387
|
+
|清晰度|switchResolution(resolution)|切换清晰度,参数为 [Resolution](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Resolution) 对象(含 label 和 value)。|
|
|
388
|
+
|控制栏|showControlBar()、hideControlBar()、setAutoHideDelay(ms)|显示/隐藏控制栏、设置自动隐藏延迟。|
|
|
389
|
+
|自定义按钮|addCustomButtons(buttons)|添加自定义按钮到控制栏,相同 id 自动更新。|
|
|
390
|
+
|事件订阅|subscribeEvent(event, callback), unsubscribeEvent(event, callback)|订阅/取消订阅播放器事件。建议在进入直播间前完成注册。|
|
|
391
|
+
|
|
392
|
+
## 常见问题
|
|
393
|
+
|
|
394
|
+
### 如何解决浏览器自动播放受限导致的黑屏问题?
|
|
395
|
+
|
|
396
|
+
出于用户体验考虑,现代浏览器对网页自动播放功能实施了限制性策略。您可以参考如下代码自定义播放受限弹窗,引导用户与页面交互后恢复播放。
|
|
397
|
+
``` typescript
|
|
398
|
+
import TUIRoomEngine, { TUIAutoPlayCallbackInfo, TUIRoomEvents } from '@tencentcloud/tuiroom-engine-js';
|
|
399
|
+
import { TUIMessageBox } from '@tencentcloud/uikit-base-component-vue3';
|
|
400
|
+
import { useRoomEngine } from 'tuikit-atomicx-vue3';
|
|
401
|
+
|
|
402
|
+
// LiveView 组件的播放能力由底层的 TUIRoomEngine 提供支持。您可以监听该引擎的事件来处理更底层的播放问题
|
|
403
|
+
const roomEngine = useRoomEngine();
|
|
404
|
+
|
|
405
|
+
TUIRoomEngine.once('ready', () => {
|
|
406
|
+
roomEngine.instance?.on(TUIRoomEvents.onAutoPlayFailed, handleAutoPlayFailed);
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
function handleAutoPlayFailed(event: TUIAutoPlayCallbackInfo) {
|
|
410
|
+
// 可以自行弹窗引导用户与页面发生交互,交互后调用 event.resume() 方法恢复播放
|
|
411
|
+
TUIMessageBox.alert({
|
|
412
|
+
content: 'Content is ready. Click the button to start playback',
|
|
413
|
+
confirmText: 'Play',
|
|
414
|
+
callback: () => {
|
|
415
|
+
event.resume();
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
```
|