@tencent-rtc/mcp 1.3.9 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/android-faq.md} +10 -22
- package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/flutter-faq.md} +10 -22
- package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/ios-faq.md} +10 -22
- package/resource/doc/callkit/preset/android/api.md +296 -0
- package/resource/doc/{tuicallkit → callkit/preset}/android/integration.md +53 -365
- package/resource/doc/callkit/preset/flutter/api.md +410 -0
- package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +35 -97
- package/resource/doc/callkit/preset/ios/api.md +80 -0
- package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +37 -118
- package/resource/doc/callkit/preset/react/api.md +501 -0
- package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +5 -20
- package/resource/doc/callkit/preset/vue/api.md +501 -0
- package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +4 -19
- package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -38
- package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
- package/resource/doc/{chatuikit → chatkit}/android/integration.md +28 -121
- package/resource/doc/chatkit/faq/android_sdk/client-api.md +281 -0
- package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +0 -1
- package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -1
- package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +199 -0
- package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
- package/resource/doc/chatkit/faq/ios_sdk/client-api.md +235 -0
- package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +3 -3
- package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
- package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +18 -87
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -38
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
- package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +47 -165
- package/resource/doc/{chatuikit → chatkit}/react/components/avatar.md +0 -33
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +8 -49
- package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +6 -35
- package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +0 -6
- package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -11
- package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +96 -502
- package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
- package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
- package/resource/doc/chatkit/react/components/conversation-preview.md +118 -0
- package/resource/doc/chatkit/react/components/conversation-search.md +60 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -337
- package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +20 -212
- package/resource/doc/chatkit/react/components/search.md +243 -0
- package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +1 -47
- package/resource/doc/{chatuikit → chatkit}/react/integration.md +21 -81
- package/resource/doc/{chatuikit → chatkit}/vue/components/avatar.md +0 -33
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -48
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +3 -5
- package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +0 -5
- package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -15
- package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
- package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -492
- package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
- package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +2 -223
- package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -252
- package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
- package/resource/doc/{chatuikit → chatkit}/vue/components/tuikit.md +7 -21
- package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +3 -62
- package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
- package/resource/doc/{chatuikit → chatkit}/vue/integration.md +22 -23
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +18 -89
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +28 -141
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +20 -112
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +59 -193
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +94 -344
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +107 -515
- package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +33 -173
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +14 -93
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -179
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +19 -107
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -166
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -163
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +69 -443
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-integration.md +107 -492
- package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +23 -165
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +35 -111
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +35 -193
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +31 -144
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +24 -116
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +37 -171
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +79 -459
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +69 -320
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +85 -502
- package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +32 -169
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-audience-list.md +18 -89
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-audio-effect.md +34 -192
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-barrage.md +28 -141
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-co-guest-interaction.md +50 -259
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-gift.md +75 -455
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-host-interaction.md +51 -265
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-integration.md +61 -427
- package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-room-list.md +33 -173
- package/resource/doc/livekit/{voice → core-sdk/voice}/flutter/voice-co-guest-interaction.md +44 -203
- package/resource/doc/livekit/{voice → core-sdk/voice}/flutter/voice-integration.md +56 -416
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-audience-list.md +35 -111
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-audio-effect.md +35 -193
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-barrage.md +31 -144
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-co-guest-interaction.md +43 -252
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-gift.md +79 -459
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-host-interaction.md +46 -264
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-integration.md +61 -445
- package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-room-list.md +32 -169
- package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -2
- package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
- package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
- package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +10 -49
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +26 -144
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +12 -75
- package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +36 -227
- package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +215 -0
- package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
- package/resource/doc/livekit/preset/live/vue/live-list-integration.md +241 -0
- package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +299 -0
- package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +300 -0
- package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +743 -0
- package/resource/doc/roomkit/vue/faq.md +1 -0
- package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
- package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
- package/resource/doc/roomkit/vue/features/device-state.md +24 -44
- package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
- package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
- package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
- package/resource/doc/roomkit/vue/features/room-state.md +25 -34
- package/resource/doc/roomkit/vue/features/room-view.md +30 -125
- package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
- package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
- package/resource/doc/roomkit/vue/features/virtual-background.md +13 -29
- package/resource/doc/roomkit/vue/integration.md +21 -76
- package/resource/doc/rtcengine/faq/common/error_code.md +1 -0
- package/resource/doc/rtcengine/faq/web/web.md +14 -24
- package/resource/doc/rtcengine/web/api.md +1 -3
- package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +3 -10
- package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +1 -5
- package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +1 -2
- package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -4
- package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +3 -5
- package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +1 -7
- package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +0 -2
- package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -8
- package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +11 -11
- package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +12 -88
- package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -5
- package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +30 -37
- package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +13 -90
- package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -2
- package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +1 -2
- package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +19 -19
- package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
- package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -5
- package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
- package/resource/doc/trtc/C++/ITRTCCloud.md +686 -2835
- package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
- package/resource/doc/trtc/C++/ITXAudioEffectManager.md +202 -1022
- package/resource/doc/trtc/C++/ITXDeviceManager.md +126 -767
- package/resource/doc/trtc/C++/TRTCCloudCallback.md +579 -2147
- package/resource/doc/trtc/C++/TRTCTypeDef.md +703 -3378
- package/resource/doc/trtc/C++/TXLiteAVCode.md +116 -908
- package/resource/doc/trtc/android/TRTCCloud.md +606 -2573
- package/resource/doc/trtc/android/TRTCCloudDef.md +752 -3640
- package/resource/doc/trtc/android/TRTCCloudListener.md +581 -2008
- package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/android/TXAudioEffectManager.md +202 -1022
- package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
- package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
- package/resource/doc/trtc/android/TXLiteAVCode.md +114 -892
- package/resource/doc/trtc/iOS/TRTCCloud.md +694 -2904
- package/resource/doc/trtc/iOS/TRTCCloudDef.md +726 -3498
- package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +543 -2028
- package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
- package/resource/doc/trtc/iOS/TXAudioEffectManager.md +174 -877
- package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
- package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
- package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
- package/server.js +1 -5
- package/server.js.map +1 -1
- package/tools/call/get_callkit_api.js +32 -0
- package/tools/call/get_callkit_api.js.map +1 -0
- package/tools/call/get_native_call_uikit_integration.js +34 -0
- package/tools/call/get_native_call_uikit_integration.js.map +1 -0
- package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
- package/tools/call/get_web_call_uikit_integration.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
- package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
- package/tools/chat/get_native_chat_uikit_integration.js +45 -0
- package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
- package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
- package/tools/chat/get_web_chat_uikit_integration.js +45 -0
- package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
- package/tools/common/get_faq.js +265 -0
- package/tools/common/get_faq.js.map +1 -0
- package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
- package/tools/common/get_usersig.js.map +1 -0
- package/tools/common/present_framework_choice.js +63 -0
- package/tools/common/present_framework_choice.js.map +1 -0
- package/tools/common/record_skill_session.js +58 -0
- package/tools/common/record_skill_session.js.map +1 -0
- package/tools/definitions/get_callkit_api_def.js +29 -0
- package/tools/definitions/get_callkit_api_def.js.map +1 -0
- package/tools/definitions/get_faq_def.js +17 -18
- package/tools/definitions/get_faq_def.js.map +1 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js +15 -34
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
- package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -41
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_livekit_core_features_def.js +34 -0
- package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js +34 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
- package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
- package/tools/definitions/get_usersig_def.js +17 -22
- package/tools/definitions/get_usersig_def.js.map +1 -1
- package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
- package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
- package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
- package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_live_uikit_integration_def.js +15 -18
- package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_livekit_api_def.js +30 -0
- package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js +32 -0
- package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
- package/tools/definitions/get_web_room_uikit_integration_def.js +15 -46
- package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_web_roomkit_feature_detail_def.js +31 -0
- package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js +27 -0
- package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
- package/tools/definitions/present_framework_choice_def.js +24 -12
- package/tools/definitions/present_framework_choice_def.js.map +1 -1
- package/tools/definitions/record_skill_session_def.js +31 -0
- package/tools/definitions/record_skill_session_def.js.map +1 -0
- package/tools/index.js +49 -61
- package/tools/index.js.map +1 -1
- package/tools/live/get_native_livekit_core_features.js +65 -0
- package/tools/live/get_native_livekit_core_features.js.map +1 -0
- package/tools/live/get_native_livekit_core_integration.js +59 -0
- package/tools/live/get_native_livekit_core_integration.js.map +1 -0
- package/tools/live/get_web_live_uikit_integration.js +48 -0
- package/tools/live/get_web_live_uikit_integration.js.map +1 -0
- package/tools/live/get_web_livekit_api.js +32 -0
- package/tools/live/get_web_livekit_api.js.map +1 -0
- package/tools/live/get_web_livekit_component_detail.js +34 -0
- package/tools/live/get_web_livekit_component_detail.js.map +1 -0
- package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
- package/tools/room/get_web_room_uikit_integration.js.map +1 -0
- package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
- package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
- package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
- package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
- package/utils/generate-structured-result.js +61 -17
- package/utils/generate-structured-result.js.map +1 -1
- package/utils/report-cls-client.js +21 -1
- package/utils/report-cls-client.js.map +1 -1
- package/utils/report-es-client.js +2 -2
- package/resource/doc/chatuikit/android/workflow.md +0 -713
- package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1371
- package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -932
- package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1119
- package/resource/doc/chatuikit/flutter/workflow.md +0 -941
- package/resource/doc/chatuikit/react/components/conversation-list.md +0 -1017
- package/resource/doc/chatuikit/react/components/search.md +0 -745
- package/resource/doc/chatuikit/react/create-group.md +0 -23
- package/resource/doc/chatuikit/react/init.md +0 -26
- package/resource/doc/chatuikit/react/workflow.md +0 -258
- package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
- package/resource/doc/chatuikit/vue/create-group.md +0 -25
- package/resource/doc/chatuikit/vue/init.md +0 -40
- package/resource/doc/chatuikit/vue/workflow.md +0 -395
- package/resource/doc/livekit/live/android/workflow.md +0 -320
- package/resource/doc/livekit/live/flutter/workflow.md +0 -353
- package/resource/doc/livekit/live/ios/workflow.md +0 -454
- package/resource/doc/livekit/live/vue/components/barrage.md +0 -616
- package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -446
- package/resource/doc/livekit/live/vue/faq.md +0 -0
- package/resource/doc/livekit/live/vue/live-list-integration.md +0 -200
- package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -269
- package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -269
- package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -595
- package/resource/doc/livekit/live/vue/states/live-state.md +0 -3591
- package/resource/doc/livekit/live/vue/workflow.md +0 -218
- package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -312
- package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -430
- package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -679
- package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -671
- package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -271
- package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
- package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
- package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
- package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
- package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -865
- package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -657
- package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -437
- package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -335
- package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
- package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -327
- package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -507
- package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
- package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -659
- package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
- package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -814
- package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1000
- package/resource/doc/roomkit/vue/features/workflow.md +0 -553
- package/resource/doc/roomkit/vue/workflow.md +0 -733
- package/resource/doc/tuicallkit/android/workflow.md +0 -441
- package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -784
- package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -610
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -938
- package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -897
- package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -469
- package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -781
- package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -398
- package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
- package/resource/doc/tuicallkit/react/api.md +0 -1404
- package/resource/doc/tuicallkit/vue/api.md +0 -1406
- package/resource/doc/tuicallkit/vue/faq.md +0 -36
- package/tools/call/get-native-call-integration.js +0 -43
- package/tools/call/get-native-call-integration.js.map +0 -1
- package/tools/call/get-web-call-api.js +0 -27
- package/tools/call/get-web-call-api.js.map +0 -1
- package/tools/call/get-web-call-integration.js.map +0 -1
- package/tools/chat/get-native-chat-feature-detail.js +0 -30
- package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
- package/tools/chat/get-native-chat-integration.js +0 -45
- package/tools/chat/get-native-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-component-detail.js +0 -31
- package/tools/chat/get-web-chat-component-detail.js.map +0 -1
- package/tools/chat/get-web-chat-integration.js +0 -45
- package/tools/chat/get-web-chat-integration.js.map +0 -1
- package/tools/chat/get-web-chat-uikit-init.js +0 -28
- package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
- package/tools/chat/get-web-create-group-doc.js +0 -28
- package/tools/chat/get-web-create-group-doc.js.map +0 -1
- package/tools/common/get-faq.js +0 -91
- package/tools/common/get-faq.js.map +0 -1
- package/tools/common/get-usersig.js.map +0 -1
- package/tools/common/present-framework-choice.js +0 -16
- package/tools/common/present-framework-choice.js.map +0 -1
- package/tools/common/present-scenario-choice.js +0 -16
- package/tools/common/present-scenario-choice.js.map +0 -1
- package/tools/common/record-prompt.js +0 -55
- package/tools/common/record-prompt.js.map +0 -1
- package/tools/common/record-result.js +0 -60
- package/tools/common/record-result.js.map +0 -1
- package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
- package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_native_live_api_def.js +0 -23
- package/tools/definitions/get_native_live_api_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -87
- package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +0 -75
- package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
- package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -63
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
- package/tools/definitions/get_trtc_native_api_def.js +0 -16
- package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
- package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
- package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
- package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
- package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
- package/tools/definitions/get_web_create_group_doc_def.js +0 -18
- package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
- package/tools/definitions/get_web_live_state_detail_def.js +0 -19
- package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
- package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
- package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_feature_detail_def.js +0 -92
- package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
- package/tools/definitions/get_web_room_state_detail_def.js +0 -19
- package/tools/definitions/get_web_room_state_detail_def.js.map +0 -1
- package/tools/definitions/present_scenario_choice_def.js +0 -53
- package/tools/definitions/present_scenario_choice_def.js.map +0 -1
- package/tools/definitions/record_prompt_def.js +0 -58
- package/tools/definitions/record_prompt_def.js.map +0 -1
- package/tools/definitions/record_result_def.js +0 -46
- package/tools/definitions/record_result_def.js.map +0 -1
- package/tools/live/get-native-live-uikit-integration.js +0 -177
- package/tools/live/get-native-live-uikit-integration.js.map +0 -1
- package/tools/live/get-web-live-component-detail.js +0 -31
- package/tools/live/get-web-live-component-detail.js.map +0 -1
- package/tools/live/get-web-live-state-detail.js +0 -31
- package/tools/live/get-web-live-state-detail.js.map +0 -1
- package/tools/live/get-web-live-uikit-integration.js +0 -52
- package/tools/live/get-web-live-uikit-integration.js.map +0 -1
- package/tools/live/get_native_live_uikit_extra_features.js +0 -105
- package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
- package/tools/live/get_native_live_uikit_interaction.js +0 -194
- package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
- package/tools/native_live/get-native-live-api.js +0 -31
- package/tools/native_live/get-native-live-api.js.map +0 -1
- package/tools/room/get-web-room-feature-detail.js.map +0 -1
- package/tools/room/get-web-room-integration.js.map +0 -1
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
- package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
- package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
- package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
- package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
- package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
- package/tools/trtc/get-trtc-native-api.js +0 -31
- package/tools/trtc/get-trtc-native-api.js.map +0 -1
- package/utils/handle-component-name.js +0 -33
- package/utils/handle-component-name.js.map +0 -1
- /package/resource/doc/{chatuikit/iOS/workflow.md → callkit/core-sdk/.gitkeep} +0 -0
- /package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +0 -0
- /package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +0 -0
- /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
- /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
- /package/resource/doc/roomkit/faq/common/{error_code.md → error-code.md} +0 -0
|
@@ -0,0 +1,743 @@
|
|
|
1
|
+
This document provides a guide for integrating the **Host Live Start Page** from the TUILiveKit Demo. You'll learn how to embed our start page into your project and customize the style, layout, and features of the live streaming interface.
|
|
2
|
+
|
|
3
|
+
## Feature Demo
|
|
4
|
+
- **Landscape Go Live**
|
|
5
|
+
|
|
6
|
+
- **Portrait Go Live**
|
|
7
|
+
|
|
8
|
+
## Feature Overview
|
|
9
|
+
- **Scene Source Management**: Add multiple cameras, share your screen or windows, and use local images as sources.
|
|
10
|
+
|
|
11
|
+
- **Live Stream Layout**: Drag, zoom, and use quick menu actions for scene sources, including mirroring, rotation, and layer adjustments.
|
|
12
|
+
|
|
13
|
+
- **Audience Guest Feature**: Enable audience guest connections within the live room, with several built-in guest layouts.
|
|
14
|
+
|
|
15
|
+
- **Host PK**: Connect with other hosts across rooms for PK battles.
|
|
16
|
+
|
|
17
|
+
- **Interactive Chat**: Send and receive text and emoji messages for real-time chat.
|
|
18
|
+
|
|
19
|
+
- **Audience Management**: Mute or remove audience members from the live room.
|
|
20
|
+
|
|
21
|
+
## Quick Integration
|
|
22
|
+
|
|
23
|
+
### Step 1: Environment Setup and Service Activation
|
|
24
|
+
|
|
25
|
+
Before you begin, see Preparations for component integration and login implementation.
|
|
26
|
+
|
|
27
|
+
### Step 2: Install Dependencies
|
|
28
|
+
|
|
29
|
+
【npm】
|
|
30
|
+
``` bash
|
|
31
|
+
npm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 --save
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
【pnpm】
|
|
35
|
+
``` bash
|
|
36
|
+
pnpm add tuikit-atomicx-vue3 @tencentcloud/livekit-web-vue3 @tencentcloud/uikit-base-component-vue3
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
【yarn】
|
|
40
|
+
``` bash
|
|
41
|
+
yarn add tuikit-atomicx-vue3 @tencentcloud/livekit-web-vue3 @tencentcloud/uikit-base-component-vue3
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Step 3: Integrate Host Go Live Page
|
|
45
|
+
|
|
46
|
+
Create a `live-pusher.vue` file in your project. Copy the code below into your new `live-pusher.vue` file to integrate the full **Host Live Start Page**.
|
|
47
|
+
|
|
48
|
+
> **Note:**
|
|
49
|
+
>
|
|
50
|
+
|
|
51
|
+
> You can copy the code below directly into your project, or visit the [Live Start Page](https://github.com/Tencent-RTC/TUILiveKit/blob/main/Web/web-vite-vue3/src/TUILiveKit/LivePusherView.vue) for the full source code.
|
|
52
|
+
>
|
|
53
|
+
|
|
54
|
+
``` typescript
|
|
55
|
+
<template>
|
|
56
|
+
<UIKitProvider theme="dark">
|
|
57
|
+
<div class="custom-live-pusher">
|
|
58
|
+
<!-- Main Content Area -->
|
|
59
|
+
<div class="main-content">
|
|
60
|
+
<!-- Left: Scene Sources and Tools -->
|
|
61
|
+
<div class="left-panel">
|
|
62
|
+
<div class="scene-section">
|
|
63
|
+
<div class="panel-title">Scene Source</div>
|
|
64
|
+
<LiveScenePanel />
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- Center: Live Stream Area -->
|
|
69
|
+
<div class="center-panel">
|
|
70
|
+
<div class="stream-section">
|
|
71
|
+
<div class="stream-header">
|
|
72
|
+
<div class="stream-title">
|
|
73
|
+
<span>{{ liveName }}</span>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="stream-audience">{{ audienceCount }} viewers</div>
|
|
76
|
+
</div>
|
|
77
|
+
<StreamMixer />
|
|
78
|
+
</div>
|
|
79
|
+
<div class="live-controls">
|
|
80
|
+
<div class="bottom-panel">
|
|
81
|
+
<!-- <MediaDeviceSetting />// For media settings, refer to the Advanced Feature Integration section below
|
|
82
|
+
<CoGuestButton /> // For audience guest feature, refer to the Advanced Feature Integration section below
|
|
83
|
+
<OrientationSwitch /> // For layout settings, refer to the Advanced Feature Integration section below
|
|
84
|
+
<LayoutSwitch /> // For landscape/portrait streaming, refer to the Advanced Feature Integration section below -->
|
|
85
|
+
</div>
|
|
86
|
+
<TUIButton type="primary" v-if="!currentLive?.liveId" @click="handleStartLive">Start Live</TUIButton>
|
|
87
|
+
<TUIButton color="red" v-else @click="handleStopLive">Stop Live</TUIButton>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<!-- Right: Audience Interaction -->
|
|
92
|
+
<div class="right-panel">
|
|
93
|
+
<div class="audience-section">
|
|
94
|
+
<div class="panel-title">Online Audience ({{ audienceCount }})</div>
|
|
95
|
+
<LiveAudienceList />
|
|
96
|
+
</div>
|
|
97
|
+
<div class="message-section">
|
|
98
|
+
<div class="panel-title">Message List</div>
|
|
99
|
+
<BarrageList />
|
|
100
|
+
<BarrageInput />
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</UIKitProvider>
|
|
107
|
+
</template>
|
|
108
|
+
|
|
109
|
+
<script setup lang="ts">
|
|
110
|
+
import { onMounted } from 'vue';
|
|
111
|
+
import { UIKitProvider, TUIButton } from '@tencentcloud/uikit-base-component-vue3';
|
|
112
|
+
import { LiveScenePanel, StreamMixer, LiveAudienceList, BarrageList, BarrageInput, useLiveListState, useLiveAudienceState, useLoginState } from 'tuikit-atomicx-vue3';
|
|
113
|
+
|
|
114
|
+
const { login, setSelfInfo } = useLoginState();
|
|
115
|
+
const { createLive, currentLive, endLive } = useLiveListState();
|
|
116
|
+
const { audienceCount } = useLiveAudienceState();
|
|
117
|
+
const liveName = 'My Live Room';
|
|
118
|
+
|
|
119
|
+
const handleStartLive = async () => {
|
|
120
|
+
// Create live room
|
|
121
|
+
await createLive({
|
|
122
|
+
liveId: 'my-live-room', // Live Room ID
|
|
123
|
+
liveName: liveName, // Live Room Name
|
|
124
|
+
coverUrl: '', // Live Room Cover URL
|
|
125
|
+
isPublicVisible: true, // Publicly Visible
|
|
126
|
+
seatLayoutTemplateId: 600, // Seat Layout Template ID
|
|
127
|
+
});
|
|
128
|
+
// Set personal info
|
|
129
|
+
await setSelfInfo({
|
|
130
|
+
userName: 'My Name/Nickname', // Username
|
|
131
|
+
avatarUrl: '', // Avatar URL
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const handleStopLive = async () => {
|
|
136
|
+
await endLive();
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
async function initLogin() {
|
|
140
|
+
try {
|
|
141
|
+
await login({
|
|
142
|
+
sdkAppId: 0, // SDKAppID, refer to Step 1 for details
|
|
143
|
+
userId: '', // UserID, refer to Step 1 for details
|
|
144
|
+
userSig: '', // userSig, refer to Step 1 for details
|
|
145
|
+
});
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error('Login failed:', error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
onMounted(async () => {
|
|
152
|
+
await initLogin();
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
</script>
|
|
156
|
+
|
|
157
|
+
<style>html,body,#app{height:100%;width:100%;margin:0;padding:0}</style>
|
|
158
|
+
<style scoped>.custom-live-pusher,.left-panel{flex-direction:column;display:flex}.custom-live-pusher,.live-title{color:var(--text-color-primary)}.live-controls,.tools-section,.top-controls{backdrop-filter:blur(10px)}*{box-sizing:border-box;margin:0;padding:0}:global(::before){box-sizing:border-box;margin:0;padding:0}.layout-label,.template-options{margin-bottom:16px}:global(body){line-height:1.6;color:var(--text-color-primary);background:var(--bg-color-default)}.custom-live-pusher{height:100vh;width:100vw;background:linear-gradient(135deg,var(--bg-color-default) 0,var(--bg-color-function) 100%);overflow:hidden}.top-controls{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:var(--bg-color-operate);border-bottom:1px solid var(--stroke-color-primary);z-index:100;min-height:60px}.live-title{font-size:18px;font-weight:600;text-shadow:0 2px 4px var(--shadow-color)}.audience-count{font-size:14px;color:var(--text-color-error);background:var(--uikit-color-red-1);padding:6px 12px;border-radius:20px;border:1px solid var(--uikit-color-red-3)}.live-controls,.tools-section{background:var(--bg-color-operate)}.main-content{display:flex;flex:1;height:calc(100vh - 60px);gap:16px;padding:16px;overflow:hidden}.left-panel{width:320px;gap:16px;flex-shrink:0}.panel-title{font-size:16px;font-weight:600;color:var(--text-color-primary);margin-bottom:12px;text-align:left}.audience-section,.message-section,.scene-section{display:flex;flex-direction:column;background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);padding:16px;overflow:hidden}.scene-section{flex:1;min-height:0}.message-section{flex:1;min-height:0}.message-section :deep(input),.message-section :deep(textarea){text-align:left}.tools-section{border-radius:12px;padding:16px;border:1px solid var(--stroke-color-primary)}.center-panel{display:flex;flex-direction:column;flex:1;gap:16px;min-width:0}.stream-section{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);overflow:hidden}.stream-header{display:flex;justify-content:space-between;align-items:center;padding:22px;border-bottom:1px solid var(--stroke-color-primary)}.stream-title{display:flex;align-items:center;gap:8px;font-size:18px;font-weight:500;color:var(--text-color-primary)}.stream-audience{font-size:14px;color:var(--text-color-primary)}.live-controls{display:flex;justify-content:space-between;align-items:center;padding:16px;border-radius:12px;border:1px solid var(--stroke-color-primary);gap:16px}.live-controls button{padding:18px 20px}.right-panel{display:flex;flex-direction:column;width:320px;gap:16px;flex-shrink:0}.center-panel>.live-controls,.left-panel>*,.right-panel>*{background:var(--bg-color-operate);border-radius:12px;border:1px solid var(--stroke-color-primary);overflow:hidden}.left-panel>*{padding:16px}.left-panel>.panel-title,.scene-section>.panel-title,.audience-section>.panel-title,.message-section>.panel-title{padding:0;background:transparent;border:none;border-radius:0}.custom-icon-container,.device-setting{padding:8px 12px;background:var(--bg-color-function)}.stream-section :deep(>*:last-child){flex:1;min-height:300px}.bottom-panel,.device-setting{align-items:center;display:flex}.custom-icon-container:hover,.option-card:hover{border-color:var(--stroke-color-primary);background:var(--list-color-hover)}.bottom-panel{gap:16px;flex:1}.device-setting{gap:8px;border-radius:8px;border:1px solid var(--stroke-color-secondary)}.device-icon{cursor:pointer;color:var(--text-color-primary);transition:color .2s}.device-icon:hover{color:var(--text-color-link)}.device-slider{width:80px}.custom-icon-container{display:flex;align-items:center;gap:6px;border-radius:8px;border:1px solid var(--stroke-color-secondary);cursor:pointer;transition:.2s;position:relative}.custom-icon-container.disabled{opacity:.5;cursor:not-allowed}.custom-icon-container.disabled:hover{background:var(--bg-color-function);border-color:var(--stroke-color-secondary)}.custom-icon{width:16px;height:16px;display:inline-block;background-size:contain;background-repeat:no-repeat;background-position:center}.custom-text{font-size:12px;color:var(--text-color-secondary);white-space:nowrap}.unread-count{position:absolute;top:-4px;right:-4px;background:var(--text-color-error);color:var(--text-color-button);border-radius:10px;padding:2px 6px;font-size:10px;font-weight:600;min-width:16px;text-align:center;line-height:1}.layout-label,.option-info h4{color:var(--text-color-primary)}.layout-dialog{max-width:600px}.layout-label{font-size:16px;font-weight:600}.options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}.option-card{padding:16px;background:var(--bg-color-function);border:2px solid var(--stroke-color-secondary);border-radius:8px;cursor:pointer;transition:.2s;text-align:center}.option-card.active{border-color:var(--text-color-link);background:var(--bg-color-operate)}.option-info h4{margin:8px 0 0;font-size:12px}.option-icon{width:32px;height:32px;margin:0 auto;color:var(--text-color-secondary)}.co-guest-dialog{max-width:500px}.co-guest-panel{min-height:300px}</style>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
##### **createLive**
|
|
162
|
+
|
|
163
|
+
Creates a new live room and sets its basic information.
|
|
164
|
+
| Parameter | Type | Required | Description |
|
|
165
|
+
| --- | --- | --- | --- |
|
|
166
|
+
| liveId | String | Yes | Live Room ID, must be globally unique. |
|
|
167
|
+
| liveName | String | Yes | Live Room Name, displayed on the UI. |
|
|
168
|
+
| coverUrl | String | No | Live Room cover image URL. |
|
|
169
|
+
| isPublicVisible | Boolean | No | Whether the room is publicly visible. Defaults to true. |
|
|
170
|
+
| seatLayoutTemplateId | Number | No | Seat layout template ID. 600 represents portrait dynamic grid layout. For more template IDs, refer to the Advanced Features section. |
|
|
171
|
+
|
|
172
|
+
##### setSelfInfo
|
|
173
|
+
|
|
174
|
+
Sets user information.
|
|
175
|
+
| Parameter | Type | Required | Description |
|
|
176
|
+
| --- | --- | --- | --- |
|
|
177
|
+
| userName | String | Yes | User nickname, displayed in the live room and chat area. |
|
|
178
|
+
| avatarUrl | String | No | User avatar image URL. |
|
|
179
|
+
|
|
180
|
+
### Step 4: Start Live Streaming
|
|
181
|
+
|
|
182
|
+
Start your first live stream.
|
|
183
|
+
``` bash
|
|
184
|
+
npm run dev
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
> **Note:**
|
|
188
|
+
>
|
|
189
|
+
|
|
190
|
+
> After running the above command, open your browser and enter the local address (for example, `http://localhost:5173/live-pusher`; the port may vary by project) to view the live start page.
|
|
191
|
+
>
|
|
192
|
+
|
|
193
|
+
### Step 5: Watch the Live Stream
|
|
194
|
+
- **Method 1 (Recommended):**
|
|
195
|
+
|
|
196
|
+
Instantly watch your live stream via our [online viewing site](https://web.sdk.qcloud.com/trtc/livekit/player/index.html).
|
|
197
|
+
|
|
198
|
+
- **Method 2:**
|
|
199
|
+
|
|
200
|
+
Integrate our Audience Viewing (Web Desktop Browser) or Audience Viewing (H5 Mobile Browser) page to watch the live stream.
|
|
201
|
+
|
|
202
|
+
> **Important Tip:****:**
|
|
203
|
+
>
|
|
204
|
+
|
|
205
|
+
> Use different **userID **for streaming and viewing: The host and audience must use **different** userID. If the same **userID** is used, the second device to log in will force the first device offline.
|
|
206
|
+
>
|
|
207
|
+
|
|
208
|
+
## Advanced Feature Integration
|
|
209
|
+
|
|
210
|
+
> **Note:**
|
|
211
|
+
>
|
|
212
|
+
|
|
213
|
+
> All advanced features below are extensions based on the `live-pusher.vue` sample file created in Step 3.
|
|
214
|
+
>
|
|
215
|
+
|
|
216
|
+
> Depending on your requirements, add the following code snippets to the appropriate sections of `live-pusher.vue` (either in the template or script) to enable each feature.
|
|
217
|
+
>
|
|
218
|
+
|
|
219
|
+
【Enable Media Device Settings】
|
|
220
|
+
|
|
221
|
+
To support media device settings, including adjusting speaker and microphone volume, copy the following code into your `live-pusher.vue` file.
|
|
222
|
+
``` typescript
|
|
223
|
+
<!-- LayoutSwitch Landscape/Portrait Streaming Settings -->
|
|
224
|
+
<template>
|
|
225
|
+
<div
|
|
226
|
+
class="custom-icon-container"
|
|
227
|
+
:class="{ disabled: currentLive?.liveId }"
|
|
228
|
+
@click="handleOrientationSwitch"
|
|
229
|
+
>
|
|
230
|
+
<IconHorizontalMode
|
|
231
|
+
v-if="currentOrientation === LiveOrientation.Landscape"
|
|
232
|
+
class="custom-icon"
|
|
233
|
+
/>
|
|
234
|
+
<IconPortrait
|
|
235
|
+
v-else
|
|
236
|
+
class="custom-icon"
|
|
237
|
+
/>
|
|
238
|
+
<span class="custom-text co-guest-text">{{
|
|
239
|
+
currentOrientation === LiveOrientation.Portrait ? t('Portrait') : t('Landscape')
|
|
240
|
+
}}</span>
|
|
241
|
+
</div>
|
|
242
|
+
</template>
|
|
243
|
+
|
|
244
|
+
<script setup lang="ts">
|
|
245
|
+
import { ref, watch } from 'vue';
|
|
246
|
+
import { useUIKit, TUIToast, TOAST_TYPE, IconPortrait, IconHorizontalMode } from '@tencentcloud/uikit-base-component-vue3';
|
|
247
|
+
import { useLiveListState, LiveOrientation } from 'tuikit-atomicx-vue3';
|
|
248
|
+
|
|
249
|
+
const { t } = useUIKit();
|
|
250
|
+
|
|
251
|
+
enum TUISeatLayoutTemplate {
|
|
252
|
+
LandscapeDynamic_1v3 = 200,
|
|
253
|
+
PortraitDynamic_Grid9 = 600,
|
|
254
|
+
PortraitDynamic_1v6 = 601,
|
|
255
|
+
PortraitFixed_Grid9 = 800,
|
|
256
|
+
PortraitFixed_1v6 = 801,
|
|
257
|
+
PortraitFixed_6v6 = 802,
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const { currentLive, updateLiveInfo } = useLiveListState();
|
|
261
|
+
const currentOrientation = ref(LiveOrientation.Portrait);
|
|
262
|
+
|
|
263
|
+
watch(
|
|
264
|
+
() => currentLive.value?.layoutTemplate,
|
|
265
|
+
newVal => {
|
|
266
|
+
if (newVal === TUISeatLayoutTemplate.LandscapeDynamic_1v3) {
|
|
267
|
+
currentOrientation.value = LiveOrientation.Landscape;
|
|
268
|
+
} else {
|
|
269
|
+
currentOrientation.value = LiveOrientation.Portrait;
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{ immediate: true }
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
const handleOrientationSwitch = () => {
|
|
276
|
+
if (currentLive.value?.liveId) {
|
|
277
|
+
TUIToast({
|
|
278
|
+
message: t('Cannot switch orientation during live streaming'),
|
|
279
|
+
type: TOAST_TYPE.ERROR,
|
|
280
|
+
});
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (currentOrientation.value === LiveOrientation.Portrait) {
|
|
284
|
+
updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.LandscapeDynamic_1v3 });
|
|
285
|
+
} else {
|
|
286
|
+
updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.PortraitDynamic_Grid9 });
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
</script>
|
|
290
|
+
|
|
291
|
+
<style scoped>.custom-icon-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:56px;height:56px;cursor:pointer;color:var(--text-color-primary);border-radius:12px;position:relative}.custom-icon{width:24px;height:24px;background:transparent}.custom-text{font-size:12px}.custom-icon-container:not(.disabled):hover{box-shadow:0 0 10px 0 var(--bg-color-mask)}.custom-icon-container:not(.disabled):hover .custom-icon,.custom-icon-container:not(.disabled):hover .custom-text{color:var(--text-color-link)}.custom-icon-container.disabled{cursor:not-allowed;opacity:.5;color:var(--text-color-secondary)}.custom-icon-container.disabled .custom-icon,.custom-icon-container.disabled .custom-text{color:var(--text-color-secondary);cursor:not-allowed}</style>
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
【Enable Landscape/Portrait Streaming Feature】
|
|
295
|
+
|
|
296
|
+
To support switching between landscape and portrait streaming, copy the following code into your `live-pusher.vue` file.
|
|
297
|
+
``` typescript
|
|
298
|
+
<!-- LayoutSwitch 横竖屏推流设置 -->
|
|
299
|
+
<template>
|
|
300
|
+
<div
|
|
301
|
+
class="custom-icon-container"
|
|
302
|
+
:class="{ disabled: currentLive?.liveId }"
|
|
303
|
+
@click="handleOrientationSwitch"
|
|
304
|
+
>
|
|
305
|
+
<IconHorizontalMode
|
|
306
|
+
v-if="currentOrientation === LiveOrientation.Landscape"
|
|
307
|
+
class="custom-icon"
|
|
308
|
+
/>
|
|
309
|
+
<IconPortrait
|
|
310
|
+
v-else
|
|
311
|
+
class="custom-icon"
|
|
312
|
+
/>
|
|
313
|
+
<span class="custom-text co-guest-text">{{
|
|
314
|
+
currentOrientation === LiveOrientation.Portrait ? t('Portrait') : t('Landscape')
|
|
315
|
+
}}</span>
|
|
316
|
+
</div>
|
|
317
|
+
</template>
|
|
318
|
+
|
|
319
|
+
<script setup lang="ts">
|
|
320
|
+
import { ref, watch } from 'vue';
|
|
321
|
+
import { useUIKit, TUIToast, TOAST_TYPE, IconPortrait, IconHorizontalMode } from '@tencentcloud/uikit-base-component-vue3';
|
|
322
|
+
import { useLiveListState, LiveOrientation } from 'tuikit-atomicx-vue3';
|
|
323
|
+
|
|
324
|
+
const { t } = useUIKit();
|
|
325
|
+
|
|
326
|
+
enum TUISeatLayoutTemplate {
|
|
327
|
+
LandscapeDynamic_1v3 = 200,
|
|
328
|
+
PortraitDynamic_Grid9 = 600,
|
|
329
|
+
PortraitDynamic_1v6 = 601,
|
|
330
|
+
PortraitFixed_Grid9 = 800,
|
|
331
|
+
PortraitFixed_1v6 = 801,
|
|
332
|
+
PortraitFixed_6v6 = 802,
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
const { currentLive, updateLiveInfo } = useLiveListState();
|
|
336
|
+
const currentOrientation = ref(LiveOrientation.Portrait);
|
|
337
|
+
|
|
338
|
+
watch(
|
|
339
|
+
() => currentLive.value?.layoutTemplate,
|
|
340
|
+
newVal => {
|
|
341
|
+
if (newVal === TUISeatLayoutTemplate.LandscapeDynamic_1v3) {
|
|
342
|
+
currentOrientation.value = LiveOrientation.Landscape;
|
|
343
|
+
} else {
|
|
344
|
+
currentOrientation.value = LiveOrientation.Portrait;
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
{ immediate: true }
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
const handleOrientationSwitch = () => {
|
|
351
|
+
if (currentLive.value?.liveId) {
|
|
352
|
+
TUIToast({
|
|
353
|
+
message: t('Cannot switch orientation during live streaming'),
|
|
354
|
+
type: TOAST_TYPE.ERROR,
|
|
355
|
+
});
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
if (currentOrientation.value === LiveOrientation.Portrait) {
|
|
359
|
+
updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.LandscapeDynamic_1v3 });
|
|
360
|
+
} else {
|
|
361
|
+
updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.PortraitDynamic_Grid9 });
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
</script>
|
|
365
|
+
|
|
366
|
+
<style scoped>.custom-icon-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:56px;height:56px;cursor:pointer;color:var(--text-color-primary);border-radius:12px;position:relative}.custom-icon{width:24px;height:24px;background:transparent}.custom-text{font-size:12px}.custom-icon-container:not(.disabled):hover{box-shadow:0 0 10px 0 var(--bg-color-mask)}.custom-icon-container:not(.disabled):hover .custom-icon,.custom-icon-container:not(.disabled):hover .custom-text{color:var(--text-color-link)}.custom-icon-container.disabled{cursor:not-allowed;opacity:.5;color:var(--text-color-secondary)}.custom-icon-container.disabled .custom-icon,.custom-icon-container.disabled .custom-text{color:var(--text-color-secondary);cursor:not-allowed}</style>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
【Enable Audience Guest Feature】
|
|
370
|
+
|
|
371
|
+
To support the audience guest feature, including guest requests and management, copy the following code into your `live-pusher.vue` file.
|
|
372
|
+
``` typescript
|
|
373
|
+
<!-- CoGuestButton Audience Guest Settings -->
|
|
374
|
+
<template>
|
|
375
|
+
<div class="custom-icon-container" :class="{ disabled: disabled }" @click="handleCoGuest">
|
|
376
|
+
<span v-if="applicants.length > 0" class="unread-count">{{ applicants.length }}</span>
|
|
377
|
+
<IconCoGuest class="custom-icon" />
|
|
378
|
+
<span class="custom-text co-guest-text">{{ t('CoGuest') }}</span>
|
|
379
|
+
</div>
|
|
380
|
+
<TUIDialog :title="t('CoGuest')" :visible="coGuestPanelVisible" :custom-classes="['co-guest-dialog']" @close="coGuestPanelVisible = false" @confirm="coGuestPanelVisible = false" @cancel="coGuestPanelVisible = false">
|
|
381
|
+
<CoGuestPanel class="co-guest-panel" />
|
|
382
|
+
<template #footer>
|
|
383
|
+
<div />
|
|
384
|
+
</template>
|
|
385
|
+
</TUIDialog>
|
|
386
|
+
</template>
|
|
387
|
+
|
|
388
|
+
<script lang="ts" setup>
|
|
389
|
+
import { computed, ref, watch } from 'vue';
|
|
390
|
+
import { useUIKit, TUIDialog, TUIToast, TOAST_TYPE, IconCoGuest } from '@tencentcloud/uikit-base-component-vue3';
|
|
391
|
+
import { CoGuestPanel, CoHostStatus, useCoGuestState, useCoHostState, useLiveListState } from 'tuikit-atomicx-vue3';
|
|
392
|
+
|
|
393
|
+
const { t } = useUIKit();
|
|
394
|
+
const { applicants } = useCoGuestState();
|
|
395
|
+
const { currentLive } = useLiveListState();
|
|
396
|
+
const { coHostStatus } = useCoHostState();
|
|
397
|
+
const disabled = computed(() => !currentLive.value?.liveId || coHostStatus.value !== CoHostStatus.Disconnected);
|
|
398
|
+
|
|
399
|
+
const coGuestPanelVisible = ref(false);
|
|
400
|
+
|
|
401
|
+
const handleCoGuest = () => {
|
|
402
|
+
if (disabled.value) {
|
|
403
|
+
const message = !currentLive.value?.liveId
|
|
404
|
+
? t('Cannot use co-guest before live starts')
|
|
405
|
+
: t('Cannot enable audience co-hosting while co-hosting with other hosts');
|
|
406
|
+
TUIToast({ type: TOAST_TYPE.ERROR, message });
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
coGuestPanelVisible.value = true;
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
watch(disabled, () => {
|
|
413
|
+
if (disabled.value) {
|
|
414
|
+
coGuestPanelVisible.value = false;
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
</script>
|
|
418
|
+
<style scoped>.custom-icon-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:56px;height:56px;cursor:pointer;color:var(--text-color-primary);border-radius:12px;position:relative}.unread-count{position:absolute;top:0;right:0;background-color:var(--text-color-error);border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center;font-size:12px}.custom-icon{width:24px;height:24px;background:transparent}.custom-text{font-size:12px}.custom-icon-container:not(.disabled):hover{box-shadow:0 0 10px 0 var(--bg-color-mask)}.custom-icon-container:not(.disabled):hover .custom-icon,.custom-icon-container:not(.disabled):hover .custom-text{color:var(--text-color-link)}.custom-icon-container.disabled{cursor:not-allowed;opacity:.5;color:var(--text-color-secondary)}.custom-icon-container.disabled .custom-icon{cursor:not-allowed}.custom-icon-container.disabled .custom-text{color:var(--text-color-secondary)}.co-guest-panel{height:560px}:deep(.co-guest-dialog){width:520px}</style>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
【Enable Layout Settings Feature】
|
|
422
|
+
|
|
423
|
+
To support video stream layout switching, including **dynamic grid layout, static grid layout, static small window layout, floating small window layout**, copy the following code into your `live-pusher.vue` file.
|
|
424
|
+
``` typescript
|
|
425
|
+
<!-- OrientationSwitch Layout Settings -->
|
|
426
|
+
<template>
|
|
427
|
+
<div
|
|
428
|
+
class="custom-icon-container"
|
|
429
|
+
:class="{ 'disabled': disabled }"
|
|
430
|
+
@click="handleSwitchLayout"
|
|
431
|
+
>
|
|
432
|
+
<IconLayoutTemplate class="custom-icon" />
|
|
433
|
+
<span class="custom-text setting-text">{{ t('Layout Settings') }}</span>
|
|
434
|
+
</div>
|
|
435
|
+
<TUIDialog
|
|
436
|
+
:customClasses="['layout-dialog']"
|
|
437
|
+
:title="t('Layout Settings')"
|
|
438
|
+
:visible="layoutSwitchVisible"
|
|
439
|
+
@close="handleCancel"
|
|
440
|
+
@confirm="handleConfirm"
|
|
441
|
+
@cancel="handleCancel"
|
|
442
|
+
appendTo="body"
|
|
443
|
+
>
|
|
444
|
+
<div class="layout-label">
|
|
445
|
+
{{ t('Audience Layout') }}
|
|
446
|
+
</div>
|
|
447
|
+
<div class="template-options">
|
|
448
|
+
<div class="options-grid">
|
|
449
|
+
<template
|
|
450
|
+
v-for="template in layoutOptions"
|
|
451
|
+
:key="template.id"
|
|
452
|
+
>
|
|
453
|
+
<div
|
|
454
|
+
class="option-card"
|
|
455
|
+
:class="{ active: selectedTemplate === template.templateId }"
|
|
456
|
+
@click="selectTemplate(template.templateId)"
|
|
457
|
+
>
|
|
458
|
+
<div class="option-info">
|
|
459
|
+
<component
|
|
460
|
+
:is="template.icon"
|
|
461
|
+
v-if="template.icon"
|
|
462
|
+
class="option-icon"
|
|
463
|
+
/>
|
|
464
|
+
<h4>{{ template.label }}</h4>
|
|
465
|
+
</div>
|
|
466
|
+
</div>
|
|
467
|
+
</template>
|
|
468
|
+
</div>
|
|
469
|
+
</div>
|
|
470
|
+
</TUIDialog>
|
|
471
|
+
</template>
|
|
472
|
+
|
|
473
|
+
<script lang="ts" setup>
|
|
474
|
+
import { ref, computed, watch, h, defineComponent } from 'vue';
|
|
475
|
+
import { TUIErrorCode } from '@tencentcloud/tuiroom-engine-js';
|
|
476
|
+
import { useUIKit, TUIDialog, TUIToast, TOAST_TYPE, IconLayoutTemplate } from '@tencentcloud/uikit-base-component-vue3';
|
|
477
|
+
import { useLiveListState, useCoHostState, CoHostStatus } from 'tuikit-atomicx-vue3';
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Live Room Seat Layout Templates
|
|
481
|
+
*/
|
|
482
|
+
enum TUISeatLayoutTemplate {
|
|
483
|
+
LandscapeDynamic_1v3 = 200,
|
|
484
|
+
PortraitDynamic_Grid9 = 600,
|
|
485
|
+
PortraitDynamic_1v6 = 601,
|
|
486
|
+
PortraitFixed_Grid9 = 800,
|
|
487
|
+
PortraitFixed_1v6 = 801,
|
|
488
|
+
PortraitFixed_6v6 = 802,
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
const createSvgIcon = (pathD: string) => defineComponent({
|
|
492
|
+
render: () => h('svg', { xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 24 24', fill: 'currentColor', width: '24', height: '24' }, [h('path', { d: pathD })])
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
const Dynamic1v6 = createSvgIcon('M3 3h7v7H3V3zm11 0h7v4h-7V3zm0 6h7v4h-7V9zm0 6h7v6h-7v-6zM3 12h7v9H3v-9z');
|
|
496
|
+
const DynamicGrid9 = createSvgIcon('M3 3h5v5H3V3zm7 0h4v5h-4V3zm6 0h5v5h-5V3zM3 10h5v4H3v-4zm7 0h4v4h-4v-4zm6 0h5v4h-5v-4zM3 16h5v5H3v-5zm7 0h4v5h-4v-5zm6 0h5v5h-5v-5z');
|
|
497
|
+
const Fixed1v6 = createSvgIcon('M2 2h9v9H2V2zm11 0h9v4h-9V2zm0 5h9v4h-9V7zm0 5h9v4h-9v-4zm0 5h9v5h-9v-5zM2 13h9v9H2v-9z');
|
|
498
|
+
const FixedGrid9 = createSvgIcon('M2 2h6v6H2V2zm7 0h6v6H9V2zm7 0h6v6h-6V2zM2 9h6v6H2V9zm7 0h6v6H9V9zm7 0h6v6h-6V9zM2 16h6v6H2v-6zm7 0h6v6H9v-6zm7 0h6v6h-6v-6z');
|
|
499
|
+
const HorizontalFloat = createSvgIcon('M2 4h20v12H2V4zm3 14h4v2H5v-2zm6 0h4v2h-4v-2zm6 0h4v2h-4v-2z');
|
|
500
|
+
|
|
501
|
+
const { t } = useUIKit();
|
|
502
|
+
const { currentLive, updateLiveInfo } = useLiveListState();
|
|
503
|
+
const { coHostStatus } = useCoHostState();
|
|
504
|
+
const disabled = computed(() => coHostStatus.value === CoHostStatus.Connected);
|
|
505
|
+
|
|
506
|
+
watch(
|
|
507
|
+
() => currentLive.value?.liveId,
|
|
508
|
+
(liveId) => {
|
|
509
|
+
if (!liveId) {
|
|
510
|
+
updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.PortraitDynamic_Grid9 });
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
{ immediate: true },
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
const layoutSwitchVisible = ref(false);
|
|
517
|
+
|
|
518
|
+
const handleSwitchLayout = () => {
|
|
519
|
+
if (disabled.value) {
|
|
520
|
+
TUIToast({ type: TOAST_TYPE.ERROR, message: t('Layout switching is not available during co-hosting') });
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
layoutSwitchVisible.value = true;
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
const portraitLayoutOptions = computed(() => [
|
|
527
|
+
{
|
|
528
|
+
id: 'PortraitDynamic_Grid9',
|
|
529
|
+
icon: DynamicGrid9,
|
|
530
|
+
templateId: TUISeatLayoutTemplate.PortraitDynamic_Grid9,
|
|
531
|
+
label: t('Dynamic Grid9 Layout'),
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
id: 'PortraitFixed_1v6',
|
|
535
|
+
icon: Fixed1v6,
|
|
536
|
+
templateId: TUISeatLayoutTemplate.PortraitFixed_1v6,
|
|
537
|
+
label: t('Fixed 1v6 Layout'),
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
id: 'PortraitFixed_Grid9',
|
|
541
|
+
icon: FixedGrid9,
|
|
542
|
+
templateId: TUISeatLayoutTemplate.PortraitFixed_Grid9,
|
|
543
|
+
label: t('Fixed Grid9 Layout'),
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
id: 'PortraitDynamic_1v6',
|
|
547
|
+
icon: Dynamic1v6,
|
|
548
|
+
templateId: TUISeatLayoutTemplate.PortraitDynamic_1v6,
|
|
549
|
+
label: t('Dynamic 1v6 Layout'),
|
|
550
|
+
},
|
|
551
|
+
]);
|
|
552
|
+
|
|
553
|
+
const horizontalLayoutOptions = computed(() => [
|
|
554
|
+
{
|
|
555
|
+
id: 'LandscapeDynamic_1v3',
|
|
556
|
+
icon: HorizontalFloat,
|
|
557
|
+
templateId: TUISeatLayoutTemplate.LandscapeDynamic_1v3,
|
|
558
|
+
label: t('Landscape Template'),
|
|
559
|
+
},
|
|
560
|
+
]);
|
|
561
|
+
|
|
562
|
+
const layoutOptions = computed(() => {
|
|
563
|
+
if (currentLive.value && currentLive.value?.layoutTemplate >= 200 && currentLive.value?.layoutTemplate <= 599) {
|
|
564
|
+
return horizontalLayoutOptions.value;
|
|
565
|
+
}
|
|
566
|
+
return portraitLayoutOptions.value;
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
const selectedTemplate = ref<TUISeatLayoutTemplate | null>(currentLive.value?.layoutTemplate ?? null);
|
|
570
|
+
|
|
571
|
+
function selectTemplate(template: TUISeatLayoutTemplate) {
|
|
572
|
+
selectedTemplate.value = template;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
watch(() => currentLive.value?.layoutTemplate, (newVal) => {
|
|
576
|
+
if (newVal) {
|
|
577
|
+
selectedTemplate.value = newVal;
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
async function handleConfirm() {
|
|
582
|
+
if (selectedTemplate.value) {
|
|
583
|
+
try {
|
|
584
|
+
await updateLiveInfo({ layoutTemplate: selectedTemplate.value });
|
|
585
|
+
layoutSwitchVisible.value = false;
|
|
586
|
+
} catch (error: any) {
|
|
587
|
+
let errorMessage = t('Layout switch failed');
|
|
588
|
+
if (error.code === TUIErrorCode.ERR_FREQ_LIMIT) {
|
|
589
|
+
errorMessage = t('Operation too frequent, please try again later');
|
|
590
|
+
}
|
|
591
|
+
TUIToast({ type: TOAST_TYPE.ERROR, message: errorMessage });
|
|
592
|
+
}
|
|
593
|
+
} else {
|
|
594
|
+
layoutSwitchVisible.value = false;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
function handleCancel() {
|
|
599
|
+
selectedTemplate.value = currentLive.value?.layoutTemplate ?? null;
|
|
600
|
+
layoutSwitchVisible.value = false;
|
|
601
|
+
}
|
|
602
|
+
</script>
|
|
603
|
+
|
|
604
|
+
<style scoped>
|
|
605
|
+
.custom-icon-container { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; width: 56px; height: 56px; cursor: pointer; color: var(--text-color-primary); border-radius: 12px; position: relative; } .custom-icon-container .custom-icon { display: inline-block; width: 24px; height: 24px; background: transparent; } .custom-icon-container .custom-text { font-size: 12px; font-weight: 400; } .custom-icon-container:not(.disabled):hover { box-shadow: 0 0 10px 0 var(--bg-color-mask); } .custom-icon-container:not(.disabled):hover .custom-icon { color: var(--text-color-link); } .custom-icon-container:not(.disabled):hover .custom-text { color: var(--text-color-link); } .custom-icon-container.disabled { cursor: not-allowed; opacity: 0.5; color: var(--text-color-tertiary); } .custom-icon-container.disabled .custom-icon { color: var(--text-color-tertiary); cursor: not-allowed; } .custom-icon-container.disabled .custom-text { color: var(--text-color-tertiary); } :deep(.layout-dialog) { padding: 24px; width: 480px; } :deep(.layout-dialog) .dialog-body { flex-wrap: wrap; } :deep(.layout-dialog) .dialog-footer { padding-top: 32px; } .layout-label { font-size: 14px; font-weight: 400; color: var(--text-color-primary, #ffffff); margin: 4px 0px 16px 0px; } .template-options { width: 100%; height: 100%; overflow: auto; } .template-options .options-grid { display: flex; flex-wrap: wrap; gap: 16px; justify-content: flex-start; } .template-options .options-grid .option-card { box-sizing: border-box; padding: 12px 13px; width: 208px; background: #3a3a3a; border: 2px solid transparent; border-radius: 12px; cursor: pointer; transition: all 0.2s ease; text-align: center; } .template-options .options-grid .option-card:hover { background: #4a4a4a; border-color: #5a5a5a; } .template-options .options-grid .option-card.active { border: 2px solid var(--text-color-link-hover, #2B6AD6); background: var(--list-color-focused, #243047); } .template-options .options-grid .option-card.active .option-info h4 { color: #ffffff; } .template-options .options-grid .option-card .option-info { display: flex; align-items: center; justify-content: flex-start; gap: 8px; } .template-options .options-grid .option-card .option-info .option-icon { width: 24px; height: 24px; } .template-options .options-grid .option-card .option-info h4 { margin: 0; font-size: 14px; font-weight: 600; color: #ffffff; transition: color 0.2s ease; }
|
|
606
|
+
</style>
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
## Customize Layout
|
|
610
|
+
|
|
611
|
+
`TUILiveKit` offers flexible customization for both the start page and live room features and styles. You can adjust the layout and show or hide feature modules to fit your business needs.
|
|
612
|
+
|
|
613
|
+
### Landscape/Portrait Streaming Settings
|
|
614
|
+
|
|
615
|
+
`TUILiveKit` supports both **landscape** and **portrait** streaming modes. Choose the streaming direction that best fits your scenario:
|
|
616
|
+
| **Streaming Mode** | **Applicable Scenarios** | **Description** |
|
|
617
|
+
| --- | --- | --- |
|
|
618
|
+
| **Portrait Streaming** | Showroom Live, E-commerce, Chat Interaction | Default mode, optimized for mobile viewing, aspect ratio 9:16. |
|
|
619
|
+
| **Landscape Streaming** | Game Streaming, Online Education, Conference Streaming | Optimized for desktop viewing, aspect ratio 16:9. |
|
|
620
|
+
|
|
621
|
+
> **Note:**
|
|
622
|
+
>
|
|
623
|
+
|
|
624
|
+
> You must set the streaming direction **before starting the live stream**; you cannot switch directions during a live session.
|
|
625
|
+
>
|
|
626
|
+
|
|
627
|
+
#### Switch via UI
|
|
628
|
+
|
|
629
|
+
On the host live start page's bottom control bar, click the **Landscape/Portrait** button to change the streaming direction:
|
|
630
|
+
- **Portrait** indicates portrait streaming mode.
|
|
631
|
+
|
|
632
|
+
- **Landscape** indicates landscape streaming mode.
|
|
633
|
+
|
|
634
|
+
#### Switch via Code
|
|
635
|
+
|
|
636
|
+
You can also set the streaming direction in code by calling `updateLiveInfo`:
|
|
637
|
+
``` typescript
|
|
638
|
+
import { useLiveListState } from 'tuikit-atomicx-vue3';
|
|
639
|
+
|
|
640
|
+
const { updateLiveInfo } = useLiveListState();
|
|
641
|
+
|
|
642
|
+
// Switch to landscape mode (template ID: 200)
|
|
643
|
+
updateLiveInfo({ layoutTemplate: 200 });
|
|
644
|
+
|
|
645
|
+
// Switch to portrait mode (template ID: 600)
|
|
646
|
+
updateLiveInfo({ layoutTemplate: 600 });
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
> **Note:**
|
|
650
|
+
>
|
|
651
|
+
> - Landscape mode uses template IDs 200-599, with 200 (landscape floating layout) as the default.
|
|
652
|
+
> - Portrait mode uses template IDs 600-899, with 600 (dynamic grid layout) as the default.
|
|
653
|
+
> - When switching between landscape and portrait, the system automatically applies the default template for that direction.
|
|
654
|
+
|
|
655
|
+
### Live Stream Layout Template Selection
|
|
656
|
+
|
|
657
|
+
`TUILiveKit` provides multiple layout templates to control how host and guest video feeds are arranged. Select your preferred style in the host live start page's **Layout Settings**:
|
|
658
|
+
|
|
659
|
+
#### Portrait Mode Layout Templates
|
|
660
|
+
|
|
661
|
+
Portrait mode offers **4 layout templates**, ideal for showroom live, e-commerce, and similar scenarios:
|
|
662
|
+
| **Name** | **Dynamic Grid Layout** | **Dynamic 1V6 Layout** | **Static Grid Layout** | **Static Small Window Layout** |
|
|
663
|
+
| --- | --- | --- | --- | --- |
|
|
664
|
+
| **Template ID** | 600 | 601 | 800 | 801 |
|
|
665
|
+
| **Description** | **Default layout**; grid size adjusts dynamically based on guest count, auto-filling the screen. | Host is centered in a large window, guests appear as **floating small windows** around the host. | Fixed 9-grid layout; each guest occupies a **fixed-size** grid slot. | Host is full screen, guests are shown as **fixed small windows** at the screen edges. |
|
|
666
|
+
| **Applicable Scenarios** | General scenarios with variable guest count. | Host-centric, guest-assisted interaction scenarios. | Multi-guest, Voice Chat Room, or fixed participant scenarios. | Host full-screen display, guest auxiliary scenarios. |
|
|
667
|
+
|
|
668
|
+
#### Landscape Mode Layout Template
|
|
669
|
+
|
|
670
|
+
Landscape mode provides **1 layout template**, suitable for game streaming, online education, and more:
|
|
671
|
+
| **Name** | **Landscape Floating Layout** |
|
|
672
|
+
| --- | --- |
|
|
673
|
+
| **Template ID** | 200 |
|
|
674
|
+
| **Description** | Host is full screen, guests are shown as **floating small windows** at the bottom of the screen. |
|
|
675
|
+
| **Applicable Scenarios** | Game streaming, screen sharing, online education, and other landscape scenarios. |
|
|
676
|
+
|
|
677
|
+
#### Set Layout Template via Code
|
|
678
|
+
|
|
679
|
+
Set the layout template in code by calling `updateLiveInfo`:
|
|
680
|
+
``` typescript
|
|
681
|
+
import { useLiveListState } from 'tuikit-atomicx-vue3';
|
|
682
|
+
|
|
683
|
+
const { updateLiveInfo } = useLiveListState();
|
|
684
|
+
|
|
685
|
+
// Set portrait dynamic grid layout
|
|
686
|
+
updateLiveInfo({ layoutTemplate: 600 });
|
|
687
|
+
|
|
688
|
+
// Set portrait dynamic 1v6 layout
|
|
689
|
+
updateLiveInfo({ layoutTemplate: 601 });
|
|
690
|
+
|
|
691
|
+
// Set portrait static grid layout
|
|
692
|
+
updateLiveInfo({ layoutTemplate: 800 });
|
|
693
|
+
|
|
694
|
+
// Set portrait static 1v6 layout
|
|
695
|
+
updateLiveInfo({ layoutTemplate: 801 });
|
|
696
|
+
|
|
697
|
+
// Set landscape floating layout
|
|
698
|
+
updateLiveInfo({ layoutTemplate: 200 });
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
> **Note:**
|
|
702
|
+
>
|
|
703
|
+
> - You can switch layout templates **before** starting the live stream and **during** the session.
|
|
704
|
+
> - During host PK, **layout templates cannot be switched**.
|
|
705
|
+
> - When switching streaming direction, the layout template automatically changes to the default for that direction.
|
|
706
|
+
|
|
707
|
+
## Free Customization
|
|
708
|
+
|
|
709
|
+
### Color Theme and Language
|
|
710
|
+
|
|
711
|
+
Change the default theme and language by configuring `UIKitProvider` parameters in `App.vue`.
|
|
712
|
+
| **UIKitProvider Parameter** | **Options** | **Default** |
|
|
713
|
+
| --- | --- | --- |
|
|
714
|
+
| theme | "light" \\| "dark" | "light" |
|
|
715
|
+
| language | "zh-CN" \\| "en-US" | - |
|
|
716
|
+
|
|
717
|
+
``` typescript
|
|
718
|
+
<UIKitProvider theme="light">
|
|
719
|
+
<router-view />
|
|
720
|
+
</UIKitProvider>
|
|
721
|
+
|
|
722
|
+
<script setup lang="ts">
|
|
723
|
+
import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
### Buttons and Icons
|
|
727
|
+
|
|
728
|
+
To add or replace Button or Icon controls for further UI customization, follow the example below. In the `live-player.vue` file, you can refer to the diagram to locate the source code for each button or icon, then **add, remove, or replace** UI controls as needed.
|
|
729
|
+
|
|
730
|
+
You can also customize the **audience viewing page** UI as needed. In addition to layout adjustments, you can freely **add, remove, or modify** color themes, fonts, border radius, buttons, icons, input boxes, dialogs, and more to meet your UI requirements.
|
|
731
|
+
| **Category** | **Feature** | **Description** | **Component Customization Guide** |
|
|
732
|
+
| --- | --- | --- | --- |
|
|
733
|
+
| **Asset Management** | Customize asset management area display | **Supports:** - **Adjust icon size, color, or replace icons.** | Media Source Configuration Panel |
|
|
734
|
+
| **Online Audience** | Customize audience info display | **Supports:** - **Show/hide audience level.** - **Customize font and color of audience info.** - **Replace icon style as needed.** | Video Source Editing Canvas |
|
|
735
|
+
| **Message List** | Customize live comments area display | **Supports:** - **Show/hide chat input area.** - **Customize chat bubble style, audience level, etc.** | Live Comments Component |
|
|
736
|
+
|
|
737
|
+
## Next Steps
|
|
738
|
+
|
|
739
|
+
Congratulations! You've successfully integrated the **Host Live Start Page**. Next, you can implement the **Audience Viewing Page**, **Live Stream List Page**, and further UI customization. See the table below:
|
|
740
|
+
| **Feature** | **Description** | **Integration Guide** |
|
|
741
|
+
| --- | --- | --- |
|
|
742
|
+
| **Audience Viewing** | Enable audience to enter the host's live room and watch the stream, including audience guest, live room info, online audience, live comments, and more. | Audience Viewing |
|
|
743
|
+
| **Live Stream List** | Display the live stream list interface and features, including live stream list and room info display. | Live Stream List |
|