@tencent-rtc/mcp 1.3.9 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/package.json +2 -2
  2. package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/android-faq.md} +10 -22
  3. package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/flutter-faq.md} +10 -22
  4. package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/ios-faq.md} +10 -22
  5. package/resource/doc/callkit/preset/android/api.md +296 -0
  6. package/resource/doc/{tuicallkit → callkit/preset}/android/integration.md +53 -365
  7. package/resource/doc/callkit/preset/flutter/api.md +410 -0
  8. package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +35 -97
  9. package/resource/doc/callkit/preset/ios/api.md +80 -0
  10. package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +37 -118
  11. package/resource/doc/callkit/preset/react/api.md +501 -0
  12. package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +5 -20
  13. package/resource/doc/callkit/preset/vue/api.md +501 -0
  14. package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +4 -19
  15. package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -38
  16. package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
  17. package/resource/doc/{chatuikit → chatkit}/android/integration.md +28 -121
  18. package/resource/doc/chatkit/faq/android_sdk/client-api.md +281 -0
  19. package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +0 -1
  20. package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -1
  21. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +199 -0
  22. package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
  23. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +235 -0
  24. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +3 -3
  25. package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
  26. package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +18 -87
  27. package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -38
  28. package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
  29. package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +47 -165
  30. package/resource/doc/{chatuikit → chatkit}/react/components/avatar.md +0 -33
  31. package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +8 -49
  32. package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +6 -35
  33. package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +0 -6
  34. package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -11
  35. package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +96 -502
  36. package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
  37. package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
  38. package/resource/doc/chatkit/react/components/conversation-preview.md +118 -0
  39. package/resource/doc/chatkit/react/components/conversation-search.md +60 -0
  40. package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -337
  41. package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +20 -212
  42. package/resource/doc/chatkit/react/components/search.md +243 -0
  43. package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +1 -47
  44. package/resource/doc/{chatuikit → chatkit}/react/integration.md +21 -81
  45. package/resource/doc/{chatuikit → chatkit}/vue/components/avatar.md +0 -33
  46. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -48
  47. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +3 -5
  48. package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +0 -5
  49. package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -15
  50. package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
  51. package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
  52. package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -492
  53. package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
  54. package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
  55. package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +2 -223
  56. package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -252
  57. package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
  58. package/resource/doc/{chatuikit → chatkit}/vue/components/tuikit.md +7 -21
  59. package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +3 -62
  60. package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
  61. package/resource/doc/{chatuikit → chatkit}/vue/integration.md +22 -23
  62. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +18 -89
  63. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
  64. package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +28 -141
  65. package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +20 -112
  66. package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +59 -193
  67. package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
  68. package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +94 -344
  69. package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +107 -515
  70. package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +33 -173
  71. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +14 -93
  72. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -179
  73. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +19 -107
  74. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -166
  75. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -163
  76. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +69 -443
  77. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
  78. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-integration.md +107 -492
  79. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +23 -165
  80. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +35 -111
  81. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +35 -193
  82. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +31 -144
  83. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +24 -116
  84. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +37 -171
  85. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +79 -459
  86. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +69 -320
  87. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +85 -502
  88. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +32 -169
  89. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-audience-list.md +18 -89
  90. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-audio-effect.md +34 -192
  91. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-barrage.md +28 -141
  92. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-co-guest-interaction.md +50 -259
  93. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-gift.md +75 -455
  94. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-host-interaction.md +51 -265
  95. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-integration.md +61 -427
  96. package/resource/doc/livekit/{voice → core-sdk/voice}/android/voice-room-list.md +33 -173
  97. package/resource/doc/livekit/{voice → core-sdk/voice}/flutter/voice-co-guest-interaction.md +44 -203
  98. package/resource/doc/livekit/{voice → core-sdk/voice}/flutter/voice-integration.md +56 -416
  99. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-audience-list.md +35 -111
  100. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-audio-effect.md +35 -193
  101. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-barrage.md +31 -144
  102. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-co-guest-interaction.md +43 -252
  103. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-gift.md +79 -459
  104. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-host-interaction.md +46 -264
  105. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-integration.md +61 -445
  106. package/resource/doc/livekit/{voice → core-sdk/voice}/ios/voice-room-list.md +32 -169
  107. package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -2
  108. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
  109. package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
  110. package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +10 -49
  111. package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +26 -144
  112. package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +12 -75
  113. package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +36 -227
  114. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +215 -0
  115. package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
  116. package/resource/doc/livekit/preset/live/vue/live-list-integration.md +241 -0
  117. package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +299 -0
  118. package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +300 -0
  119. package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +743 -0
  120. package/resource/doc/roomkit/vue/faq.md +1 -0
  121. package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
  122. package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
  123. package/resource/doc/roomkit/vue/features/device-state.md +24 -44
  124. package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
  125. package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
  126. package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
  127. package/resource/doc/roomkit/vue/features/room-state.md +25 -34
  128. package/resource/doc/roomkit/vue/features/room-view.md +30 -125
  129. package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
  130. package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
  131. package/resource/doc/roomkit/vue/features/virtual-background.md +13 -29
  132. package/resource/doc/roomkit/vue/integration.md +21 -76
  133. package/resource/doc/rtcengine/faq/common/error_code.md +1 -0
  134. package/resource/doc/rtcengine/faq/web/web.md +14 -24
  135. package/resource/doc/rtcengine/web/api.md +1 -3
  136. package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +3 -10
  137. package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +1 -5
  138. package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +1 -2
  139. package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -4
  140. package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +3 -5
  141. package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +1 -7
  142. package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +0 -2
  143. package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -8
  144. package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +11 -11
  145. package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +12 -88
  146. package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -5
  147. package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +30 -37
  148. package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +13 -90
  149. package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -2
  150. package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +1 -2
  151. package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +19 -19
  152. package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
  153. package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -5
  154. package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
  155. package/resource/doc/trtc/C++/ITRTCCloud.md +686 -2835
  156. package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
  157. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +202 -1022
  158. package/resource/doc/trtc/C++/ITXDeviceManager.md +126 -767
  159. package/resource/doc/trtc/C++/TRTCCloudCallback.md +579 -2147
  160. package/resource/doc/trtc/C++/TRTCTypeDef.md +703 -3378
  161. package/resource/doc/trtc/C++/TXLiteAVCode.md +116 -908
  162. package/resource/doc/trtc/android/TRTCCloud.md +606 -2573
  163. package/resource/doc/trtc/android/TRTCCloudDef.md +752 -3640
  164. package/resource/doc/trtc/android/TRTCCloudListener.md +581 -2008
  165. package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
  166. package/resource/doc/trtc/android/TXAudioEffectManager.md +202 -1022
  167. package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
  168. package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
  169. package/resource/doc/trtc/android/TXLiteAVCode.md +114 -892
  170. package/resource/doc/trtc/iOS/TRTCCloud.md +694 -2904
  171. package/resource/doc/trtc/iOS/TRTCCloudDef.md +726 -3498
  172. package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +543 -2028
  173. package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
  174. package/resource/doc/trtc/iOS/TXAudioEffectManager.md +174 -877
  175. package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
  176. package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
  177. package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
  178. package/server.js +1 -5
  179. package/server.js.map +1 -1
  180. package/tools/call/get_callkit_api.js +32 -0
  181. package/tools/call/get_callkit_api.js.map +1 -0
  182. package/tools/call/get_native_call_uikit_integration.js +34 -0
  183. package/tools/call/get_native_call_uikit_integration.js.map +1 -0
  184. package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
  185. package/tools/call/get_web_call_uikit_integration.js.map +1 -0
  186. package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
  187. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
  188. package/tools/chat/get_native_chat_uikit_integration.js +45 -0
  189. package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
  190. package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
  191. package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
  192. package/tools/chat/get_web_chat_uikit_integration.js +45 -0
  193. package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
  194. package/tools/common/get_faq.js +265 -0
  195. package/tools/common/get_faq.js.map +1 -0
  196. package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
  197. package/tools/common/get_usersig.js.map +1 -0
  198. package/tools/common/present_framework_choice.js +63 -0
  199. package/tools/common/present_framework_choice.js.map +1 -0
  200. package/tools/definitions/get_callkit_api_def.js +29 -0
  201. package/tools/definitions/get_callkit_api_def.js.map +1 -0
  202. package/tools/definitions/get_faq_def.js +17 -18
  203. package/tools/definitions/get_faq_def.js.map +1 -1
  204. package/tools/definitions/get_native_call_uikit_integration_def.js +15 -34
  205. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  206. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
  207. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
  208. package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -41
  209. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  210. package/tools/definitions/get_native_livekit_core_features_def.js +34 -0
  211. package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
  212. package/tools/definitions/get_native_livekit_core_integration_def.js +34 -0
  213. package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
  214. package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
  215. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
  216. package/tools/definitions/get_usersig_def.js +17 -22
  217. package/tools/definitions/get_usersig_def.js.map +1 -1
  218. package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
  219. package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
  220. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
  221. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
  222. package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
  223. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
  224. package/tools/definitions/get_web_live_uikit_integration_def.js +15 -18
  225. package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
  226. package/tools/definitions/get_web_livekit_api_def.js +30 -0
  227. package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
  228. package/tools/definitions/get_web_livekit_component_detail_def.js +32 -0
  229. package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
  230. package/tools/definitions/get_web_room_uikit_integration_def.js +15 -46
  231. package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
  232. package/tools/definitions/get_web_roomkit_feature_detail_def.js +31 -0
  233. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
  234. package/tools/definitions/get_web_trtc_sdk_api_def.js +27 -0
  235. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
  236. package/tools/definitions/get_web_trtc_sdk_integration_def.js +27 -0
  237. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
  238. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +27 -0
  239. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
  240. package/tools/definitions/present_framework_choice_def.js +24 -12
  241. package/tools/definitions/present_framework_choice_def.js.map +1 -1
  242. package/tools/index.js +47 -61
  243. package/tools/index.js.map +1 -1
  244. package/tools/live/get_native_livekit_core_features.js +65 -0
  245. package/tools/live/get_native_livekit_core_features.js.map +1 -0
  246. package/tools/live/get_native_livekit_core_integration.js +59 -0
  247. package/tools/live/get_native_livekit_core_integration.js.map +1 -0
  248. package/tools/live/get_web_live_uikit_integration.js +48 -0
  249. package/tools/live/get_web_live_uikit_integration.js.map +1 -0
  250. package/tools/live/get_web_livekit_api.js +32 -0
  251. package/tools/live/get_web_livekit_api.js.map +1 -0
  252. package/tools/live/get_web_livekit_component_detail.js +34 -0
  253. package/tools/live/get_web_livekit_component_detail.js.map +1 -0
  254. package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
  255. package/tools/room/get_web_room_uikit_integration.js.map +1 -0
  256. package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
  257. package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
  258. package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
  259. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
  260. package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
  261. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
  262. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
  263. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
  264. package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
  265. package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
  266. package/utils/generate-structured-result.js +61 -17
  267. package/utils/generate-structured-result.js.map +1 -1
  268. package/utils/report-cls-client.js +12 -1
  269. package/utils/report-cls-client.js.map +1 -1
  270. package/utils/report-es-client.js +2 -2
  271. package/resource/doc/chatuikit/android/workflow.md +0 -713
  272. package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1371
  273. package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -932
  274. package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1119
  275. package/resource/doc/chatuikit/flutter/workflow.md +0 -941
  276. package/resource/doc/chatuikit/react/components/conversation-list.md +0 -1017
  277. package/resource/doc/chatuikit/react/components/search.md +0 -745
  278. package/resource/doc/chatuikit/react/create-group.md +0 -23
  279. package/resource/doc/chatuikit/react/init.md +0 -26
  280. package/resource/doc/chatuikit/react/workflow.md +0 -258
  281. package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
  282. package/resource/doc/chatuikit/vue/create-group.md +0 -25
  283. package/resource/doc/chatuikit/vue/init.md +0 -40
  284. package/resource/doc/chatuikit/vue/workflow.md +0 -395
  285. package/resource/doc/livekit/live/android/workflow.md +0 -320
  286. package/resource/doc/livekit/live/flutter/workflow.md +0 -353
  287. package/resource/doc/livekit/live/ios/workflow.md +0 -454
  288. package/resource/doc/livekit/live/vue/components/barrage.md +0 -616
  289. package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -446
  290. package/resource/doc/livekit/live/vue/faq.md +0 -0
  291. package/resource/doc/livekit/live/vue/live-list-integration.md +0 -200
  292. package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -269
  293. package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -269
  294. package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -595
  295. package/resource/doc/livekit/live/vue/states/live-state.md +0 -3591
  296. package/resource/doc/livekit/live/vue/workflow.md +0 -218
  297. package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -312
  298. package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -430
  299. package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -679
  300. package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -671
  301. package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -271
  302. package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
  303. package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
  304. package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
  305. package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
  306. package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -865
  307. package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -657
  308. package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -437
  309. package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -335
  310. package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
  311. package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -327
  312. package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -507
  313. package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
  314. package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -659
  315. package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
  316. package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -814
  317. package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1000
  318. package/resource/doc/roomkit/vue/features/workflow.md +0 -553
  319. package/resource/doc/roomkit/vue/workflow.md +0 -733
  320. package/resource/doc/tuicallkit/android/workflow.md +0 -441
  321. package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -784
  322. package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -610
  323. package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -938
  324. package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -897
  325. package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -469
  326. package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -781
  327. package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -398
  328. package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
  329. package/resource/doc/tuicallkit/react/api.md +0 -1404
  330. package/resource/doc/tuicallkit/vue/api.md +0 -1406
  331. package/resource/doc/tuicallkit/vue/faq.md +0 -36
  332. package/tools/call/get-native-call-integration.js +0 -43
  333. package/tools/call/get-native-call-integration.js.map +0 -1
  334. package/tools/call/get-web-call-api.js +0 -27
  335. package/tools/call/get-web-call-api.js.map +0 -1
  336. package/tools/call/get-web-call-integration.js.map +0 -1
  337. package/tools/chat/get-native-chat-feature-detail.js +0 -30
  338. package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
  339. package/tools/chat/get-native-chat-integration.js +0 -45
  340. package/tools/chat/get-native-chat-integration.js.map +0 -1
  341. package/tools/chat/get-web-chat-component-detail.js +0 -31
  342. package/tools/chat/get-web-chat-component-detail.js.map +0 -1
  343. package/tools/chat/get-web-chat-integration.js +0 -45
  344. package/tools/chat/get-web-chat-integration.js.map +0 -1
  345. package/tools/chat/get-web-chat-uikit-init.js +0 -28
  346. package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
  347. package/tools/chat/get-web-create-group-doc.js +0 -28
  348. package/tools/chat/get-web-create-group-doc.js.map +0 -1
  349. package/tools/common/get-faq.js +0 -91
  350. package/tools/common/get-faq.js.map +0 -1
  351. package/tools/common/get-usersig.js.map +0 -1
  352. package/tools/common/present-framework-choice.js +0 -16
  353. package/tools/common/present-framework-choice.js.map +0 -1
  354. package/tools/common/present-scenario-choice.js +0 -16
  355. package/tools/common/present-scenario-choice.js.map +0 -1
  356. package/tools/common/record-prompt.js +0 -55
  357. package/tools/common/record-prompt.js.map +0 -1
  358. package/tools/common/record-result.js +0 -60
  359. package/tools/common/record-result.js.map +0 -1
  360. package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
  361. package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
  362. package/tools/definitions/get_native_live_api_def.js +0 -23
  363. package/tools/definitions/get_native_live_api_def.js.map +0 -1
  364. package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -87
  365. package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
  366. package/tools/definitions/get_native_live_uikit_integration_def.js +0 -75
  367. package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
  368. package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -63
  369. package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
  370. package/tools/definitions/get_trtc_native_api_def.js +0 -16
  371. package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
  372. package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
  373. package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
  374. package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
  375. package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
  376. package/tools/definitions/get_web_create_group_doc_def.js +0 -18
  377. package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
  378. package/tools/definitions/get_web_live_state_detail_def.js +0 -19
  379. package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
  380. package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
  381. package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
  382. package/tools/definitions/get_web_room_feature_detail_def.js +0 -92
  383. package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
  384. package/tools/definitions/get_web_room_state_detail_def.js +0 -19
  385. package/tools/definitions/get_web_room_state_detail_def.js.map +0 -1
  386. package/tools/definitions/present_scenario_choice_def.js +0 -53
  387. package/tools/definitions/present_scenario_choice_def.js.map +0 -1
  388. package/tools/definitions/record_prompt_def.js +0 -58
  389. package/tools/definitions/record_prompt_def.js.map +0 -1
  390. package/tools/definitions/record_result_def.js +0 -46
  391. package/tools/definitions/record_result_def.js.map +0 -1
  392. package/tools/live/get-native-live-uikit-integration.js +0 -177
  393. package/tools/live/get-native-live-uikit-integration.js.map +0 -1
  394. package/tools/live/get-web-live-component-detail.js +0 -31
  395. package/tools/live/get-web-live-component-detail.js.map +0 -1
  396. package/tools/live/get-web-live-state-detail.js +0 -31
  397. package/tools/live/get-web-live-state-detail.js.map +0 -1
  398. package/tools/live/get-web-live-uikit-integration.js +0 -52
  399. package/tools/live/get-web-live-uikit-integration.js.map +0 -1
  400. package/tools/live/get_native_live_uikit_extra_features.js +0 -105
  401. package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
  402. package/tools/live/get_native_live_uikit_interaction.js +0 -194
  403. package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
  404. package/tools/native_live/get-native-live-api.js +0 -31
  405. package/tools/native_live/get-native-live-api.js.map +0 -1
  406. package/tools/room/get-web-room-feature-detail.js.map +0 -1
  407. package/tools/room/get-web-room-integration.js.map +0 -1
  408. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
  409. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
  410. package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
  411. package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
  412. package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
  413. package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
  414. package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
  415. package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
  416. package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
  417. package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
  418. package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
  419. package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
  420. package/tools/trtc/get-trtc-native-api.js +0 -31
  421. package/tools/trtc/get-trtc-native-api.js.map +0 -1
  422. package/utils/handle-component-name.js +0 -33
  423. package/utils/handle-component-name.js.map +0 -1
  424. /package/resource/doc/{chatuikit/iOS/workflow.md → callkit/core-sdk/.gitkeep} +0 -0
  425. /package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +0 -0
  426. /package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +0 -0
  427. /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
  428. /package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +0 -0
  429. /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
  430. /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
  431. /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 |