


SDKAppID 完成计费统计。npm install @tencentcloud/roomkit-web-vue3@5 tuikit-atomicx-vue3@5.4.1 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
pnpm install @tencentcloud/roomkit-web-vue3@5 tuikit-atomicx-vue3@5.4.1 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
yarn add @tencentcloud/roomkit-web-vue3@5 tuikit-atomicx-vue3@5.4.1 @tencentcloud/uikit-base-component-vue3 @tencentcloud/universal-api
<template><UIKitProvider theme="light" language="zh-CN"><ConferenceMainView></ConferenceMainView></UIKitProvider></template><script setup lang="ts">import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';import { ConferenceMainView } from '@tencentcloud/roomkit-web-vue3';</script>
conference.login 方法登录 TUIRoomKit。调用 conference.login 完成鉴权后,建议同步调用 conference.setSelfInfo 来设置当前用户的展示昵称和头像,这些信息将在随后的参会者视频区域和成员列表中展示。import { onMounted } from 'vue';import { conference } from '@tencentcloud/roomkit-web-vue3';// 注意:以下参数请替换为您真实的业务数据和控制台获取的 SDKAppIDconst SDKAppID = 0;const userId = 'your_user_id';const userSig = 'your_dynamic_user_sig';const userName = '用户展示昵称';onMounted(async () => {try {// 1. 执行 SDK 登录await conference.login({sdkAppId: SDKAppID,userId,userSig,});// 2. (可选)设置个人信息await conference.setSelfInfo({userName,avatarUrl: 'https://your-avatar-url.com/image.png',});} catch (error) {console.error('TUIRoomKit 登录失败:', error);}});
conference.login 登录逻辑可能尚未执行。推荐通过 watch 监听 loginUserInfo.value?.userId,该字段非空即视为 TUIRoomKit 登录成功。import { watch } from 'vue';import { useLoginState } from 'tuikit-atomicx-vue3/room';import { conference, RoomType } from '@tencentcloud/roomkit-web-vue3';const { loginUserInfo } = useLoginState();watch(() => loginUserInfo.value?.userId, async (userId) => {if (userId) {await conference.joinRoom({ roomId: 'webinar_123456', roomType: RoomType.Webinar });}}, { immediate: true });
conference.createAndJoinRoom 创建并直接进入研讨会房间。其他参与者请参见 步骤5 调用 conference.joinRoom 接口加入。import { conference, RoomType } from '@tencentcloud/roomkit-web-vue3';const startWebinar = async () => {await conference.createAndJoinRoom({roomId: 'webinar_123456', // 请替换为您真实的 roomId,建议研讨会场景的 roomId 统一以 'webinar_' 开头roomType: RoomType.Webinar,options: {roomName: '我的研讨会',},});};
RoomType 必须为 "Live",并通过 SeatTemplate 字段指定上麦模版。POST /v4/live_engine_http_srv/create_room{"RoomInfo": {"RoomId": "webinar_123456","RoomType": "Live","RoomName": "我的研讨会","Owner_Account": "host-user-id","SeatTemplate": "VideoLandscapeAudioMix10Seats","IsPublicVisible": false}}
SeatTemplate 上麦模版参数说明:模版值 | 适用端 | 说明 |
VideoLandscapeAudioMix10Seats | Web 桌面端 | 横屏视频布局,最多 10 个上麦席位 |
VideoPortraitAudioMix10Seats | 移动端 | 竖屏视频布局,最多 10 个上麦席位 |
joinRoom 后默认以观众身份进入。观众可通过"举手"功能向主持人申请上台,或由主持人/管理员在成员列表中直接将其设置为嘉宾。暂不支持通过参数直接指定以嘉宾身份加入。import { conference, RoomType } from '@tencentcloud/roomkit-web-vue3';const joinWebinar = async (sharedRoomId: string) => {await conference.joinRoom({roomId: sharedRoomId, // 请替换为您真实的 roomIdroomType: RoomType.Webinar,});};
leaveRoom() 离开研讨会,调用后不影响其他成员,房间继续存在。import { conference } from '@tencentcloud/roomkit-web-vue3';await conference.leaveRoom();
endRoom() 后,房间内所有成员均会收到房间已解散的通知。import { conference } from '@tencentcloud/roomkit-web-vue3';await conference.endRoom();
endRoom() 必须由房主在成功进入房间后才能调用。非房主身份或在尚未进入房间的状态下调用会报错。onMounted)时注册状态监听,并在组件卸载(onUnmounted)时及时销毁监听。<template><ConferenceMainView></ConferenceMainView></template><script setup lang="ts">import { ref, onMounted, onUnmounted } from 'vue';import { ConferenceMainView, conference, RoomEvent } from '@tencentcloud/roomkit-web-vue3';const backToHome = () => {};const backToLogin = () => {};onMounted(() => {conference.on(RoomEvent.ROOM_DISMISS, backToHome);conference.on(RoomEvent.ROOM_LEAVE, backToHome);conference.on(RoomEvent.ROOM_ERROR, backToHome);conference.on(RoomEvent.KICKED_OUT, backToHome);conference.on(RoomEvent.KICKED_OFFLINE, backToLogin);conference.on(RoomEvent.USER_SIG_EXPIRED, backToLogin);});onUnmounted(() => {conference.off(RoomEvent.ROOM_DISMISS, backToHome);conference.off(RoomEvent.ROOM_LEAVE, backToHome);conference.off(RoomEvent.ROOM_ERROR, backToHome);conference.off(RoomEvent.KICKED_OUT, backToHome);conference.off(RoomEvent.KICKED_OFFLINE, backToLogin);conference.off(RoomEvent.USER_SIG_EXPIRED, backToLogin);});</script>
事件 | 触发时机 | 推荐处理 |
RoomEvent.ROOM_DISMISS | 房间被解散,对所有成员触发 | 返回首页或会议列表 |
RoomEvent.ROOM_LEAVE | 用户点击 TUIRoomKit 界面上的「离开」按钮 | 返回首页或会议列表 |
RoomEvent.ROOM_ERROR | 进房失败或房间内发生未处理的错误 | 返回首页或会议列表 |
RoomEvent.KICKED_OUT | 被房主踢出房间 | 返回首页或会议列表 |
RoomEvent.KICKED_OFFLINE | 同一账号在其他设备登录,当前设备被强制下线 | 跳转登录页 |
RoomEvent.USER_SIG_EXPIRED | UserSig 已过期 | 跳转登录页 |
npm run dev
pnpm run dev
yarn run dev

UIKitProvider 参数 | 可选值 | 默认值 |
theme | "light" | "dark" | "light" |
language | "zh-CN" | "en-US" | "en-US" |
<UIKitProvider theme="light" language="zh-CN"><router-view /></UIKitProvider><script setup lang="ts">import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';</script>
conference.setFeatureConfig 更新分享链接。import { conference } from '@tencentcloud/roomkit-web-vue3';// 在 conference.createAndJoinRoom / conference.joinRoom 成功之后立即调用,确保 roomId 已知const roomId = 'webinar_123456';conference.setFeatureConfig({shareLink: `https://your-domain.com/room?roomId=${roomId}`,});
conference.endRoom() 方法;// 开启麦克风、摄像头、屏幕分享、全屏权限<iframe src="https://your-domain.com/index.html" allow="microphone; camera; display-capture; display; fullscreen;" />
// 请在进房前设置内网代理参数import TUIRoomEngine from '@tencentcloud/tuiroom-engine-js';import { useRoomEngine } from 'tuikit-atomicx-vue3/room';const { roomEngine } = useRoomEngine();TUIRoomEngine.once('ready', () => {const trtcCloud = roomEngine.instance?.getTRTCCloud();trtcCloud.callExperimentalAPI(JSON.stringify({api: 'setNetworkProxy',params: {websocketProxy: "wss://proxy.example.com/ws/",turnServer: [{url: '14.3.3.3:3478',username: 'turn',credential: 'turn',}],iceTransportPolicy: 'relay',},}));});
文档反馈