@tencentcloud/sdk-mcp 1.3.8 → 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 (503) hide show
  1. package/index.js +1 -1
  2. package/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/android-faq.md} +75 -308
  5. package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +2 -2
  6. package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/flutter-faq.md} +83 -315
  7. package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/ios-faq.md} +76 -313
  8. package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +78 -311
  9. package/resource/doc/callkit/preset/android/api.md +330 -0
  10. package/resource/doc/callkit/preset/android/integration.md +530 -0
  11. package/resource/doc/callkit/preset/flutter/api.md +401 -0
  12. package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +53 -273
  13. package/resource/doc/callkit/preset/ios/api.md +282 -0
  14. package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +39 -120
  15. package/resource/doc/callkit/preset/react/api.md +600 -0
  16. package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +6 -6
  17. package/resource/doc/callkit/preset/vue/api.md +600 -0
  18. package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +5 -5
  19. package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -37
  20. package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
  21. package/resource/doc/chatkit/android/integration.md +498 -0
  22. package/resource/doc/chatkit/faq/android_sdk/client-api.md +280 -0
  23. package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +4 -17
  24. package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -2
  25. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +183 -0
  26. package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
  27. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +279 -0
  28. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +1 -1
  29. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +4 -4
  30. package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
  31. package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +20 -95
  32. package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -37
  33. package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
  34. package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +78 -280
  35. package/resource/doc/{chatuikit/vue → chatkit/react}/components/avatar.md +0 -1
  36. package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +7 -12
  37. package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +10 -17
  38. package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +1 -1
  39. package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -1
  40. package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +122 -703
  41. package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
  42. package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
  43. package/resource/doc/chatkit/react/components/conversation-preview.md +116 -0
  44. package/resource/doc/chatkit/react/components/conversation-search.md +57 -0
  45. package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -186
  46. package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +21 -113
  47. package/resource/doc/chatkit/react/components/search.md +282 -0
  48. package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +5 -26
  49. package/resource/doc/{chatuikit → chatkit}/react/integration.md +37 -104
  50. package/resource/doc/{chatuikit/react → chatkit/vue}/components/avatar.md +0 -1
  51. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -13
  52. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +13 -18
  53. package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +1 -2
  54. package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -1
  55. package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
  56. package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
  57. package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -316
  58. package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
  59. package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
  60. package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +1 -23
  61. package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -134
  62. package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
  63. package/resource/doc/chatkit/vue/components/tuikit.md +45 -0
  64. package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +4 -4
  65. package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
  66. package/resource/doc/{chatuikit → chatkit}/vue/integration.md +53 -121
  67. package/resource/doc/livekit/core-sdk/live/android/api-reference/AudioEffectStore.md +283 -0
  68. package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +148 -0
  69. package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +316 -0
  70. package/resource/doc/livekit/core-sdk/live/android/api-reference/CameraView.md +57 -0
  71. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +419 -0
  72. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +325 -0
  73. package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +436 -0
  74. package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +165 -0
  75. package/resource/doc/livekit/core-sdk/live/android/api-reference/LikeStore.md +49 -0
  76. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +239 -0
  77. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +74 -0
  78. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +417 -0
  79. package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +207 -0
  80. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +17 -88
  81. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
  82. package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +26 -139
  83. package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +16 -99
  84. package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +54 -161
  85. package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
  86. package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +91 -338
  87. package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +108 -492
  88. package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +27 -165
  89. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/AudioEffectStore.md +279 -0
  90. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +158 -0
  91. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BaseBeautyStore.md +155 -0
  92. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +304 -0
  93. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +394 -0
  94. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +303 -0
  95. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +410 -0
  96. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +160 -0
  97. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LikeStore.md +51 -0
  98. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +231 -0
  99. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveCoreView.md +143 -0
  100. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +375 -0
  101. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +170 -0
  102. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +13 -91
  103. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -177
  104. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +18 -102
  105. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -164
  106. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -161
  107. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +66 -460
  108. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
  109. package/resource/doc/livekit/core-sdk/live/flutter/live-integration.md +687 -0
  110. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +22 -161
  111. package/resource/doc/livekit/core-sdk/live/ios/api-reference/AudioEffectStore.md +287 -0
  112. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +165 -0
  113. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +143 -0
  114. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +298 -0
  115. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +349 -0
  116. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +297 -0
  117. package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +471 -0
  118. package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +179 -0
  119. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LikeStore.md +49 -0
  120. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +238 -0
  121. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +74 -0
  122. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +412 -0
  123. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +173 -0
  124. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +23 -96
  125. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +33 -195
  126. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +35 -150
  127. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +20 -105
  128. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +35 -140
  129. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +77 -457
  130. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +70 -317
  131. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +90 -473
  132. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +28 -163
  133. package/resource/doc/livekit/core-sdk/voice/android/voice-audience-list.md +264 -0
  134. package/resource/doc/livekit/core-sdk/voice/android/voice-audio-effect.md +226 -0
  135. package/resource/doc/livekit/core-sdk/voice/android/voice-barrage.md +456 -0
  136. package/resource/doc/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +539 -0
  137. package/resource/doc/livekit/core-sdk/voice/android/voice-gift.md +453 -0
  138. package/resource/doc/livekit/core-sdk/voice/android/voice-host-interaction.md +516 -0
  139. package/resource/doc/livekit/core-sdk/voice/android/voice-integration.md +509 -0
  140. package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +365 -0
  141. package/resource/doc/livekit/core-sdk/voice/flutter/voice-audience-list.md +259 -0
  142. package/resource/doc/livekit/core-sdk/voice/flutter/voice-audio-effect.md +596 -0
  143. package/resource/doc/livekit/core-sdk/voice/flutter/voice-barrage.md +494 -0
  144. package/resource/doc/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +516 -0
  145. package/resource/doc/livekit/core-sdk/voice/flutter/voice-gift.md +418 -0
  146. package/resource/doc/livekit/core-sdk/voice/flutter/voice-integration.md +563 -0
  147. package/resource/doc/livekit/core-sdk/voice/flutter/voice-room-list.md +709 -0
  148. package/resource/doc/livekit/core-sdk/voice/ios/voice-audience-list.md +262 -0
  149. package/resource/doc/livekit/core-sdk/voice/ios/voice-audio-effect.md +211 -0
  150. package/resource/doc/livekit/core-sdk/voice/ios/voice-barrage.md +414 -0
  151. package/resource/doc/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +492 -0
  152. package/resource/doc/livekit/core-sdk/voice/ios/voice-gift.md +405 -0
  153. package/resource/doc/livekit/core-sdk/voice/ios/voice-host-interaction.md +611 -0
  154. package/resource/doc/livekit/core-sdk/voice/ios/voice-integration.md +478 -0
  155. package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +336 -0
  156. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audience-list.md +234 -0
  157. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +218 -0
  158. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-barrage.md +376 -0
  159. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +648 -0
  160. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-gift.md +362 -0
  161. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-integration.md +323 -0
  162. package/resource/doc/livekit/core-sdk/voice/uni-app/voice-room-list.md +470 -0
  163. package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -3
  164. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
  165. package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
  166. package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +9 -48
  167. package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +27 -145
  168. package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +13 -76
  169. package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +33 -224
  170. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +211 -0
  171. package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
  172. package/resource/doc/livekit/preset/live/vue/live-list-integration.md +244 -0
  173. package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +301 -0
  174. package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +307 -0
  175. package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +754 -0
  176. package/resource/doc/roomkit/android/features/call-user-to-room.md +234 -0
  177. package/resource/doc/roomkit/android/features/room-participant-state.md +850 -0
  178. package/resource/doc/roomkit/android/features/room-state.md +358 -0
  179. package/resource/doc/roomkit/android/features/schedule-room.md +336 -0
  180. package/resource/doc/roomkit/android/integration.md +433 -0
  181. package/resource/doc/roomkit/{common/error_code.md → faq/common/error-code.md} +1 -1
  182. package/resource/doc/roomkit/flutter/features/call-user-to-room.md +228 -0
  183. package/resource/doc/roomkit/flutter/features/room-participant-state.md +796 -0
  184. package/resource/doc/roomkit/flutter/features/room-state.md +324 -0
  185. package/resource/doc/roomkit/flutter/features/schedule-room.md +324 -0
  186. package/resource/doc/roomkit/flutter/integration.md +405 -0
  187. package/resource/doc/roomkit/ios/features/call-user-to-room.md +226 -0
  188. package/resource/doc/roomkit/ios/features/room-participant-state.md +821 -0
  189. package/resource/doc/roomkit/ios/features/room-state.md +320 -0
  190. package/resource/doc/roomkit/ios/features/schedule-room.md +318 -0
  191. package/resource/doc/roomkit/ios/integration.md +384 -0
  192. package/resource/doc/roomkit/vue/faq.md +1 -0
  193. package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
  194. package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
  195. package/resource/doc/roomkit/vue/features/device-state.md +24 -44
  196. package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
  197. package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
  198. package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
  199. package/resource/doc/roomkit/vue/features/room-state.md +25 -36
  200. package/resource/doc/roomkit/vue/features/room-view.md +30 -127
  201. package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
  202. package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
  203. package/resource/doc/roomkit/vue/features/virtual-background.md +13 -34
  204. package/resource/doc/roomkit/vue/integration.md +118 -282
  205. package/resource/doc/rtcengine/faq/common/userSig.md +17 -141
  206. package/resource/doc/rtcengine/faq/web/web.md +15 -22
  207. package/resource/doc/rtcengine/web/api.md +17 -21
  208. package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +4 -10
  209. package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +4 -8
  210. package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +3 -3
  211. package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -3
  212. package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +6 -6
  213. package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +2 -2
  214. package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +2 -4
  215. package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +1 -2
  216. package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +2 -6
  217. package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +13 -14
  218. package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +10 -90
  219. package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -8
  220. package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +31 -35
  221. package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +0 -2
  222. package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +7 -49
  223. package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -1
  224. package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -3
  225. package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +20 -20
  226. package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
  227. package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -4
  228. package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
  229. package/resource/doc/trtc/C++/ITRTCCloud.md +718 -2847
  230. package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
  231. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +207 -1041
  232. package/resource/doc/trtc/C++/ITXDeviceManager.md +127 -768
  233. package/resource/doc/trtc/C++/TRTCCloudCallback.md +634 -2259
  234. package/resource/doc/trtc/C++/TRTCTypeDef.md +726 -3465
  235. package/resource/doc/trtc/C++/TXLiteAVCode.md +117 -916
  236. package/resource/doc/trtc/android/TRTCCloud.md +638 -2612
  237. package/resource/doc/trtc/android/TRTCCloudDef.md +769 -3697
  238. package/resource/doc/trtc/android/TRTCCloudListener.md +609 -2070
  239. package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
  240. package/resource/doc/trtc/android/TXAudioEffectManager.md +207 -1049
  241. package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
  242. package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
  243. package/resource/doc/trtc/android/TXLiteAVCode.md +115 -900
  244. package/resource/doc/trtc/iOS/TRTCCloud.md +726 -2930
  245. package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +580 -2099
  246. package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
  247. package/resource/doc/trtc/iOS/TXAudioEffectManager.md +179 -896
  248. package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
  249. package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
  250. package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
  251. package/resource/doc/trtc/iOS/TXLiveSDKTypeDef.md +747 -3559
  252. package/server.js +1 -5
  253. package/server.js.map +1 -1
  254. package/tools/call/get_callkit_api.js +32 -0
  255. package/tools/call/get_callkit_api.js.map +1 -0
  256. package/tools/call/get_native_call_uikit_integration.js +34 -0
  257. package/tools/call/get_native_call_uikit_integration.js.map +1 -0
  258. package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
  259. package/tools/call/get_web_call_uikit_integration.js.map +1 -0
  260. package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
  261. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
  262. package/tools/chat/get_native_chat_uikit_integration.js +45 -0
  263. package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
  264. package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
  265. package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
  266. package/tools/chat/get_web_chat_uikit_integration.js +45 -0
  267. package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
  268. package/tools/common/get_faq.js +265 -0
  269. package/tools/common/get_faq.js.map +1 -0
  270. package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
  271. package/tools/common/get_usersig.js.map +1 -0
  272. package/tools/common/present_framework_choice.js +63 -0
  273. package/tools/common/present_framework_choice.js.map +1 -0
  274. package/tools/definitions/get_callkit_api_def.js +28 -0
  275. package/tools/definitions/get_callkit_api_def.js.map +1 -0
  276. package/tools/definitions/get_faq_def.js +18 -19
  277. package/tools/definitions/get_faq_def.js.map +1 -1
  278. package/tools/definitions/get_native_call_uikit_integration_def.js +15 -18
  279. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  280. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
  281. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
  282. package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -19
  283. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  284. package/tools/definitions/get_native_livekit_core_features_def.js +33 -0
  285. package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
  286. package/tools/definitions/get_native_livekit_core_integration_def.js +33 -0
  287. package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
  288. package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
  289. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
  290. package/tools/definitions/get_usersig_def.js +17 -24
  291. package/tools/definitions/get_usersig_def.js.map +1 -1
  292. package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
  293. package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
  294. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
  295. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
  296. package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
  297. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
  298. package/tools/definitions/get_web_live_uikit_integration_def.js +13 -18
  299. package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
  300. package/tools/definitions/get_web_livekit_api_def.js +27 -0
  301. package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
  302. package/tools/definitions/get_web_livekit_component_detail_def.js +29 -0
  303. package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
  304. package/tools/definitions/get_web_room_uikit_integration_def.js +13 -30
  305. package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
  306. package/tools/definitions/get_web_roomkit_feature_detail_def.js +30 -0
  307. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
  308. package/tools/definitions/get_web_trtc_sdk_api_def.js +25 -0
  309. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
  310. package/tools/definitions/get_web_trtc_sdk_integration_def.js +25 -0
  311. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
  312. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +25 -0
  313. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
  314. package/tools/definitions/present_framework_choice_def.js +23 -12
  315. package/tools/definitions/present_framework_choice_def.js.map +1 -1
  316. package/tools/index.js +47 -59
  317. package/tools/index.js.map +1 -1
  318. package/tools/live/get_native_livekit_core_features.js +65 -0
  319. package/tools/live/get_native_livekit_core_features.js.map +1 -0
  320. package/tools/live/get_native_livekit_core_integration.js +59 -0
  321. package/tools/live/get_native_livekit_core_integration.js.map +1 -0
  322. package/tools/live/get_web_live_uikit_integration.js +48 -0
  323. package/tools/live/get_web_live_uikit_integration.js.map +1 -0
  324. package/tools/live/get_web_livekit_api.js +32 -0
  325. package/tools/live/get_web_livekit_api.js.map +1 -0
  326. package/tools/live/get_web_livekit_component_detail.js +34 -0
  327. package/tools/live/get_web_livekit_component_detail.js.map +1 -0
  328. package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
  329. package/tools/room/get_web_room_uikit_integration.js.map +1 -0
  330. package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
  331. package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
  332. package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
  333. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
  334. package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
  335. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
  336. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
  337. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
  338. package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
  339. package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
  340. package/utils/generate-structured-result.js +61 -17
  341. package/utils/generate-structured-result.js.map +1 -1
  342. package/utils/report-cls-client.js +12 -1
  343. package/utils/report-cls-client.js.map +1 -1
  344. package/utils/report-es-client.js +1 -1
  345. package/resource/doc/chatuikit/android/integration.md +0 -612
  346. package/resource/doc/chatuikit/android/workflow.md +0 -0
  347. package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1376
  348. package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -860
  349. package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1371
  350. package/resource/doc/chatuikit/flutter/workflow.md +0 -816
  351. package/resource/doc/chatuikit/iOS/workflow.md +0 -0
  352. package/resource/doc/chatuikit/react/components/conversation-list.md +0 -765
  353. package/resource/doc/chatuikit/react/components/search.md +0 -885
  354. package/resource/doc/chatuikit/react/create-group.md +0 -22
  355. package/resource/doc/chatuikit/react/init.md +0 -25
  356. package/resource/doc/chatuikit/react/workflow.md +0 -254
  357. package/resource/doc/chatuikit/uniapp-app/faq.md +0 -0
  358. package/resource/doc/chatuikit/uniapp-app/integration.md +0 -619
  359. package/resource/doc/chatuikit/uniapp-app/workflow.md +0 -576
  360. package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
  361. package/resource/doc/chatuikit/vue/components/tuikit.md +0 -110
  362. package/resource/doc/chatuikit/vue/create-group.md +0 -26
  363. package/resource/doc/chatuikit/vue/init.md +0 -35
  364. package/resource/doc/chatuikit/vue/workflow.md +0 -395
  365. package/resource/doc/livekit/live/android/workflow.md +0 -322
  366. package/resource/doc/livekit/live/flutter/live-integration.md +0 -1029
  367. package/resource/doc/livekit/live/flutter/workflow.md +0 -353
  368. package/resource/doc/livekit/live/ios/workflow.md +0 -352
  369. package/resource/doc/livekit/live/vue/components/barrage.md +0 -615
  370. package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -442
  371. package/resource/doc/livekit/live/vue/faq.md +0 -0
  372. package/resource/doc/livekit/live/vue/live-list-integration.md +0 -195
  373. package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -293
  374. package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -381
  375. package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -598
  376. package/resource/doc/livekit/live/vue/states/live-state.md +0 -2656
  377. package/resource/doc/livekit/live/vue/workflow.md +0 -219
  378. package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -334
  379. package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -434
  380. package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -685
  381. package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -712
  382. package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -284
  383. package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
  384. package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
  385. package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
  386. package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
  387. package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -879
  388. package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -668
  389. package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -456
  390. package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -332
  391. package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
  392. package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -328
  393. package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -505
  394. package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
  395. package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -676
  396. package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
  397. package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -820
  398. package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1065
  399. package/resource/doc/roomkit/vue/features/workflow.md +0 -553
  400. package/resource/doc/roomkit/vue/workflow.md +0 -487
  401. package/resource/doc/tuicallkit/android/integration.md +0 -302
  402. package/resource/doc/tuicallkit/android/workflow.md +0 -0
  403. package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -786
  404. package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -663
  405. package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -932
  406. package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -926
  407. package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -452
  408. package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -779
  409. package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -635
  410. package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
  411. package/resource/doc/tuicallkit/react/api.md +0 -1512
  412. package/resource/doc/tuicallkit/vue/api.md +0 -1512
  413. package/resource/doc/tuicallkit/vue/faq.md +0 -986
  414. package/tools/call/get-native-call-integration.js +0 -43
  415. package/tools/call/get-native-call-integration.js.map +0 -1
  416. package/tools/call/get-web-call-api.js +0 -27
  417. package/tools/call/get-web-call-api.js.map +0 -1
  418. package/tools/call/get-web-call-integration.js.map +0 -1
  419. package/tools/chat/get-native-chat-feature-detail.js +0 -30
  420. package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
  421. package/tools/chat/get-native-chat-integration.js +0 -45
  422. package/tools/chat/get-native-chat-integration.js.map +0 -1
  423. package/tools/chat/get-web-chat-component-detail.js +0 -31
  424. package/tools/chat/get-web-chat-component-detail.js.map +0 -1
  425. package/tools/chat/get-web-chat-integration.js +0 -45
  426. package/tools/chat/get-web-chat-integration.js.map +0 -1
  427. package/tools/chat/get-web-chat-uikit-init.js +0 -28
  428. package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
  429. package/tools/chat/get-web-create-group-doc.js +0 -28
  430. package/tools/chat/get-web-create-group-doc.js.map +0 -1
  431. package/tools/common/get-faq.js +0 -91
  432. package/tools/common/get-faq.js.map +0 -1
  433. package/tools/common/get-usersig.js.map +0 -1
  434. package/tools/common/present-framework-choice.js +0 -16
  435. package/tools/common/present-framework-choice.js.map +0 -1
  436. package/tools/common/record-prompt.js +0 -55
  437. package/tools/common/record-prompt.js.map +0 -1
  438. package/tools/common/record-result.js +0 -60
  439. package/tools/common/record-result.js.map +0 -1
  440. package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
  441. package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
  442. package/tools/definitions/get_native_live_api_def.js +0 -22
  443. package/tools/definitions/get_native_live_api_def.js.map +0 -1
  444. package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -109
  445. package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
  446. package/tools/definitions/get_native_live_uikit_integration_def.js +0 -50
  447. package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
  448. package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -115
  449. package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
  450. package/tools/definitions/get_trtc_native_api_def.js +0 -17
  451. package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
  452. package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
  453. package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
  454. package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
  455. package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
  456. package/tools/definitions/get_web_create_group_doc_def.js +0 -18
  457. package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
  458. package/tools/definitions/get_web_live_state_detail_def.js +0 -19
  459. package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
  460. package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
  461. package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
  462. package/tools/definitions/get_web_room_feature_detail_def.js +0 -95
  463. package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
  464. package/tools/definitions/record_prompt_def.js +0 -53
  465. package/tools/definitions/record_prompt_def.js.map +0 -1
  466. package/tools/definitions/record_result_def.js +0 -30
  467. package/tools/definitions/record_result_def.js.map +0 -1
  468. package/tools/live/get-native-live-uikit-integration.js +0 -101
  469. package/tools/live/get-native-live-uikit-integration.js.map +0 -1
  470. package/tools/live/get-web-live-component-detail.js +0 -31
  471. package/tools/live/get-web-live-component-detail.js.map +0 -1
  472. package/tools/live/get-web-live-state-detail.js +0 -31
  473. package/tools/live/get-web-live-state-detail.js.map +0 -1
  474. package/tools/live/get-web-live-uikit-integration.js +0 -52
  475. package/tools/live/get-web-live-uikit-integration.js.map +0 -1
  476. package/tools/live/get_native_live_uikit_extra_features.js +0 -105
  477. package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
  478. package/tools/live/get_native_live_uikit_interaction.js +0 -101
  479. package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
  480. package/tools/native_live/get-native-live-api.js +0 -31
  481. package/tools/native_live/get-native-live-api.js.map +0 -1
  482. package/tools/room/get-web-room-feature-detail.js.map +0 -1
  483. package/tools/room/get-web-room-integration.js.map +0 -1
  484. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
  485. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
  486. package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
  487. package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
  488. package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
  489. package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
  490. package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
  491. package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
  492. package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
  493. package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
  494. package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
  495. package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
  496. package/tools/trtc/get-trtc-native-api.js +0 -31
  497. package/tools/trtc/get-trtc-native-api.js.map +0 -1
  498. package/utils/handle-component-name.js +0 -33
  499. package/utils/handle-component-name.js.map +0 -1
  500. /package/resource/doc/{rtcengine/web → callkit/core-sdk}/.gitkeep +0 -0
  501. /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
  502. /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
  503. /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
@@ -0,0 +1,754 @@
1
+ 本文将介绍如何接入 TUILiveKit Demo 的**主播开播页**,指导您将我们提供的开播页面集成到您的项目中,同时介绍如何对直播页面的样式、布局、以及功能进行自定义修改。
2
+
3
+ ## 功能展示
4
+ - **横屏开播**
5
+
6
+ - **竖屏开播**
7
+
8
+ ## 功能概览
9
+ - **画面源管理**:支持添加多个摄像头、屏幕分享、窗口分享和本地图片。
10
+
11
+ - **直播画面排版**:支持对画面源拖拽、缩放,支持通过快捷菜单对画面源设置镜像、旋转和层级调整。
12
+
13
+ - **观众连麦**:支持房间内观众连麦,内置多种连麦布局。
14
+
15
+ - **主播 PK**:支持主播跨房连线、PK。
16
+
17
+ - **互动聊天**:支持收发文字和表情消息,聊天互动。
18
+
19
+ - **观众管理**:支持对观众禁言、踢出直播间等操作。
20
+
21
+ ## 快速接入
22
+
23
+ ### 步骤1:环境配置及开通服务
24
+
25
+ 在进行快速接入之前,请参考 准备工作 集成组件并实现登录。
26
+
27
+ ### 步骤2: 安装依赖
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/uikit-base-component-vue3
37
+ ```
38
+
39
+ 【yarn】
40
+ ``` bash
41
+ yarn add tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3
42
+ ```
43
+
44
+ ### 步骤3:主播开播页面接入
45
+
46
+ 在您的项目下创建 `live-pusher.vue` 文件,通过复制如下代码至您新建的 `live-pusher.vue` 文件中集成完整的**主播开播页面**。
47
+
48
+ > **注意:**
49
+ >
50
+
51
+ > 您可以直接复制如下代码至您的工程中集成示例工程,也可以访问 [开播页面](https://github.com/Tencent-RTC/TUILiveKit/blob/main/Web/web-vite-vue3/src/TUILiveKit/LivePusherView.vue) 地址,查看更加详细的源码内容。
52
+ >
53
+
54
+ ``` typescript
55
+ <template>
56
+ <UIKitProvider language="zh-CN" theme="dark">
57
+ <div class="custom-live-pusher">
58
+ <!-- 主要内容区 -->
59
+ <div class="main-content">
60
+ <!-- 左侧:视频源和工具 -->
61
+ <div class="left-panel">
62
+ <div class="scene-section">
63
+ <div class="panel-title">画面源</div>
64
+ <LiveScenePanel />
65
+ </div>
66
+ </div>
67
+
68
+ <!-- 中央:直播画面 -->
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 }} 人在观看</div>
76
+ </div>
77
+ <StreamMixer />
78
+ </div>
79
+ <div class="live-controls">
80
+ <div class="bottom-panel">
81
+ <!-- <MediaDeviceSetting />// 媒体设置能力请参考本文高级功能集成部分
82
+ <CoGuestButton /> // 连麦观众能力请参考本文高级功能集成部分
83
+ <OrientationSwitch /> // 布局设置请参考本文高级功能集成部分
84
+ <LayoutSwitch /> // 横竖屏推流能力请参考本文高级功能集成部分 -->
85
+ </div>
86
+ <TUIButton type="primary" v-if="!currentLive?.liveId" @click="handleStartLive">开始直播</TUIButton>
87
+ <TUIButton color="red" v-else @click="handleStopLive">停止直播</TUIButton>
88
+ </div>
89
+ </div>
90
+
91
+ <!-- 右侧:观众互动 -->
92
+ <div class="right-panel">
93
+ <div class="audience-section">
94
+ <div class="panel-title">在线观众({{ audienceCount }})</div>
95
+ <LiveAudienceList />
96
+ </div>
97
+ <div class="message-section">
98
+ <div class="panel-title">消息列表</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 = '我的直播间';
118
+
119
+ const handleStartLive = async () => {
120
+ // 创建直播间
121
+ await createLive({
122
+ liveId: 'my-live-room', // 直播间 ID
123
+ liveName: liveName, // 直播间名称
124
+ coverUrl: '', // 直播间封面 URL
125
+ isPublicVisible: true, // 是否公开可见
126
+ seatLayoutTemplateId: 600, // 麦位布局模板 ID
127
+ });
128
+ // 设置个人信息
129
+ await setSelfInfo({
130
+ userName: '我的名字/昵称', // 用户名
131
+ avatarUrl: '', // 头像 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, 可以参考步骤 1 获取
143
+ userId: '', // UserID, 可以参考步骤 1 获取
144
+ userSig: '', // userSig, 可以参考步骤 1 获取
145
+ });
146
+ } catch (error) {
147
+ console.error('登录失败:', 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
+ #### 核心 API 参数说明
162
+
163
+ ##### **createLive**
164
+
165
+ 创建一个新的直播间,并设置直播间的基础信息。
166
+ | 参数 | 类型 | 必填 | 说明 |
167
+ | --- | --- | --- | --- |
168
+ | liveId | String | 是 | 直播间 ID,需保证全局唯一。 |
169
+ | liveName | String | 是 | 直播间名称,用于界面展示。 |
170
+ | coverUrl | String | 否 | 直播间封面图片的 URL 地址。 |
171
+ | isPublicVisible | Boolean | 否 | 是否公开可见。默认为 true,表示公开。 |
172
+ | seatLayoutTemplateId | Number | 否 | 麦位布局模板 ID。600 代表竖屏动态宫格布局,更多模板 ID 请参考高级功能章节。 |
173
+
174
+ ##### setSelfInfo
175
+
176
+ 设置用户信息。
177
+ | 参数 | 类型 | 必填 | 说明 |
178
+ | --- | --- | --- | --- |
179
+ | userName | String | 是 | 用户昵称,将在直播间及聊天区域显示。 |
180
+ | avatarUrl | String | 否 | 用户头像的 URL 地址。 |
181
+
182
+ ### 步骤4:开启直播
183
+
184
+ 开启您的第一场直播。
185
+ ``` bash
186
+ npm run dev
187
+ ```
188
+
189
+ > **说明:**
190
+ >
191
+
192
+ > 上述命令执行成功后,请在浏览器地址栏输入本地访问地址(您可以根据项目参考,例如` http://localhost:5173/live-pusher`,具体端口号可能因您的项目配置而有所不同),即可看到开播页面。
193
+ >
194
+
195
+ ### 步骤5:观看直播
196
+ - **方式一:(推荐)**
197
+
198
+ 通过我们提供的 [在线观看网站](https://web.sdk.qcloud.com/trtc/livekit/player/index.html#/?fromMark=123470),立刻观看您开启的直播。
199
+
200
+ - **方式二:**
201
+
202
+ 集成我们提供的 观众观看(Web 桌面浏览器)或者 观众观看(H5 移动端浏览器) 页面,观看直播。
203
+
204
+ > **重要提示:**
205
+ >
206
+
207
+ > 请使用不同的**用户 ID** 登录观看: 开播端和观看端必须使用**不同**的用户 ID,否则后登录的设备会强制先登录的设备下线(即“被踢下线”)。
208
+ >
209
+
210
+ ## 高级功能集成
211
+
212
+ > **注意:**
213
+ >
214
+
215
+ > 以下高级功能均是基于 步骤 3 中创建的 `live-pusher.vue` 示例文件进行的扩展。请根据您的业务需求,将下方的代码片段集成到 `live-pusher.vue` 的对应位置(`template` 区域或 `script` 逻辑中),以启用相应的能力。
216
+ >
217
+
218
+ 【支持媒体设置能力】
219
+
220
+ 若您需要支持媒体设置能力,包括设置扬声器、麦克风音量大小等内容,请参考如下代码示例复制到`live-pusher.vue `文件中即可。
221
+ ``` typescript
222
+ <!-- MediaDeviceSetting 媒体设备设置 -->
223
+ <template>
224
+ <div class="media-device-container">
225
+ <!-- MicVolumeSetting 麦克风设置 -->
226
+ <div class="device-setting">
227
+ <TUIIcon class="device-icon" :icon="microphoneIsOn ? IconAudioOpen : IconAudioClose" :size="20" @click="switchMicrophoneStatus" />
228
+ <TUISlider v-model="microphoneVolume" class="device-slider" :min="0" :max="100" :disabled="!microphoneIsOn" @change="handleMicrophoneVolumeChange" />
229
+ </div>
230
+ <!-- SpeakerVolumeSetting 扬声器设置 -->
231
+ <div class="device-setting">
232
+ <TUIIcon class="device-icon" :icon="speakerIsOn ? IconSpeakerOn : IconSpeakerOff" :size="20" @click="switchSpeaker(!speakerIsOn)" />
233
+ <TUISlider v-model="speakerVolume" class="device-slider" :min="0" :max="100" :disabled="!speakerIsOn" @change="handleSpeakerVolumeChange" />
234
+ </div>
235
+ </div>
236
+ </template>
237
+
238
+ <script lang="ts" setup>
239
+ import { ref, watch } from 'vue';
240
+ import { TUIIcon, TUISlider, IconSpeakerOn, IconSpeakerOff, IconAudioOpen, IconAudioClose } from '@tencentcloud/uikit-base-component-vue3';
241
+ import { useDeviceState } from 'tuikit-atomicx-vue3';
242
+
243
+ const {
244
+ captureVolume,
245
+ setCaptureVolume,
246
+ openLocalMicrophone,
247
+ closeLocalMicrophone,
248
+ } = useDeviceState();
249
+ const { outputVolume, setOutputVolume } = useDeviceState();
250
+ const microphoneVolume = ref(captureVolume.value);
251
+ const speakerVolume = ref(outputVolume.value);
252
+ const microphoneIsOn = ref(true);
253
+ const speakerIsOn = ref(true);
254
+ const templateSpeakerVolume = ref(outputVolume.value);
255
+ const templateMicrophoneVolume = ref(captureVolume.value);
256
+
257
+ const handleMicrophoneVolumeChange = (value: number) => {
258
+ if (value !== captureVolume.value) {
259
+ setCaptureVolume(value);
260
+ }
261
+ };
262
+
263
+ const switchMicrophoneStatus = () => {
264
+ microphoneIsOn.value = !microphoneIsOn.value;
265
+ if (!microphoneIsOn.value) {
266
+ templateMicrophoneVolume.value = captureVolume.value;
267
+ closeLocalMicrophone();
268
+ } else {
269
+ openLocalMicrophone();
270
+ setCaptureVolume(templateMicrophoneVolume.value);
271
+ }
272
+ };
273
+
274
+ const switchSpeaker = (open: boolean) => {
275
+ speakerIsOn.value = open;
276
+ if (!open) {
277
+ templateSpeakerVolume.value = outputVolume.value;
278
+ setOutputVolume(0);
279
+ } else {
280
+ setOutputVolume(templateSpeakerVolume.value);
281
+ }
282
+ };
283
+
284
+ const handleSpeakerVolumeChange = (value: number) => {
285
+ if (value !== outputVolume.value) {
286
+ setOutputVolume(value);
287
+ }
288
+ };
289
+
290
+ watch(captureVolume, (newVal) => {
291
+ microphoneVolume.value = newVal;
292
+ });
293
+
294
+ watch(outputVolume, (newVal) => {
295
+ speakerVolume.value = newVal;
296
+ });
297
+ </script>
298
+
299
+ <style scoped>.media-device-container{display:flex;align-items:center;gap:12px}.device-setting{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--bg-color-function);border-radius:8px;border:1px solid var(--stroke-color-secondary)}.device-slider{width:100px}.device-icon{cursor:pointer;color:var(--text-color-primary);transition:color .2s}.device-icon:hover{color:var(--text-color-link)}</style>
300
+
301
+ ```
302
+
303
+ 【支持横竖屏推流能力】
304
+
305
+ 若您需要支持横竖屏推流能力,包括设置切换横竖屏等内容,请参考如下代码示例复制到`live-pusher.vue `文件中即可。
306
+ ``` typescript
307
+ <!-- LayoutSwitch 横竖屏推流设置 -->
308
+ <template>
309
+ <div
310
+ class="custom-icon-container"
311
+ :class="{ disabled: currentLive?.liveId }"
312
+ @click="handleOrientationSwitch"
313
+ >
314
+ <IconHorizontalMode
315
+ v-if="currentOrientation === LiveOrientation.Landscape"
316
+ class="custom-icon"
317
+ />
318
+ <IconPortrait
319
+ v-else
320
+ class="custom-icon"
321
+ />
322
+ <span class="custom-text co-guest-text">{{
323
+ currentOrientation === LiveOrientation.Portrait ? t('Portrait') : t('Landscape')
324
+ }}</span>
325
+ </div>
326
+ </template>
327
+
328
+ <script setup lang="ts">
329
+ import { ref, watch } from 'vue';
330
+ import { useUIKit, TUIToast, TOAST_TYPE, IconPortrait, IconHorizontalMode } from '@tencentcloud/uikit-base-component-vue3';
331
+ import { useLiveListState, LiveOrientation } from 'tuikit-atomicx-vue3';
332
+
333
+ const { t } = useUIKit();
334
+
335
+ enum TUISeatLayoutTemplate {
336
+ LandscapeDynamic_1v3 = 200,
337
+ PortraitDynamic_Grid9 = 600,
338
+ PortraitDynamic_1v6 = 601,
339
+ PortraitFixed_Grid9 = 800,
340
+ PortraitFixed_1v6 = 801,
341
+ PortraitFixed_6v6 = 802,
342
+ }
343
+
344
+ const { currentLive, updateLiveInfo } = useLiveListState();
345
+ const currentOrientation = ref(LiveOrientation.Portrait);
346
+
347
+ watch(
348
+ () => currentLive.value?.layoutTemplate,
349
+ newVal => {
350
+ if (newVal === TUISeatLayoutTemplate.LandscapeDynamic_1v3) {
351
+ currentOrientation.value = LiveOrientation.Landscape;
352
+ } else {
353
+ currentOrientation.value = LiveOrientation.Portrait;
354
+ }
355
+ },
356
+ { immediate: true }
357
+ );
358
+
359
+ const handleOrientationSwitch = () => {
360
+ if (currentLive.value?.liveId) {
361
+ TUIToast({
362
+ message: t('Cannot switch orientation during live streaming'),
363
+ type: TOAST_TYPE.ERROR,
364
+ });
365
+ return;
366
+ }
367
+ if (currentOrientation.value === LiveOrientation.Portrait) {
368
+ updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.LandscapeDynamic_1v3 });
369
+ } else {
370
+ updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.PortraitDynamic_Grid9 });
371
+ }
372
+ };
373
+ </script>
374
+
375
+ <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>
376
+ ```
377
+
378
+ 【支持连观众能力】
379
+
380
+ 若您需要支持观众连麦能力,包括设置连麦申请、连麦管理等内容,请参考如下代码示例复制到`live-pusher.vue `文件中即可。
381
+ ``` typescript
382
+ <!-- CoGuestButton 观众连麦设置 -->
383
+ <template>
384
+ <div class="custom-icon-container" :class="{ disabled: disabled }" @click="handleCoGuest">
385
+ <span v-if="applicants.length > 0" class="unread-count">{{ applicants.length }}</span>
386
+ <IconCoGuest class="custom-icon" />
387
+ <span class="custom-text co-guest-text">{{ t('CoGuest') }}</span>
388
+ </div>
389
+ <TUIDialog :title="t('CoGuest')" :visible="coGuestPanelVisible" :custom-classes="['co-guest-dialog']" @close="coGuestPanelVisible = false" @confirm="coGuestPanelVisible = false" @cancel="coGuestPanelVisible = false">
390
+ <CoGuestPanel class="co-guest-panel" />
391
+ <template #footer>
392
+ <div />
393
+ </template>
394
+ </TUIDialog>
395
+ </template>
396
+
397
+ <script lang="ts" setup>
398
+ import { computed, ref, watch } from 'vue';
399
+ import { useUIKit, TUIDialog, TUIToast, TOAST_TYPE, IconCoGuest } from '@tencentcloud/uikit-base-component-vue3';
400
+ import { CoGuestPanel, CoHostStatus, useCoGuestState, useCoHostState, useLiveListState } from 'tuikit-atomicx-vue3';
401
+
402
+ const { t } = useUIKit();
403
+ const { applicants } = useCoGuestState();
404
+ const { currentLive } = useLiveListState();
405
+ const { coHostStatus } = useCoHostState();
406
+ const disabled = computed(() => !currentLive.value?.liveId || coHostStatus.value !== CoHostStatus.Disconnected);
407
+
408
+ const coGuestPanelVisible = ref(false);
409
+
410
+ const handleCoGuest = () => {
411
+ if (disabled.value) {
412
+ const message = !currentLive.value?.liveId
413
+ ? t('Cannot use co-guest before live starts')
414
+ : t('Cannot enable audience co-hosting while co-hosting with other hosts');
415
+ TUIToast({ type: TOAST_TYPE.ERROR, message });
416
+ return;
417
+ }
418
+ coGuestPanelVisible.value = true;
419
+ };
420
+
421
+ watch(disabled, () => {
422
+ if (disabled.value) {
423
+ coGuestPanelVisible.value = false;
424
+ }
425
+ });
426
+ </script>
427
+
428
+ <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>
429
+ ```
430
+
431
+ 【支持布局设置能力】
432
+
433
+ 若您需要支持视频流切换布局能力,包括设置**动态宫格布局、静态宫格布局、静态小窗布局、浮动小窗布局**等内容,请参考如下代码示例复制到`live-pusher.vue `文件中即可。
434
+ ``` typescript
435
+ <!-- OrientationSwitch 布局设置 -->
436
+ <template>
437
+ <div
438
+ class="custom-icon-container"
439
+ :class="{ 'disabled': disabled }"
440
+ @click="handleSwitchLayout"
441
+ >
442
+ <IconLayoutTemplate class="custom-icon" />
443
+ <span class="custom-text setting-text">{{ t('Layout Settings') }}</span>
444
+ </div>
445
+ <TUIDialog
446
+ :customClasses="['layout-dialog']"
447
+ :title="t('Layout Settings')"
448
+ :visible="layoutSwitchVisible"
449
+ @close="handleCancel"
450
+ @confirm="handleConfirm"
451
+ @cancel="handleCancel"
452
+ appendTo="body"
453
+ >
454
+ <div class="layout-label">
455
+ {{ t('Audience Layout') }}
456
+ </div>
457
+ <div class="template-options">
458
+ <div class="options-grid">
459
+ <template
460
+ v-for="template in layoutOptions"
461
+ :key="template.id"
462
+ >
463
+ <div
464
+ class="option-card"
465
+ :class="{ active: selectedTemplate === template.templateId }"
466
+ @click="selectTemplate(template.templateId)"
467
+ >
468
+ <div class="option-info">
469
+ <component
470
+ :is="template.icon"
471
+ v-if="template.icon"
472
+ class="option-icon"
473
+ />
474
+ <h4>{{ template.label }}</h4>
475
+ </div>
476
+ </div>
477
+ </template>
478
+ </div>
479
+ </div>
480
+ </TUIDialog>
481
+ </template>
482
+
483
+ <script lang="ts" setup>
484
+ import { ref, computed, watch, h, defineComponent } from 'vue';
485
+ import { TUIErrorCode } from '@tencentcloud/tuiroom-engine-js';
486
+ import { useUIKit, TUIDialog, TUIToast, TOAST_TYPE, IconLayoutTemplate } from '@tencentcloud/uikit-base-component-vue3';
487
+ import { useLiveListState, useCoHostState, CoHostStatus } from 'tuikit-atomicx-vue3';
488
+
489
+ /**
490
+ * 直播间麦位排版模板
491
+ */
492
+ enum TUISeatLayoutTemplate {
493
+ LandscapeDynamic_1v3 = 200,
494
+ PortraitDynamic_Grid9 = 600,
495
+ PortraitDynamic_1v6 = 601,
496
+ PortraitFixed_Grid9 = 800,
497
+ PortraitFixed_1v6 = 801,
498
+ PortraitFixed_6v6 = 802,
499
+ }
500
+
501
+ const createSvgIcon = (pathD: string) => defineComponent({
502
+ 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 })])
503
+ });
504
+
505
+ const Dynamic1v6 = createSvgIcon('M3 3h7v7H3V3zm11 0h7v4h-7V3zm0 6h7v4h-7V9zm0 6h7v6h-7v-6zM3 12h7v9H3v-9z');
506
+ 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');
507
+ const Fixed1v6 = createSvgIcon('M2 2h9v9H2V2zm11 0h9v4h-9V2zm0 5h9v4h-9V7zm0 5h9v4h-9v-4zm0 5h9v5h-9v-5zM2 13h9v9H2v-9z');
508
+ const FixedGrid9 = createSvgIcon('M2 2h6v6H2V2zm7 0h6v6H9V2zm7 0h6v6h-6V2zM2 9h6v6H2V9zm7 0h6v6H9V9zm7 0h6v6h-6V9zM2 16h6v6H2v-6zm7 0h6v6H9v-6zm7 0h6v6h-6v-6z');
509
+ const HorizontalFloat = createSvgIcon('M2 4h20v12H2V4zm3 14h4v2H5v-2zm6 0h4v2h-4v-2zm6 0h4v2h-4v-2z');
510
+
511
+ const { t } = useUIKit();
512
+ const { currentLive, updateLiveInfo } = useLiveListState();
513
+ const { coHostStatus } = useCoHostState();
514
+ const disabled = computed(() => coHostStatus.value === CoHostStatus.Connected);
515
+
516
+ watch(
517
+ () => currentLive.value?.liveId,
518
+ (liveId) => {
519
+ if (!liveId) {
520
+ updateLiveInfo({ layoutTemplate: TUISeatLayoutTemplate.PortraitDynamic_Grid9 });
521
+ }
522
+ },
523
+ { immediate: true },
524
+ );
525
+
526
+ const layoutSwitchVisible = ref(false);
527
+
528
+ const handleSwitchLayout = () => {
529
+ if (disabled.value) {
530
+ TUIToast({ type: TOAST_TYPE.ERROR, message: t('Layout switching is not available during co-hosting') });
531
+ return;
532
+ }
533
+ layoutSwitchVisible.value = true;
534
+ };
535
+
536
+ const portraitLayoutOptions = computed(() => [
537
+ {
538
+ id: 'PortraitDynamic_Grid9',
539
+ icon: DynamicGrid9,
540
+ templateId: TUISeatLayoutTemplate.PortraitDynamic_Grid9,
541
+ label: t('Dynamic Grid9 Layout'),
542
+ },
543
+ {
544
+ id: 'PortraitFixed_1v6',
545
+ icon: Fixed1v6,
546
+ templateId: TUISeatLayoutTemplate.PortraitFixed_1v6,
547
+ label: t('Fixed 1v6 Layout'),
548
+ },
549
+ {
550
+ id: 'PortraitFixed_Grid9',
551
+ icon: FixedGrid9,
552
+ templateId: TUISeatLayoutTemplate.PortraitFixed_Grid9,
553
+ label: t('Fixed Grid9 Layout'),
554
+ },
555
+ {
556
+ id: 'PortraitDynamic_1v6',
557
+ icon: Dynamic1v6,
558
+ templateId: TUISeatLayoutTemplate.PortraitDynamic_1v6,
559
+ label: t('Dynamic 1v6 Layout'),
560
+ },
561
+ ]);
562
+
563
+ const horizontalLayoutOptions = computed(() => [
564
+ {
565
+ id: 'LandscapeDynamic_1v3',
566
+ icon: HorizontalFloat,
567
+ templateId: TUISeatLayoutTemplate.LandscapeDynamic_1v3,
568
+ label: t('Landscape Template'),
569
+ },
570
+ ]);
571
+
572
+ const layoutOptions = computed(() => {
573
+ if (currentLive.value && currentLive.value?.layoutTemplate >= 200 && currentLive.value?.layoutTemplate <= 599) {
574
+ return horizontalLayoutOptions.value;
575
+ }
576
+ return portraitLayoutOptions.value;
577
+ });
578
+
579
+ const selectedTemplate = ref<TUISeatLayoutTemplate | null>(currentLive.value?.layoutTemplate ?? null);
580
+
581
+ function selectTemplate(template: TUISeatLayoutTemplate) {
582
+ selectedTemplate.value = template;
583
+ }
584
+
585
+ watch(() => currentLive.value?.layoutTemplate, (newVal) => {
586
+ if (newVal) {
587
+ selectedTemplate.value = newVal;
588
+ }
589
+ });
590
+
591
+ async function handleConfirm() {
592
+ if (selectedTemplate.value) {
593
+ try {
594
+ await updateLiveInfo({ layoutTemplate: selectedTemplate.value });
595
+ layoutSwitchVisible.value = false;
596
+ } catch (error: any) {
597
+ let errorMessage = t('Layout switch failed');
598
+ if (error.code === TUIErrorCode.ERR_FREQ_LIMIT) {
599
+ errorMessage = t('Operation too frequent, please try again later');
600
+ }
601
+ TUIToast({ type: TOAST_TYPE.ERROR, message: errorMessage });
602
+ }
603
+ } else {
604
+ layoutSwitchVisible.value = false;
605
+ }
606
+ }
607
+
608
+ function handleCancel() {
609
+ selectedTemplate.value = currentLive.value?.layoutTemplate ?? null;
610
+ layoutSwitchVisible.value = false;
611
+ }
612
+ </script>
613
+
614
+ <style scoped>
615
+ .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; }
616
+ </style>
617
+ ```
618
+
619
+ ## 自定义您的界面布局
620
+
621
+ `TUILiveKit` 支持灵活定制开播页与直播页的功能和样式,您可根据业务需求调整布局、隐藏 / 显示功能模块。
622
+
623
+ ### 横竖屏推流设置
624
+
625
+ `TUILiveKit` 支持**横屏**和**竖屏**两种推流模式,您可根据直播场景选择合适的推流方向:
626
+ | **推流模式** | **适用场景** | **说明** |
627
+ | --- | --- | --- |
628
+ | **竖屏推流** | 秀场直播、电商带货、聊天互动 | 默认模式,适合移动端观看,画面比例为 9:16。 |
629
+ | **横屏推流** | 游戏直播、在线教育、会议直播 | 适合 PC 端观看,画面比例为 16:9。 |
630
+
631
+ > **注意:**
632
+ >
633
+
634
+ > 横竖屏切换必须在**开播前**进行设置,直播过程中无法切换推流方向。
635
+ >
636
+
637
+ #### 通过 UI 交互切换
638
+
639
+ 在主播开播页的底部控制栏,点击**横屏 / 竖屏**按钮即可切换推流方向:
640
+ - 显示**竖屏**时,当前为**竖屏推流模式**。
641
+
642
+ - 显示**横屏**时,当前为**横屏推流模式**
643
+
644
+ #### 通过代码设置
645
+
646
+ 您也可以通过调用 `updateLiveInfo` 方法,在代码中设置推流方向:
647
+ ``` typescript
648
+ import { useLiveListState } from 'tuikit-atomicx-vue3';
649
+
650
+ const { updateLiveInfo } = useLiveListState();
651
+
652
+ // 切换为横屏模式(模板 ID: 200)
653
+ updateLiveInfo({ layoutTemplate: 200 });
654
+
655
+ // 切换为竖屏模式(模板 ID: 600)
656
+ updateLiveInfo({ layoutTemplate: 600 });
657
+ ```
658
+
659
+ > **说明:**
660
+ >
661
+ > - 横屏模式对应的布局模板 ID 范围为 200-599,默认使用 200(横屏浮动布局)。
662
+ > - 竖屏模式对应的布局模板 ID 范围为 600-899,默认使用 600(动态宫格布局)。
663
+ > - 切换横竖屏时,系统会自动切换到对应方向的默认布局模板。
664
+
665
+ ### 直播布局模板选择
666
+
667
+ `TUILiveKit` 提供多种直播布局模板,用于控制主播与连麦嘉宾的画面排列方式。您可在主播开播页的**布局设置**选择合适样式:
668
+
669
+ #### 竖屏模式布局模板
670
+
671
+ 竖屏模式下提供 **4 种布局模板**,适用于秀场直播、电商带货等场景:
672
+ | **名称** | **动态宫格布局** | **动态 1V6 布局** | **静态宫格布局** | **静态小窗布局** |
673
+ | --- | --- | --- | --- | --- |
674
+ | **模板 ID** | 600 | 601 | 800 | 801 |
675
+ | **描述** | **默认布局**,根据连麦人数动态调整宫格大小,画面自适应填充。 | 主播画面居中大窗显示,连麦嘉宾以**浮动小窗**形式环绕在主播周围。 | 固定 9 宫格布局,每个嘉宾占据一个**固定大小**的宫格位置。 | 主播画面全屏显示,连麦嘉宾以**固定小窗**形式显示在画面边缘。 |
676
+ | **适用场景** | 通用场景,连麦人数不固定。 | 主播为主、嘉宾为辅的互动场景。 | 多人连麦、语音聊天室等固定人数场景。 | 主播全屏展示、嘉宾辅助的场景。 |
677
+
678
+ #### 横屏模式布局模板
679
+
680
+ 横屏模式下提供 **1 种布局模板**,适用于游戏直播、在线教育等场景:
681
+ | **名称** | **横屏浮动布局** |
682
+ | --- | --- |
683
+ | **模板 ID** | 200 |
684
+ | **描述** | 主播画面全屏显示,连麦嘉宾以**浮动小窗**形式显示在画面底部。 |
685
+ | **适用场景** | 游戏直播、屏幕分享、在线教育等需要横屏展示的场景。 |
686
+
687
+ #### 通过代码设置布局模板
688
+
689
+ 您可以通过调用 `updateLiveInfo` 方法,在代码中设置布局模板:
690
+ ``` typescript
691
+ import { useLiveListState } from 'tuikit-atomicx-vue3';
692
+
693
+ const { updateLiveInfo } = useLiveListState();
694
+
695
+ // 设置竖屏动态宫格布局
696
+ updateLiveInfo({ layoutTemplate: 600 });
697
+
698
+ // 设置竖屏动态 1v6 布局
699
+ updateLiveInfo({ layoutTemplate: 601 });
700
+
701
+ // 设置竖屏静态宫格布局
702
+ updateLiveInfo({ layoutTemplate: 800 });
703
+
704
+ // 设置竖屏静态 1v6 布局
705
+ updateLiveInfo({ layoutTemplate: 801 });
706
+
707
+ // 设置横屏浮动布局
708
+ updateLiveInfo({ layoutTemplate: 200 });
709
+ ```
710
+
711
+ > **注意:**
712
+ >
713
+ > - 布局模板可以在**开播前**和**直播中**进行切换。
714
+ > - 在主播 PK 连线期间,**无法切换**布局模板。
715
+ > - 切换横竖屏推流方向时,布局模板会自动切换为对应方向的默认模板。
716
+
717
+ ## 自由定制
718
+
719
+ ### 颜色主题及语言
720
+
721
+ 通过配置 `App.vue` 中 `UIKitProvider` 的入参,修改主题及语言的默认值。
722
+ | **UIKitProvider 参数** | **可选值** | **默认值** |
723
+ | --- | --- | --- |
724
+ | theme | "light" \\| "dark" | "light" |
725
+ | language | "zh-CN" \\| "en-US" | "en-US" |
726
+
727
+ ``` typescript
728
+ <UIKitProvider theme="light">
729
+ <router-view />
730
+ </UIKitProvider>
731
+
732
+ <script setup lang="ts">
733
+ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
734
+ ```
735
+
736
+ ### 按钮 Button 和图标 Icon
737
+
738
+ 若您需要对按钮 Button 或图标 Icon 等其他控件进行新增或替换等 UI 定制,您可以通过如下方式实现,以`live-player.vue `文件中的按钮和图标为例,您可以参考下图找到对应按钮或图标的指定位置源码,对当前部分的控件进行**增加、删除、替换**等 UI 定制操作。
739
+
740
+ 根据上述示例,我们同样支持您根据项目需求对**观众观看页面**进行 UI 定制的能力。除了页面 UI 布局调整,我们也支持您对**颜色主题、字体、圆角、按钮、图标、输入框、弹框等**内容进行**增加、删除、修改**等操作,满足您的 UI 定制需要。
741
+ | **类别** | **功能** | **描述** | **组件详细定制指引** |
742
+ | --- | --- | --- | --- |
743
+ | **素材管理** | 自定义素材管理区域展示 | **支持:**<br>- **调整展示 Icon 的大小、颜色或对 Icon 进行替换。** | [媒体源配置面板](https://cloud.tencent.com/document/product/647/123838) |
744
+ | **在线观众** | 自定义观众信息展示 | **支持:**<br>- **展示/隐藏观众等级。**<br>- **观众信息字体、颜色 UI 自定义设置。**<br>- **替换为您需要的 Icon 风格。** | [视频源编辑画板](https://cloud.tencent.com/document/product/647/123834) |
745
+ | **消息列表** | 自定义消息弹幕区域展示 | **支持:**<br>- **展示/隐藏聊天输入区域。**<br>- **支持 UI 定制聊天气泡风格、定制观众等级等内容。** | [聊天弹幕组件](https://cloud.tencent.com/document/product/647/123836) |
746
+
747
+ ## 下一步
748
+
749
+ 恭喜您,现在您已经成功集成了**主播开播页面 **。接下来,您可以实现**观众观看页**、**直播列表页**和 **UI 自定义**等内容,可参考下表:
750
+ | **功能** | **描述** | **集成指引** |
751
+ | --- | --- | --- |
752
+ | **观众观看** | 实现观众进入主播的直播间后观看直播,实现观众连麦 、直播间信息、在线观众、弹幕显示等功能。 | 观众观看 |
753
+ | **直播列表** | 展示直播列表界面和功能,包含直播列表,房间信息展示功能。 | 直播列表 |
754
+ | **UI 自定义** | 更详细的 UI 组件自定义指引。 | 概述 |