产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明

requestHostConnection 方法。import { useCoHostState, CoHostLayoutTemplate } from "tuikit-atomicx-vue3";// 获取 CoHostState 实例const { requestHostConnection } = useCoHostState();// 用户点击“连线”按钮,并选择了主播 B (targetLiveId)const inviteHostB = async (targetLiveId: string) => {try {await requestHostConnection({liveId: targetLiveId, // 目标主播 B 的房间 IDlayoutTemplate: CoHostLayoutTemplate.Grid, // 选择一个布局模版timeout: 30, // 邀请超时时间(秒)extensionInfo: '', // 可选扩展信息});console.log("连线邀请已发送,等待对方处理...");} catch (error) {console.error("邀请发送失败", error);// 可以在这里进行 Toast 提示}};
useCoHostState 提供的 subscribeEvent 方法订阅对应的事件,您可以接收到主播 B 的处理结果。import { useCoHostState, CoHostEvent } from "tuikit-atomicx-vue3";import { onMounted, onUnmounted } from 'vue';const { subscribeEvent, unsubscribeEvent } = useCoHostState();const onAccepted = (eventInfo: any) => {console.log(`主播 ${eventInfo.invitee.userName} 同意了您的连线邀请`);};const onRejected = (eventInfo: any) => {console.log(`主播 ${eventInfo.invitee.userName} 拒绝了您的连线邀请`);};const onTimeout = (eventInfo: any) => {console.log('邀请超时,对方未回应');};onMounted(() => {subscribeEvent(CoHostEvent.onCoHostRequestAccepted, onAccepted);subscribeEvent(CoHostEvent.onCoHostRequestRejected, onRejected);subscribeEvent(CoHostEvent.onCoHostRequestTimeout, onTimeout);});onUnmounted(() => {unsubscribeEvent(CoHostEvent.onCoHostRequestAccepted, onAccepted);unsubscribeEvent(CoHostEvent.onCoHostRequestRejected, onRejected);unsubscribeEvent(CoHostEvent.onCoHostRequestTimeout, onTimeout);});
subscribeEvent 订阅 onCoHostRequestReceived 事件,主播 B 可以监听到来自主播 A 的邀请。import { useCoHostState, CoHostEvent } from "tuikit-atomicx-vue3";import { onMounted, onUnmounted } from 'vue';const { subscribeEvent, unsubscribeEvent } = useCoHostState();const onRequestReceived = (eventInfo: any) => {const { inviter } = eventInfo;console.log(`收到主播 ${inviter.userName} 的连线邀请`);// 可以在这里弹出 Dialog 询问用户是否接受};onMounted(() => {subscribeEvent(CoHostEvent.onCoHostRequestReceived, onRequestReceived);});onUnmounted(() => {unsubscribeEvent(CoHostEvent.onCoHostRequestReceived, onRequestReceived);});
import { useCoHostState } from "tuikit-atomicx-vue3";// 获取 CoHostState 实例const { acceptHostConnection, rejectHostConnection, applicant } = useCoHostState();// 接受邀请const acceptInvitation = async () => {if (applicant.value) {try {// 传入发起方的 liveId (roomId)await acceptHostConnection({ liveId: applicant.value.liveId });console.log('已接受连线');} catch (error) {console.error('接受连线失败', error);}}};// 拒绝邀请const rejectInvitation = async () => {if (applicant.value) {try {await rejectHostConnection({ liveId: applicant.value.liveId });console.log('已拒绝连线');} catch (error) {console.error('拒绝连线失败', error);}}};
exitHostConnection 方法即可断开当前的跨房连线。此操作对邀请方和受邀方通用。import { useCoHostState, CoHostStatus } from "tuikit-atomicx-vue3";// 获取 CoHostState 实例const { exitHostConnection, coHostStatus } = useCoHostState();// 点击“结束PK”按钮的处理函数const stopPK = async () => {// 判断当前是否处于连线状态if (coHostStatus.value === CoHostStatus.Connected) {try {await exitHostConnection();console.log('已退出连线');// 在此处执行 UI 布局重置等业务逻辑} catch (error) {console.error('退出连线失败:', error);}}};
onCoHostUserLeft 事件来感知,并更新本地 UI。import { useCoHostState, CoHostEvent } from "tuikit-atomicx-vue3";import { onMounted, onUnmounted } from 'vue';const { subscribeEvent, unsubscribeEvent } = useCoHostState();const onUserLeft = (eventInfo: any) => {const { userInfo } = eventInfo;console.log(`主播 ${userInfo.userName} 已断开连线`);// 在此处恢复单主播布局,清除对方画面};onMounted(() => {// 订阅用户离开事件subscribeEvent(CoHostEvent.onCoHostUserLeft, onUserLeft);});onUnmounted(() => {unsubscribeEvent(CoHostEvent.onCoHostUserLeft, onUserLeft);});

requestHostConnection 后,受邀方未触发 onCoHostRequestReceived 事件,请依次排查以下情况:liveId 是目标主播的真实房间 ID,而非用户 ID 或其他业务 ID。onMounted)时调用 subscribeEvent 订阅 CoHostEvent.onCoHostRequestReceived 事件,否则无法接收通知。candidates 是一个计算属性(Computed Ref),它会自动过滤掉不符合邀请条件的用户。如果列表中没有目标用户,可能是因为:connected)、已发出邀请 (invitees) 或正在申请中 (applicant) 的状态。liveList 已正确获取。您可以手动调用 fetchLiveList 刷新。requestHostConnection 时可以传入 timeout 参数(单位:秒)。SDK 会自动清理邀请列表中的该用户,并触发 CoHostEvent.onCoHostRequestTimeout 事件。applicant 状态会被重置。onCoHostRequestTimeout 事件以更新 UI(例如关闭等待弹窗)。try...catch 包裹 acceptHostConnection 调用。applicant.value 是否存在且 liveId 有效,防止因超时或对方取消导致的状态不一致。文档反馈