@tencent-rtc/mcp 1.4.6 → 1.6.0-beta.1

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