# UniApp RTC SDK 函数参考 适用 同批交付 `akstream-rtc` 插件。普通 uni-app 与 uni-app x 使用 `AkRtcUniClient` 门面;Web 目标经 `createWebAdapter` 复用 Web SDK,Android/iOS 原生目标经 `createNativeAdapter` 和 UTS 插件。原生模块必须装入**自定义基座**,只在标准基座编译通过不等于真机能运行。先读[UniApp 接入步骤](uniapp.md)。 ```js import { AkRtcUniClient, createNativeAdapter } from '@akstream/rtc-uniapp-sdk' const adapter = createNativeAdapter(nativeBridge, { serverUrl, onEvent: event => renderEvent(event) }) const rtc = new AkRtcUniClient(adapter, event => renderEvent(event)) await rtc.join({ roomId, accessTicket, microphone: false, camera: false }) ``` 业务后端提供一次性 `accessTicket`;不要把长期平台 API Token 打进 App。`AkRtcUniError` 含 `code`、可选 `feature`/HTTP `status`。先用 `getFeatureSupport` 判断该目标平台是否真正支持功能,`configurationRequired` 表示还缺原生配置,不应把按钮当成已经可用。 ## 门面、会话与录制 | 方法 | 入参 | 返回 | 特殊情况 | |---|---|---|---| | `new AkRtcUniClient(adapter?, onEvent?)` | 平台适配器、事件处理函数 | 无 UI 客户端 | 一场活动会议持有一个实例;原生目标需自定义基座。 | | `getFeatureSupport(feature)`、`getFeatures()` | `RtcFeature` 或无参 | `supported/unsupported/configurationRequired/notImplemented` 与原因 | 仅表明平台适配能力,服务端仍会按角色和房间权限拒绝操作。 | | `join({roomId,accessTicket,passcode?,microphone?,camera?})` | 房间、一次性票据、初始媒体意图 | 入会/等候结果 | `Waiting` 时不要开放采集;票据不可重放。 | | `createMeeting(settings, creator)`、`createDemoMeeting(settings)` | 业务创建回调或 Demo 设置 | `roomId/accessTicket` | 正式建会由业务后端认证并处理幂等;Demo 入口仅用于测试。 | | `leave()`、`close()` | 无 | `Promise` | `leave` 退出当前设备;`close` 关闭适配器和订阅,页面卸载时调用。 | | `startContinuousRecording()`、`stopContinuousRecording(recordingId)`、`getContinuousRecording()` | 停录需要录制 ID | 当前状态或无活动任务 | 主持人启停,普通成员可查询;`recordingState` 事件用于宿主显示。 | | `invoke(feature, operation, payload?)` | 功能名、适配器操作名、JSON 数据 | 操作实际结果 | 高级扩展入口;先核对 `getFeatureSupport`,未知操作不能绕过平台限制。 | 原生桥 `roomAction` 先收到“请求已接收” ACK,再等待带同一 `requestId` 的 `roomActionResult` 才完成 Promise;离会或关闭时未完成请求取消。**ACK 不等于服务端已执行成功**,403 必须保留给宿主处理。[会议控制动作](room-actions.md)列出可用动作及 payload。 ## 设备、媒体与显示 | 方法 | 入参 | 返回 | 特殊情况 | |---|---|---|---| | `setMicrophoneEnabled(enabled)`、`setCameraEnabled(enabled)` | 布尔值 | 实际操作结果 | 主持收权、系统拒绝或网络异常都可能让目标与实际不同;听状态事件。 | | `getMicrophones()`、`setMicrophoneDevice(deviceId)` | 设备 ID | 设备列表 / 切换结果 | 设备名称依赖系统授权,ID 不作跨会议身份。 | | `getCameras()`、`switchCamera(deviceId?)` | 可选相机 ID | 列表 / 切换结果 | 前后摄切换受原生采集生命周期约束。 | | `getAudioOutputs()`、`setAudioOutput(deviceId)` | 输出设备 ID | 列表 / 实际路由结果 | 蓝牙、扬声器与 WebView 输出能力不同,先看支持状态。 | | `startScreenShare()`、`stopScreenShare()` | 开始需平台系统授权 | 共享状态 | iOS ReplayKit/Android MediaProjection 的系统授权由宿主处理;屏幕是独立流。 | | `getVideoModes()`、`setVideoQuality(targetParticipantId, quality)` | 成员 ID;`{width,height,frameRate}` | 候选/目标质量结果 | 目标不能保证实际编码尺寸,服务端还会检查主持权限。 | | `getEndpointInfo()`、`getPublicationStats()` | 无 | 终端参数 / 发布统计 | 统计用于排障,不包含硬件唯一标识,也不证明已落盘录像。 | | `toggleFullscreen(publicationId?)`、`exitFullscreen()` | 可选发布 ID | 全屏结果 | 只控制宿主展示,不改变订阅或录像。 | ## 协作、适配器与档案 | 方法 | 入参 | 返回 | 特殊情况 | |---|---|---|---| | `sendChat(text, targetParticipantId?)` | 文本、可选私发成员 | 消息操作结果 | 私发仅发送者和目标可见,回放不会将其公开。 | | `sendReaction(reaction)`、`setHandRaised(raised)` | 反应名 / 布尔值 | 会议事件 | 不授予媒体或白板权限。 | | `createWebAdapter(client, views?)` | Web SDK 客户端、可选全屏视图桥 | `RtcAdapter` | H5/WebView 使用,媒体仍由 Web SDK 管理。 | | `createNativeAdapter(bridge, {serverUrl,onEvent?})` | 原生 UTS 桥与事件函数 | 带 `clientId` 的 `RtcAdapter` | `clientId` 供原生视图绑定;关闭时 `disposeRtcClient`。 | | `createUniArchiveClient({baseUrl,accessProvider,request?})` | HTTPS 地址、按会议/动作取票函数、可选传输函数 | 无 UI 档案客户端 | 会后可单独创建;方法与 Web [档案 SDK](archive-api.md)一致。 | `RtcNativeBridge` 的 `createRtcClient` 返回原生 `clientId`;`invokeRtcClient(id,operation,payloadJson,callback)` 回传 `accepted/errorCode/message/payloadJson`;`getRtcFeatures(id)` 返回平台支持列表;`disposeRtcClient(id)` 释放。页面不要拼接 WHIP/WHEP 地址,也不要把桥接 ACK 当最终业务结果。UniApp x 的 `requestRtcArchive` 动作和短时票据规则见[档案函数参考](archive-api.md)。 `RtcFeature` 的公开分类包括入会、摄像头、麦克风、远端媒体、切相机、画面变换、音频输出、投屏、聊天/附件/白板、主持治理/准入、录制/邀请、举手/反应、发言、设备选择、质量、统计和建会。先探测再展示操作;`notImplemented` 应隐藏入口或给出明确提示,不要静默成功。