需要添加直播接口

This commit is contained in:
cbb
2026-01-12 17:52:15 +08:00
parent 83fec2617c
commit 13af9eb303
281 changed files with 313157 additions and 104 deletions

View File

@@ -0,0 +1,277 @@
/**
* @module CoHostState
* @module_description
* 连线主播管理模块
* 核心功能:实现主播间的连线功能,支持主播邀请、连线申请、连线状态管理等主播间互动功能。
* 技术特点:支持多主播音视频同步、画中画显示、音视频质量优化等高级技术,确保连线体验的流畅性。
* 业务价值为直播平台提供主播间协作的核心能力支持PK、合作直播等高级业务场景。
* 应用场景:主播连线、合作直播、跨平台连线、主播互动等高级直播场景。
*/
import { ref } from "vue";
import {
LiveUserInfoParam,
RequestHostConnectionOptions, CancelHostConnectionOptions, AcceptHostConnectionOptions,
RejectHostConnectionOptions, ExitHostConnectionOptions, ILiveListener
} from "@/uni_modules/tuikit-atomic-x";
import { getRTCRoomEngineManager } from "./rtcRoomEngine";
import { callUTSFunction, safeJsonParse } from "../utils/utsUtils";
/**
* 已连接的连线主播列表
* @type {Ref<LiveUserInfoParam[]>}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { connected } = useCoHostState('your_live_id');
*
* // 监听已连接的连线主播列表变化
* watch(connected, (newConnected) => {
* if (newConnected && newConnected.length > 0) {
* console.log('已连接的主播列表:', newConnected);
* }
* });
*
* // 获取当前已连接的连线主播数量
* const coHosts = connected.value;
* console.log('已连接的主播数:', coHosts.length);
*/
const connected = ref<LiveUserInfoParam[]>([]);
/**
* 被邀请连线的主播列表
* @type {Ref<LiveUserInfoParam[]>}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { invitees } = useCoHostState('your_live_id');
*
* // 监听被邀请的主播列表变化
* watch(invitees, (newInvitees) => {
* if (newInvitees && newInvitees.length > 0) {
* console.log('被邀请的主播列表:', newInvitees);
* }
* });
*
* // 获取当前被邀请的主播列表
* const invitedHosts = invitees.value;
* console.log('被邀请的主播数:', invitedHosts.length);
*/
const invitees = ref<LiveUserInfoParam[]>([]);
/**
* 当前申请连线的主播信息
* @type {Ref<LiveUserInfoParam | undefined>}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { applicant } = useCoHostState('your_live_id');
*
* // 监听申请连线的主播信息变化
* watch(applicant, (newApplicant) => {
* if (newApplicant) {
* console.log('申请主播:', newApplicant.userID);
* }
* });
*
* // 获取当前申请连线的主播信息
* const currentApplicant = applicant.value;
* if (currentApplicant) {
* console.log('当前申请连线的主播:', currentApplicant.nickname);
* }
*/
const applicant = ref<LiveUserInfoParam | undefined>();
/**
* 可邀请连线的候选主播列表
* @type {Ref<LiveUserInfoParam[]>}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { candidates } = useCoHostState('your_live_id');
*
* // 监听候选主播列表变化
* watch(candidates, (newCandidates) => {
* if (newCandidates && newCandidates.length > 0) {
* console.log('候选主播列表:', newCandidates);
* }
* });
*
* // 获取当前候选主播列表
* const candidateHosts = candidates.value;
* console.log('候选主播数:', candidateHosts.length);
*/
const candidates = ref<LiveUserInfoParam[]>([]);
/**
* 当前连线状态
* @type {Ref<string>}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { coHostStatus } = useCoHostState('your_live_id');
*
* // 监听连线状态变化
* watch(coHostStatus, (newStatus) => {
* console.log('连线状态:', newStatus);
* });
*
* // 获取当前连线状态
* const status = coHostStatus.value;
* console.log('当前连线状态:', status);
*/
const coHostStatus = ref<string>('')
/**
* 请求连线
* @param {RequestHostConnectionOptions} params - 请求连线参数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { requestHostConnection } = useCoHostState("your_live_id");
* requestHostConnection({});
*/
function requestHostConnection(params: RequestHostConnectionOptions): void {
callUTSFunction("requestHostConnection", params);
}
/**
* 取消连线请求
* @param {CancelHostConnectionOptions} params - 取消连线请求参数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { cancelHostConnection } = useCoHostState(“your_live_id”);
* cancelHostConnection({ toHostLiveID : "target_live_id" });
*/
function cancelHostConnection(params: CancelHostConnectionOptions): void {
callUTSFunction("cancelHostConnection", params);
}
/**
* 接受连线请求
* @param {AcceptHostConnectionOptions} params - 接受连线请求参数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { acceptHostConnection } = useCoHostState(“your_live_id”);
* acceptHostConnection({ fromHostLiveID: "from_live_id" });
*/
function acceptHostConnection(params: AcceptHostConnectionOptions): void {
callUTSFunction("acceptHostConnection", params);
}
/**
* 拒绝连线请求
* @param {RejectHostConnectionOptions} params - 拒绝连线请求参数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { rejectHostConnection } = useCoHostState(“your_live_id”);
* rejectHostConnection({ fromHostLiveID: "from_live_id" });
*/
function rejectHostConnection(params: RejectHostConnectionOptions): void {
callUTSFunction("rejectHostConnection", params);
}
/**
* 退出连线
* @param {ExitHostConnectionOptions} params - 退出连线参数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { exitHostConnection } = useCoHostState(“your_live_id”);
* exitHostConnection({});
*/
function exitHostConnection(params: ExitHostConnectionOptions): void {
callUTSFunction("exitHostConnection", params);
}
/**
* 添加连线主播事件监听
* @param {string} liveID - 直播间ID
* @param {string} eventName - 事件名称,可选值: 'onCoHostRequestReceived'(收到连线请求)<br>'onCoHostRequestCancelled'(连线请求被取消)<br>'onCoHostRequestAccepted'(连线请求被接受)<br>'onCoHostRequestRejected'(连线请求被拒绝)<br>'onCoHostRequestTimeout'(连线请求超时)<br>'onCoHostUserJoined'(连线用户加入)<br>'onCoHostUserLeft'(连线用户离开)
* @param {ILiveListener} listener - 事件回调函数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { addCoHostListener } = useCoHostState("your_live_id");
* addCoHostListener('your_live_id', 'onCoHostRequestReceived', {
* callback: (params) => {
* console.log('result:', params);
* }
* });
*/
function addCoHostListener(liveID: string, eventName: string, listener: ILiveListener): void {
getRTCRoomEngineManager().addCoHostListener(liveID, eventName, listener);
}
/**
* 移除连线主播事件监听
* @param {string} liveID - 直播间ID
* @param {string} eventName - 事件名称,可选值: 'onCoHostRequestReceived'(收到连线请求)<br>'onCoHostRequestCancelled'(连线请求被取消)<br>'onCoHostRequestAccepted'(连线请求被接受)<br>'onCoHostRequestRejected'(连线请求被拒绝)<br>'onCoHostRequestTimeout'(连线请求超时)<br>'onCoHostUserJoined'(连线用户加入)<br>'onCoHostUserLeft'(连线用户离开)
* @param {ILiveListener} listener - 事件回调函数
* @returns {void}
* @memberof module:CoHostState
* @example
* import { useCoHostState } from '@/uni_modules/tuikit-atomic-x/state/CoHostState';
* const { removeCoHostListener } = useCoHostState("your_live_id");
* removeCoHostListener('your_live_id', 'onCoHostRequestReceived', hostListener);
*/
function removeCoHostListener(liveID: string, eventName: string, listener: ILiveListener): void {
getRTCRoomEngineManager().removeCoHostListener(liveID, eventName, listener);
}
const onCoHostStoreChanged = (eventName: string, res: string): void => {
try {
if (eventName === "connected") {
const data = safeJsonParse<LiveUserInfoParam[]>(res, []);
connected.value = data;
} else if (eventName === "invitees") {
const data = safeJsonParse<LiveUserInfoParam[]>(res, []);
invitees.value = data;
} else if (eventName === "applicant") {
const data = safeJsonParse<LiveUserInfoParam | null>(res, null);
applicant.value = data;
} else if (eventName === "candidates") {
const data = safeJsonParse<LiveUserInfoParam[]>(res, []);
candidates.value = data;
} else if (eventName === "coHostStatus") {
coHostStatus.value = JSON.parse(res);
}
} catch (error) {
console.error("onCoHostStoreChanged error:", error);
}
};
function bindEvent(liveID: string): void {
getRTCRoomEngineManager().on("coHostStoreChanged", onCoHostStoreChanged, liveID);
}
export function useCoHostState(liveID: string) {
bindEvent(liveID);
return {
coHostStatus, // 当前连线状态
connected, // 已连接的连线主播列表
invitees, // 被邀请连线的主播列表
applicant, // 当前申请连线的主播信息
// candidates, // 可邀请连线的候选主播列表: TODO待支持
requestHostConnection, // 请求连线
cancelHostConnection, // 取消连线请求
acceptHostConnection, // 接受连线请求
rejectHostConnection, // 拒绝连线请求
exitHostConnection, // 退出连线
addCoHostListener, // 添加连线事件监听
removeCoHostListener, // 移除连线事件监听
};
}
export default useCoHostState;