@tencentcloud/sdk-mcp 1.7.3 → 1.7.4

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 (114) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +13 -13
  3. package/knowledge/path-meta.js +23 -1
  4. package/package.json +1 -1
  5. package/resource/index/manifest.json +1 -1
  6. package/resource/integration/callkit/preset/android/integration.md +4 -0
  7. package/resource/integration/callkit/preset/flutter/integration.md +4 -0
  8. package/resource/integration/callkit/preset/ios/integration.md +14 -13
  9. package/resource/integration/callkit/preset/vue/integration.md +0 -3
  10. package/resource/integration/chat/preset/android/integration.md +3 -145
  11. package/resource/integration/chat/preset/flutter/integration.md +20 -128
  12. package/resource/integration/chat/preset/ios/integration.md +2 -269
  13. package/resource/integration/chat/preset/react/integration.md +27 -1
  14. package/resource/integration/chat/preset/uni-app/integration.md +5 -1
  15. package/resource/integration/chat/preset/vue/integration.md +21 -31
  16. package/resource/integration/livekit/preset/live/android/live-host-integration.md +4 -0
  17. package/resource/integration/livekit/preset/live/ios/live-host-integration.md +4 -0
  18. package/resource/integration/livekit/preset/live/vue/live-list-integration.md +3 -4
  19. package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -1
  20. package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -1
  21. package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +4 -9
  22. package/resource/integration/roomkit/preset/vue/integration.md +0 -213
  23. package/resource/knowledge/callkit/best-practice/android/video-chat-dating.md +490 -0
  24. package/resource/knowledge/callkit/best-practice/flutter/android-keep-call-alive-background.md +79 -0
  25. package/resource/knowledge/callkit/best-practice/flutter/background-incoming-call-no-notification.md +99 -0
  26. package/resource/knowledge/callkit/best-practice/flutter/ios-keep-call-alive-background.md +93 -0
  27. package/resource/knowledge/callkit/best-practice/flutter/ios-startup-crash-version-voip.md +68 -0
  28. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -1
  29. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +9 -7
  30. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +10 -7
  31. package/resource/knowledge/callkit/core-sdk/miniprogram/call-engine.md +19 -19
  32. package/resource/knowledge/callkit/core-sdk/miniprogram/call-event.md +16 -16
  33. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +0 -84
  34. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +0 -102
  35. package/resource/knowledge/callkit/core-sdk/web/call-event.md +2 -2
  36. package/resource/knowledge/callkit/faq/error-code.md +62 -36
  37. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +1 -1
  38. package/resource/knowledge/callkit/preset/android/api.md +10 -10
  39. package/resource/knowledge/callkit/preset/harmonyos/api.md +362 -0
  40. package/resource/knowledge/callkit/preset/harmonyos/integration.md +322 -0
  41. package/resource/knowledge/callkit/preset/ios/api.md +9 -9
  42. package/resource/knowledge/callkit/preset/miniprogram/api-uniapp.md +293 -0
  43. package/resource/knowledge/callkit/preset/miniprogram/api.md +19 -19
  44. package/resource/knowledge/callkit/preset/miniprogram/integration.md +292 -0
  45. package/resource/knowledge/callkit/preset/miniprogram/uniapp-integration.md +521 -0
  46. package/resource/knowledge/callkit/preset/uni-app/api.md +49 -0
  47. package/resource/knowledge/callkit/preset/uni-app/integration.md +353 -0
  48. package/resource/knowledge/chat/preset/android-view/integration.md +52 -100
  49. package/resource/knowledge/chat/preset/ios/features/language.md +5 -5
  50. package/resource/knowledge/chat/preset/ios-uikit/integration.md +184 -923
  51. package/resource/knowledge/chat/preset/react/features/search.md +9 -214
  52. package/resource/knowledge/chat/preset/react/h5/integration.md +965 -0
  53. package/resource/knowledge/chat/preset/vue/features/chat-header.md +0 -36
  54. package/resource/knowledge/chat/preset/vue/features/contact-list.md +0 -34
  55. package/resource/knowledge/chat/preset/vue/features/conversation-list.md +0 -39
  56. package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +0 -74
  57. package/resource/knowledge/chat/preset/vue/features/search.md +9 -790
  58. package/resource/knowledge/chat/preset/vue/h5/integration.md +724 -0
  59. package/resource/knowledge/livekit/core-sdk/features/uni-app/live-list.md +0 -167
  60. package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +1 -1
  61. package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +1 -1
  62. package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -1
  63. package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +1 -1
  64. package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -1
  65. package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +1 -1
  66. package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +1 -1
  67. package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +2 -2
  68. package/resource/knowledge/livekit/core-sdk/live/uni-app/co-guest-interaction.md +1 -66
  69. package/resource/knowledge/livekit/core-sdk/live/uni-app/host-interaction.md +1 -66
  70. package/resource/knowledge/livekit/core-sdk/live/uni-app/integration.md +1 -1
  71. package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +1 -1
  72. package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +2 -2
  73. package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -1
  74. package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +1 -1
  75. package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +2 -2
  76. package/resource/knowledge/livekit/core-sdk/voice/uni-app/integration.md +2 -2
  77. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +1 -24
  78. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +0 -3
  79. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +0 -5
  80. package/resource/knowledge/push/api-reference/harmonyos.md +9 -9
  81. package/resource/knowledge/push/api-reference/unity.md +10 -10
  82. package/resource/knowledge/push/api-reference/unreal-engine.md +11 -11
  83. package/resource/knowledge/push/integration/android.md +57 -13
  84. package/resource/knowledge/push/integration/donut.md +3 -3
  85. package/resource/knowledge/push/integration/flutter.md +38 -24
  86. package/resource/knowledge/push/integration/harmonyos.md +1 -11
  87. package/resource/knowledge/push/integration/ios.md +21 -6
  88. package/resource/knowledge/push/integration/react-native.md +1 -1
  89. package/resource/knowledge/push/integration/uni-app.md +1 -1
  90. package/resource/knowledge/push/integration/unity.md +1 -1
  91. package/resource/knowledge/push/integration/unreal-engine.md +2 -2
  92. package/resource/knowledge/roomkit/core-sdk/android/room-state.md +3 -3
  93. package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +4 -4
  94. package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +2 -2
  95. package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +4 -4
  96. package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +3 -3
  97. package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +4 -4
  98. package/resource/knowledge/roomkit/core-sdk/vue/device-detection.md +0 -9
  99. package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
  100. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -3
  101. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -16
  102. package/resource/knowledge/roomkit/core-sdk/vue/schedule-room.md +0 -3
  103. package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -3
  104. package/resource/knowledge/roomkit/core-sdk/vue/whiteboard-annotation.md +0 -15
  105. package/resource/knowledge/roomkit/preset/android/integration.md +1 -202
  106. package/resource/knowledge/roomkit/preset/flutter/integration.md +13 -13
  107. package/resource/knowledge/roomkit/preset/harmonyos/integration.md +6 -2
  108. package/resource/knowledge/roomkit/preset/ios/integration.md +0 -201
  109. package/resource/knowledge/roomkit/preset/react/integration.md +0 -202
  110. package/resource/knowledge/roomkit/preset/uniapp-app/integration.md +207 -509
  111. package/resource/knowledge/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +25 -6
  112. package/server.js +1 -1
  113. package/utils/report-cls-client.js +1 -1
  114. package/utils/report-es-client.js +1 -1
@@ -78,68 +78,6 @@ const handleJoinLive = (live: any) => {
78
78
 
79
79
  </script>
80
80
 
81
- <style scoped>
82
- .live-list {
83
- flex: 1;
84
- background: #fff;
85
- }
86
-
87
- .list {
88
- width: 100%;
89
- }
90
-
91
- .row {
92
- flex-direction: row;
93
- padding: 0 32rpx 16rpx;
94
- justify-content: space-between;
95
- }
96
-
97
- .card {
98
- width: 48%;
99
- height: 320rpx;
100
- background: #f5f5f5;
101
- border-radius: 12rpx;
102
- overflow: hidden;
103
- }
104
-
105
- .cover {
106
- width: 100%;
107
- height: 220rpx;
108
- }
109
-
110
- .info {
111
- flex: 1;
112
- padding: 12rpx;
113
- flex-direction: column;
114
- }
115
-
116
- .title {
117
- font-size: 26rpx;
118
- font-weight: 600;
119
- color: #000;
120
- lines: 1;
121
- text-overflow: ellipsis;
122
- overflow: hidden;
123
- }
124
-
125
- .owner {
126
- font-size: 22rpx;
127
- color: #666;
128
- margin-top: 4rpx;
129
- lines: 1;
130
- text-overflow: ellipsis;
131
- overflow: hidden;
132
- }
133
-
134
- .count {
135
- font-size: 20rpx;
136
- color: #999;
137
- margin-top: 4rpx;
138
- lines: 1;
139
- text-overflow: ellipsis;
140
- overflow: hidden;
141
- }
142
- </style>
143
81
  ```
144
82
 
145
83
  **LiveInfo 参数说明**
@@ -286,111 +224,6 @@ const handleJoinLive = (live: any) => {
286
224
  };
287
225
  </script>
288
226
 
289
- <style scoped>
290
- .live-list {
291
- flex: 1;
292
- background: #fff;
293
- }
294
-
295
- /* 分类标签栏 */
296
- .category-tabs {
297
- flex-direction: row;
298
- padding: 16rpx 32rpx;
299
- background: #f9f9f9;
300
- border-bottom: 1rpx solid #e8e8e8;
301
- overflow-x: auto;
302
- }
303
-
304
- .tab {
305
- padding: 8rpx 20rpx;
306
- margin-right: 12rpx;
307
- background: #fff;
308
- border: 1rpx solid #e0e0e0;
309
- border-radius: 20rpx;
310
- font-size: 24rpx;
311
- color: #666;
312
- white-space: nowrap;
313
- }
314
-
315
- .tab.active {
316
- background: #0468FC;
317
- border-color: #0468FC;
318
- color: #fff;
319
- }
320
-
321
- .list {
322
- width: 100%;
323
- }
324
-
325
- .row {
326
- flex-direction: row;
327
- padding: 0 32rpx 16rpx;
328
- justify-content: space-between;
329
- }
330
-
331
- .card {
332
- width: 48%;
333
- height: 320rpx;
334
- background: #f5f5f5;
335
- border-radius: 12rpx;
336
- overflow: hidden;
337
- position: relative;
338
- }
339
-
340
- .cover {
341
- width: 100%;
342
- height: 220rpx;
343
- }
344
-
345
- /* 分类徽章 */
346
- .category-badge {
347
- position: absolute;
348
- top: 8rpx;
349
- left: 8rpx;
350
- background: rgba(4, 104, 252, 0.9);
351
- border-radius: 4rpx;
352
- padding: 4rpx 8rpx;
353
- }
354
-
355
- .badge-text {
356
- font-size: 18rpx;
357
- color: #fff;
358
- font-weight: 600;
359
- }
360
-
361
- .info {
362
- flex: 1;
363
- padding: 12rpx;
364
- flex-direction: column;
365
- }
366
-
367
- .title {
368
- font-size: 26rpx;
369
- font-weight: 600;
370
- color: #000;
371
- lines: 1;
372
- text-overflow: ellipsis;
373
- overflow: hidden;
374
- }
375
-
376
- .owner {
377
- font-size: 22rpx;
378
- color: #666;
379
- margin-top: 4rpx;
380
- lines: 1;
381
- text-overflow: ellipsis;
382
- overflow: hidden;
383
- }
384
-
385
- .count {
386
- font-size: 20rpx;
387
- color: #999;
388
- margin-top: 4rpx;
389
- lines: 1;
390
- text-overflow: ellipsis;
391
- overflow: hidden;
392
- }
393
- </style>
394
227
  ```
395
228
 
396
229
  ### 场景二:实现电商直播的商品信息展示
@@ -315,7 +315,7 @@
315
315
 
316
316
  ### 运行效果
317
317
 
318
- 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
318
+ 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
319
319
 
320
320
  ## 完善 UI 细节
321
321
 
@@ -232,7 +232,7 @@
232
232
 
233
233
  ### 运行效果
234
234
 
235
- 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
235
+ 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
236
236
 
237
237
  ## 完善 UI 细节
238
238
 
@@ -278,7 +278,7 @@
278
278
 
279
279
  ### 运行效果
280
280
 
281
- 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
281
+ 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
282
282
 
283
283
  ## 完善 UI 细节
284
284
 
@@ -289,7 +289,7 @@
289
289
 
290
290
  ### 运行效果
291
291
 
292
- 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制 UI 逻辑。
292
+ 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制 UI 逻辑。
293
293
 
294
294
  ## 完善 UI 细节
295
295
 
@@ -599,7 +599,7 @@ class _YourAudiencePageState extends State<YourAudiencePage> {
599
599
 
600
600
  ### 运行效果
601
601
 
602
- 集成 **LiveCoreWidget** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
602
+ 集成 **LiveCoreWidget** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#.E4.B8.B0.E5.AF.8C.E7.9B.B4.E6.92.AD.E5.9C.BA.E6.99.AF) 来完善直播场景。
603
603
 
604
604
  |**布局类型**|**动态宫格布局**|**浮动小窗布局**|**固定宫格布局**|**固定小窗布局**|
605
605
  |---------|---------|---------|---------|---------|
@@ -236,7 +236,7 @@
236
236
 
237
237
  ### 运行效果
238
238
 
239
- 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
239
+ 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#736c00b3-02dc-494b-838d-226439fd3e15) 来定制您想要的 UI 逻辑。
240
240
 
241
241
  ## 完善 UI 细节
242
242
 
@@ -191,7 +191,7 @@
191
191
 
192
192
  ### 运行效果
193
193
 
194
- 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
194
+ 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#6fe270da-d3b3-4785-bdc2-53b59d6d9cc0) 来定制您想要的 UI 逻辑。
195
195
 
196
196
  ## 完善 UI 细节
197
197
 
@@ -171,7 +171,7 @@ func application(_ application: UIApplication, didFinishLaunchingWithOptions lau
171
171
  |`isMessageDisable`|`Bool`|选填|是否禁言(`true`:是,`false`:否)。|
172
172
  |`isPublicVisible`|`Bool`|选填|是否公开可见(`true`:是,`false`:否)。|
173
173
  |`seatMode`|`TakeSeatMode`|选填|上麦模式(`.free`:自由上麦,`.apply`:申请上麦)。|
174
- |`seatTemplate`|SeatLayoutTemplate|必填|麦位布局模板。|
174
+ |`seatTemplate`|[SeatLayoutTemplate](#id)|必填|麦位布局模板。|
175
175
  |`coverURL`|`String`|选填|直播间的封面图片地址。|
176
176
  |`backgroundURL`|`String`|选填|直播间的背景图片地址。|
177
177
  |`categoryList`|`[NSNumber]`|选填|直播间的分类标签列表。|
@@ -363,7 +363,7 @@ class YourAudienceViewController: UIViewController {
363
363
 
364
364
  ### 运行效果
365
365
 
366
- 集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
366
+ 集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善直播场景。
367
367
  | | <strong>动态宫格布局</strong> | <strong>浮动小窗布局</strong> | <strong>固定宫格布局</strong> | <strong>固定小窗布局</strong> |
368
368
  | --- | --- | --- | --- | --- |
369
369
  | <strong>模板取值</strong> | .videoDynamicGrid9Seats | .videoDynamicFloat7Seats | .videoFixedGrid9Seats | .videoFixedFloat7Seats |
@@ -309,7 +309,7 @@
309
309
 
310
310
  ### 运行效果
311
311
 
312
- 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
312
+ 当您集成以上功能实现后,请分别使用两个观众与主播进行连麦操作,观众 A 同时打开摄像头和麦克风,观众 B 只打开麦克风,运行效果如下,您可以参考下一章节 [完善 UI 细节](#.E5.AE.8C.E5.96.84-ui-.E7.BB.86.E8.8A.82) 来定制您想要的 UI 逻辑。
313
313
 
314
314
  ## 完善 UI 细节
315
315
 
@@ -378,44 +378,6 @@
378
378
  };
379
379
  </script>
380
380
 
381
- <style scoped>
382
- .overlay-container {
383
- pointer-events: none;
384
- }
385
-
386
- .participant-ui-container {
387
- overflow: hidden;
388
- }
389
- .avatar-placeholder {
390
- display: flex;
391
- flex-direction: column;
392
- justify-content: center;
393
- align-items: center;
394
- background-color: #2E323A;
395
- }
396
- .avatar-image {
397
- width: 160rpx;
398
- height: 160rpx;
399
- border-radius: 80rpx;
400
- }
401
- .avatar-name {
402
- margin-top: 20rpx;
403
- font-size: 28rpx;
404
- color: #FFFFFF;
405
- }
406
- .nickname-bar {
407
- position: absolute;
408
- left: 10rpx;
409
- bottom: 10rpx;
410
- background-color: rgba(0, 0, 0, 0.5);
411
- padding: 4rpx 16rpx;
412
- border-radius: 20rpx;
413
- }
414
- .nickname-text {
415
- color: #FFFFFF;
416
- font-size: 24rpx;
417
- }
418
- </style>
419
381
  ```
420
382
  - **步骤 2**:在直播间页面中组合所有组件
421
383
 
@@ -466,33 +428,6 @@
466
428
  });
467
429
  </script>
468
430
 
469
- <style scoped>
470
- .page-container {
471
- flex: 1;
472
- background-color: #000;
473
- }
474
-
475
- .live-container {
476
- flex: 1;
477
- position: relative;
478
- }
479
- .video-layer,
480
- .ui-layer {
481
- position: absolute;
482
- top: 0;
483
- left: 0;
484
- right: 0;
485
- bottom: 0;
486
- }
487
-
488
- .video-layer {
489
- z-index: 1;
490
- }
491
-
492
- .ui-layer {
493
- z-index: 2;
494
- }
495
- </style>
496
431
  ```
497
432
 
498
433
  ## API 文档
@@ -118,7 +118,7 @@
118
118
 
119
119
  ### 运行效果
120
120
 
121
- 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 完善 UI 细节 来定制您想要的 UI 逻辑。
121
+ 当您集成以上功能实现后,请分别使用主播 A 和主播 B 进行对应操作,运行效果如下,您可以参考下一章节 [完善 UI 细节](#6fe270da-d3b3-4785-bdc2-53b59d6d9cc0) 来定制您想要的 UI 逻辑。
122
122
 
123
123
  ## 完善 UI 细节
124
124
 
@@ -187,44 +187,6 @@
187
187
  };
188
188
  </script>
189
189
 
190
- <style scoped>
191
- .overlay-container {
192
- pointer-events: none;
193
- }
194
-
195
- .participant-ui-container {
196
- overflow: hidden;
197
- }
198
- .avatar-placeholder {
199
- display: flex;
200
- flex-direction: column;
201
- justify-content: center;
202
- align-items: center;
203
- background-color: #2E323A;
204
- }
205
- .avatar-image {
206
- width: 160rpx;
207
- height: 160rpx;
208
- border-radius: 80rpx;
209
- }
210
- .avatar-name {
211
- margin-top: 20rpx;
212
- font-size: 28rpx;
213
- color: #FFFFFF;
214
- }
215
- .nickname-bar {
216
- position: absolute;
217
- left: 10rpx;
218
- bottom: 10rpx;
219
- background-color: rgba(0, 0, 0, 0.5);
220
- padding: 4rpx 16rpx;
221
- border-radius: 20rpx;
222
- }
223
- .nickname-text {
224
- color: #FFFFFF;
225
- font-size: 24rpx;
226
- }
227
- </style>
228
190
  ```
229
191
  - **步骤 2**:在直播间页面中组合所有组件
230
192
 
@@ -275,33 +237,6 @@
275
237
  });
276
238
  </script>
277
239
 
278
- <style scoped>
279
- .page-container {
280
- flex: 1;
281
- background-color: #000;
282
- }
283
-
284
- .live-container {
285
- flex: 1;
286
- position: relative;
287
- }
288
- .video-layer,
289
- .ui-layer {
290
- position: absolute;
291
- top: 0;
292
- left: 0;
293
- right: 0;
294
- bottom: 0;
295
- }
296
-
297
- .video-layer {
298
- z-index: 1;
299
- }
300
-
301
- .ui-layer {
302
- z-index: 2;
303
- }
304
- </style>
305
240
  ```
306
241
 
307
242
  ## API 文档
@@ -243,7 +243,7 @@ onMounted(() => {
243
243
 
244
244
  ### 运行效果
245
245
 
246
- 集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 丰富直播场景 来完善直播场景。
246
+ 集成 **LiveCoreView** 后,您将得到一个纯净的视频渲染视图,它已具备完整的直播业务能力,但没有任何交互 UI。您可以参考下一章节 [丰富直播场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善直播场景。
247
247
 
248
248
  ## 丰富直播场景
249
249
 
@@ -463,7 +463,7 @@ seatStore.unlockSeat(2, object : CompletionHandler {
463
463
  主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
464
464
 
465
465
  #### 实现方式:
466
- 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略。
466
+ 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详见[接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234)说明。
467
467
 
468
468
  2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
469
469
 
@@ -302,7 +302,7 @@ battleStore.exitBattle(battleID, null)
302
302
 
303
303
  ### 场景二:主播发起带 PK 模式的连线
304
304
 
305
- 1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(。
305
+ 1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
306
306
 
307
307
  2. 主播选中其中一个主播,发起 PK 邀请。
308
308
 
@@ -410,7 +410,7 @@ override fun onCoHostRequestReceived(inviter: SeatUserInfo, extensionInfo: Strin
410
410
 
411
411
  #### 步骤 4. 自动进入 PK 状态
412
412
 
413
- 此步骤同《主播在连线后再发起 PK》的步骤 3相同,此处不再赘述。
413
+ 此步骤同[《主播在连线后再发起 PK》的步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa)相同,此处不再赘述。
414
414
 
415
415
  ## PK 分数更新与胜负判断
416
416
 
@@ -465,7 +465,7 @@ if (result2.isSuccess) {
465
465
  主播和普通上麦用户可以调用 `moveUserToSeat` 移动麦位。
466
466
 
467
467
  #### 实现方式:
468
- 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
468
+ 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#moveusertoseat-.E6.8E.A5.E5.8F.A3.E5.8F.82.E6.95.B0.EF.BC.9A) 说明。
469
469
 
470
470
  2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
471
471
 
@@ -421,7 +421,7 @@ seatStore.unlockSeat(seatIndex: 2) { result in
421
421
  主播和普通上麦用户可以调用 `moveUserToSeat(userID:targetIndex:policy:completion:)`移动麦位。
422
422
 
423
423
  #### 实现方式:
424
- 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 接口参数 说明。
424
+ 1. **主播移动麦位**:主播可以调用此接口将任意用户移动到指定麦位。此时 `userID` 传入目标用户的 ID,`targetIndex` 是目标麦位索引,`policy` 参数来指定如果目标麦位有人时的移动策略,详细参见 [接口参数](#227e92a5-7552-41ae-b57c-2dab5b7de234) 说明。
425
425
 
426
426
  2. **普通上麦用户移动自己麦位**:普通上麦用户也可以调用此接口来移动自己。此时 `userID` 必须传入用户自己的 ID,`targetIndex` 传入想去的新麦位索引,此时 `policy` 参数无效,如果目标麦位有人时会报错并停止移动。
427
427
 
@@ -359,7 +359,7 @@ battleStore.exitBattle(battleID: battleID, completion: { [weak self] result in
359
359
 
360
360
  ### 场景二:主播发起带 PK 模式的连线
361
361
 
362
- 1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(。
362
+ 1. 主播在个人直播过程中,点击 PK 按钮,打开 UI 面板展示当前正在开播的主播列表(详见[《主播发起一场连线》的步骤 1](#1ce7ad55-e199-4098-a9bb-554c204fdd97))。
363
363
 
364
364
  2. 主播选中其中一个主播,发起 PK 邀请。
365
365
 
@@ -506,7 +506,7 @@ coHostStore.coHostEventPublisher
506
506
 
507
507
  #### 步骤 4. 自动进入 PK 状态
508
508
 
509
- 此步骤与 主播在连线后再发起 PK - 步骤 3 相同,此处不再赘述。
509
+ 此步骤与 [主播在连线后再发起 PK - 步骤 3](#b775b648-c9e2-480c-8678-f7e419e32bfa) 相同,此处不再赘述。
510
510
 
511
511
  ## PK 分数更新与胜负判断
512
512
 
@@ -226,7 +226,7 @@ const handleJoinLive = () => {
226
226
 
227
227
  #### **3. 构建麦位 UI 界面**
228
228
 
229
- 观众构建麦位 UI 的流程与主播完全一致。
229
+ 观众构建麦位 UI 的流程与主播完全一致,请参考主播 [构建麦位 UI 界面](#**4.-.E6.9E.84.E5.BB.BA.E9.BA.A6.E4.BD.8D-ui-.E7.95.8C.E9.9D.A2**)。
230
230
 
231
231
  #### **4. 退出语聊房**
232
232
 
@@ -255,7 +255,7 @@ const handleLeaveLive = () => {
255
255
 
256
256
  ### 运行效果
257
257
 
258
- 完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 丰富语聊场景 来完善语聊场景。
258
+ 完成上述步骤后,即可完成一个最基础的语聊直播场景。您可以参考 [丰富语聊场景](#82dbc44c-8a8e-40e2-89b9-66070f4beb72) 来完善语聊场景。
259
259
 
260
260
  ## 功能进阶
261
261
 
@@ -77,7 +77,6 @@ onMounted(async () => {
77
77
  });
78
78
  </script>
79
79
 
80
- <style scoped>.app{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;padding:20px;box-sizing:border-box}.chat-container{width:100%;max-width:500px;height:600px;border-radius:16px;display:flex;flex-direction:column;overflow:hidden}.chat-content{flex:1;overflow:hidden}.barrage-list{width:100%;height:100%}.chat-input{background-color:var(--bg-color-dialog);padding:16px}.barrage-input{width:100%}</style>
81
80
  ```
82
81
 
83
82
  ## 自定义组件
@@ -100,7 +99,7 @@ onMounted(async () => {
100
99
  | | | | |
101
100
 
102
101
  > **注意:**
103
- > 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 如何处理自定义弹幕消息时的表情渲染 处理。
102
+ > 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 [如何处理自定义弹幕消息时的表情渲染](#3a3aa2ed-5af5-44f8-8e4f-d182393294b9) 处理。
104
103
  >
105
104
 
106
105
  #### **containerStyle + itemStyle** 调整样式
@@ -176,7 +175,6 @@ const getMessageText = (message: Barrage) => {
176
175
  };
177
176
  </script>
178
177
 
179
- <style scoped>.custom-message{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;padding:12px;border-radius:12px;margin:4px 0;box-shadow:0 2px 8px rgba(0,0,0,0.1);transition:transform 0.2s ease}.custom-message:hover{transform:translateY(-2px)}.message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;opacity:0.9}.user-name{font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.message-time{font-size:11px;opacity:0.7}.message-content{font-size:14px;line-height:1.4;word-break:break-word}</style>
180
178
  ```
181
179
 
182
180
  **步骤 2:在 BarrageList 中使用自定义组件**
@@ -268,7 +266,6 @@ function getGiftCount(message: { data?: string }): number {
268
266
  }
269
267
  </script>
270
268
 
271
- <style scoped>.slot-text-item{font-size:12px;line-height:1.6;padding:6px 12px;border-radius:10px;background:rgba(255,255,255,0.05);word-break:break-word}.slot-owner-badge{display:inline-block;background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;font-size:10px;font-weight:600;padding:1px 8px;border-radius:10px;margin-right:6px;vertical-align:middle;line-height:1.6}.slot-sender-name{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}.slot-message-text{color:rgba(255,255,255,0.85)}.slot-gift-item{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(255,0,128,0.15),rgba(255,140,0,0.12) 50%,rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.25);box-shadow:0 0 12px rgba(255,0,128,0.1),inset 0 0 12px rgba(255,140,0,0.05)}.slot-gift-img{width:40px;height:40px;flex-shrink:0;object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,140,0,0.5))}.slot-gift-info{display:flex;flex-direction:column;gap:2px;min-width:0}.slot-gift-sender{font-size:12px;color:rgba(255,255,255,0.8);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-gift-detail{font-size:12px;color:rgba(255,255,255,0.5)}.slot-gift-name{color:#ffaa00;font-weight:700;text-shadow:0 0 8px rgba(255,170,0,0.4)}.slot-gift-count{color:#ff4081;font-weight:800;font-size:13px;margin-left:2px;text-shadow:0 0 8px rgba(255,64,129,0.4)}</style>
272
269
  ```
273
270
 
274
271
  #### Props 速查表
@@ -316,7 +313,6 @@ function getGiftCount(message: { data?: string }): number {
316
313
  <BarrageInput containerClass="cyberpunk-input" />
317
314
  </template>
318
315
 
319
- <style>.cyberpunk-input{background:linear-gradient(135deg,rgba(15,10,40,0.9),rgba(30,15,60,0.85))!important;border:1.5px solid transparent!important;border-radius:16px!important;padding:8px 18px!important;box-shadow:0 0 15px rgba(139,92,246,0.2),0 0 30px rgba(255,0,128,0.08),inset 0 1px 0 rgba(255,255,255,0.05)!important;transition:box-shadow .3s ease!important;border-image:linear-gradient(135deg,#ff0080,#7c3aed,#06b6d4) 1!important;border-image-slice:1!important}.cyberpunk-input:focus-within{box-shadow:0 0 24px rgba(139,92,246,0.35),0 0 48px rgba(255,0,128,0.12),inset 0 1px 0 rgba(255,255,255,0.08)!important}</style>
320
316
  ```
321
317
 
322
318
  #### 调整尺寸
@@ -506,7 +502,6 @@ const drawLottery = async () => {
506
502
  subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
507
503
  </script>
508
504
 
509
- <style scoped>.lottery-panel{padding:8px 0;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:center;gap:10px;align-items:center}.lottery-panel button{padding:6px 20px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-panel button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-panel button:disabled{opacity:.5;cursor:not-allowed}.lottery-panel span{font-size:12px;color:rgba(255,255,255,0.7)}</style>
510
505
  ```
511
506
 
512
507
  #### 2. 观众端:参与抽奖
@@ -593,7 +588,6 @@ const handleLotteryBarrage = (barrage: any) => {
593
588
  subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
594
589
  </script>
595
590
 
596
- <style scoped>.lottery-bar{display:flex;align-items:center;gap:10px;padding:8px 16px;border-top:1px solid rgba(255,255,255,0.1)}.lottery-bar button{padding:6px 16px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-bar button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-bar button:disabled{opacity:.6;cursor:not-allowed;background:rgba(139,92,246,0.3);box-shadow:none}.lottery-bar span{font-size:12px;color:rgba(255,255,255,0.5)}.lottery-winner-banner{padding:10px 14px;text-align:center;font-size:13px;font-weight:500;color:#fff;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);border-radius:12px;margin:4px 0;animation:banner-pop .4s ease}.lottery-winner-banner .winner-name{color:#fbbf24;font-weight:700}@keyframes banner-pop{0%{opacity:0;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}</style>
597
591
  ```
598
592
 
599
593
  通过 [BarrageList](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent) 的 `message-item` 插槽对不同类型的抽奖消息进行差异化渲染。
@@ -636,7 +630,6 @@ function getWinnerName(message: { data?: string }): string {
636
630
  }
637
631
  </script>
638
632
 
639
- <style scoped>.lottery-sys-msg{font-size:12px;padding:8px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(255,0,128,0.12),rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.2);color:rgba(255,200,50,0.95);font-weight:500;text-align:center}.lottery-join-msg{font-size:12px;padding:6px 12px;border-radius:10px;background:rgba(139,92,246,0.08);color:rgba(167,139,250,0.85)}.lottery-result-msg{font-size:13px;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);color:#fff;font-weight:500;text-align:center}.winner-name{color:#fbbf24;font-weight:700}.normal-msg{font-size:12px;line-height:1.6;padding:4px 0;word-break:break-word}.msg-sender{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}</style>
640
633
  ```
641
634
 
642
635
  ## 常见问题
@@ -844,14 +837,6 @@ import { parseEmoji } from './utils/emojiParser';
844
837
  defineProps<{ message: Barrage }>();
845
838
  </script>
846
839
 
847
- <style scoped>
848
- .emoji {
849
- width: 20px;
850
- height: 20px;
851
- vertical-align: middle;
852
- margin: 0 1px;
853
- }
854
- </style>
855
840
  ```
856
841
 
857
842
  **在 Slot 插槽中使用**
@@ -878,14 +863,6 @@ import { BarrageList } from 'tuikit-atomicx-vue3';
878
863
  import { parseEmoji } from './utils/emojiParser';
879
864
  </script>
880
865
 
881
- <style scoped>
882
- .emoji {
883
- width: 20px;
884
- height: 20px;
885
- vertical-align: middle;
886
- margin: 0 1px;
887
- }
888
- </style>
889
866
  ```
890
867
 
891
868
  **解析原理**
@@ -71,7 +71,6 @@ onMounted(async () => {
71
71
  });
72
72
  </script>
73
73
 
74
- <style>.live-audience-container{display:flex;height:100%;width:300px;padding:20px}.live-audience-list{width:100%;height:100%}</style>
75
74
  ```
76
75
 
77
76
  ## 自定义组件
@@ -119,7 +118,6 @@ const vipUserIds = ['user_vip_001', 'user_vip_002'];
119
118
  const isVip = (userId: string) => vipUserIds.includes(userId);
120
119
  </script>
121
120
 
122
- <style scoped>.custom-mark{display:flex;align-items:center;gap:4px}.vip-badge{background:linear-gradient(135deg,#ffd700,#ffb347);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px}.muted-badge{font-size:14px;opacity:.7}</style>
123
121
  ```
124
122
 
125
123
  ### 完全接管列表项渲染(audience-item 插槽)
@@ -153,7 +151,6 @@ const isVip = (userId: string) => vipUserIds.includes(userId);
153
151
  import { LiveAudienceList } from 'tuikit-atomicx-vue3';
154
152
  </script>
155
153
 
156
- <style scoped>.custom-audience-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:rgba(255,255,255,0.05)}.medal{font-size:20px}.rank-number{font-size:14px;font-weight:600;color:rgba(255,255,255,0.5);min-width:24px;text-align:center}.avatar{width:36px;height:36px;border-radius:50%;object-fit:cover}.name{font-size:14px;color:rgba(255,255,255,0.85);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style>
157
154
  ```
158
155
 
159
156
  ### props 速查表