nimeet 文档中心
English

Cocos Creator 快速开始与功能指南

Cocos Creator:前置条件、安装、Token、加入频道、发布订阅、事件、错误处理与排障;接口名与签名在构建时取自公开 SDK 接口定义。

接口小节由公开 SDK 接口定义生成

版本 v1.1.0 · 更新于 2026-10-26 · 修订 1

Cocos Creator 端提供与声网 Cocos Creator 公开 API 对齐的 TypeScript 接口,覆盖频道加入、发布订阅、事件与错误处理。媒体与渲染能力通过注入的桥接入你的原生工程,SDK 本身不内置媒体栈。

前置条件

  • Cocos Creator 3.8+(TypeScript)。
  • 一个平台桥:CocosBridgePort.invoke(method, params)。Web 构建目标用浏览器 RTC 桥;原生构建目标用

Cocos2d-x 绑定(同一个 ni-meet C++ 核心)。

安装

bash
pnpm --filter @nimeet/rtc-cocos build      # 源码 sdk/cocos,产物 sdk/cocos/build

Cocos Creator 3.x 支持 npm 依赖,把构建产物目录作为本地包引入;当前以源码方式提供。

获取 Token

Token 由你的后端 POST /v1/tokens 签发,客户端只拿 { appId, rtcToken, rtcUid }, 语义见 AccessToken2 语义。initialize 接收 App ID,joinChannel 接收 Token。

加入频道

javascript
import { AgoraRtc } from '@nimeet/rtc-cocos';

const client = AgoraRtc.createAgoraRtcClient({ bridge }); // bridge = 你的 CocosBridgePort
await client.initialize(appId);
await client.joinChannel(token, 'channel-a', 1234);
await client.setClientRole('broadcaster');
  • initialize(string | AgoraRtcEngineConfig):App ID 为空 → protocol_error。
  • 需要引擎的成员在 initialize 之前调用 → bridge_unavailable(提示 call initialize() first),不会打到桥。
  • joinChannel(token, channelId, uid, options?):频道名为空或 uid 非整数 → protocol_error。

发布与订阅

绑定层与声网 Cocos 封装一致:不管理 track 对象,用工程开关表达发布/订阅意图。

  • 音频:enableAudio / enableLocalAudio / muteLocalAudioStream / muteRemoteAudioStream / muteAllRemoteAudioStreams / setAudioProfile;
  • 视频:enableVideo / enableLocalVideo / muteLocal* / muteRemote* / startPreview / stopPreview / switchCamera;
  • 渲染:setupLocalVideoView(canvas) / setupRemoteVideoView(uid, canvas) / update* / remove*,以及 setRenderBackend('engine-texture');
  • 混音与音效:startAudioMixing / pauseAudioMixing / resumeAudioMixing / stopAudioMixing / getAudioMixingCurrentPosition / setAudioMixingPosition / adjustAudioMixing*,

preloadEffect / playEffect / pauseEffect / resumeEffect / stopEffect / setEffectsVolume。

每个成员都带"文档化的方法名"转发给桥;桥侧实现见 sdk/cocos2dx(原生)或浏览器 RTC 桥(Web)。

事件

on(event, listener) 返回取消订阅函数,off(event, listener) 精确移除。事件集合是兼容版本里的 23 个 AgoraEventMap 键:

uploadLogResult、joinChannelSuccess、leaveChannel、rejoinChannelSuccess、connectionInterrupted、 connectionStateChanged、localVideoTextureReady、remoteVideoTextureReady、localVideoTextureReleased、 remoteVideoTextureReleased、renderBackendState、userJoined、userOffline、remoteVideoStateChanged、 localVideoStateChanged、firstLocalAudioFramePublished、audioMixingFinished、audioMixingStateChanged、 remoteAudioStateChanged、volumeIndication、rtcStats、contentInspectResult、error。

错误处理

错误对象 AgoraSdkError,code 是文档化的字符串码,原生数字码(若有)在 nativeCode:

code含义触发点
bridge_unavailable没有桥 / 未 initialize / 已 destroy生命周期守卫
protocol_error参数或状态不符合文档角色、频道场景、画布尺寸、编码尺寸、渲染后端、空 Token、空路径
native_failure桥侧调用失败原生返回失败;nativeCode 保留文档错误码
timeout请求超时(默认 5000ms)桥未在超时内返回

本端所有公开成员都已实现;调用失败会返回上表中的错误码,不会返回假成功。

排障

现象原因处理
全部调用 bridge_unavailable构造时没传 bridgecreateAgoraRtcClient({ bridge })
protocol_error:call initialize() first顺序错了先 initialize,再 joinChannel / 媒体开关
只改了 setVideoEncoderConfiguration 但无画面没有设置画布与预览startPreview → setupLocalVideoView → setupRemoteVideoView
事件收不到桥没有实现 onEvent桥实现 onEvent(listener) 并把原生事件转进来

已知限制

  • 兼容目标:Cocos Creator 端与声网 Cocos Creator 的公开 API 对齐;声网未提供该端官方 API 文档,接口以公开声明为准。
  • 事件:事件按名称对齐,载荷类型以本页事件表为准。
  • 行为由桥决定:生命周期、参数校验、事件分发、超时与错误映射由 SDK 处理;媒体、渲染与混音转发给注入的桥,实际表现取决于宿主工程的原生实现。
  • 部分导出仅供桥内部使用:纹理槽缓存、纹理视图管理等不属于公开 API。

下一步

平台信息

项值
平台Cocos Creator
语言TypeScript
SDK 包nimeet-rtc-cocos
接口版本4.5.3
兼容参考声网 cocos 端 API

本端公开接口与声网 cocos 端 API 对齐;安装与运行要求见上面前置条件。

可用性

该端 SDK:正式可用。本页代码片段使用公开 API;运行时的能力边界以实际发布的 SDK 包为准。

加入频道链路

下列方法名、参数类型与返回值与同端 API 参考一致。一个平台若有多个重载,这里展示最常用的那一个;完整重载见同端 API 参考页。

步骤接口方法重载数
开启视频与本地预览AgoraRtcClientenableVideo1
创建实例 / 初始化AgoraRtcClientinitialize1
加入频道AgoraRtcClientjoinChannel1
离开频道AgoraRtcClientleaveChannel1
订阅远端媒体AgoraRtcClientmuteRemoteAudioStream1
续期 TokenAgoraRtcClientrenewToken1
频道场景AgoraRtcClientsetChannelProfile1
切换角色AgoraRtcClientsetClientRole1
typescript
enableVideo(enabled: boolean): Promise<void>
initialize(config: string|AgoraRtcEngineConfig): Promise<void>
joinChannel(token: string, channelId: string, uid: number, options?: AgoraChannelMediaOptions): Promise<void>
leaveChannel(options?: AgoraLeaveChannelOptions): Promise<void>
muteRemoteAudioStream(uid: number, muted: boolean): Promise<void>
renewToken(token: string): Promise<void>
setChannelProfile(profile: 'communication'|'liveBroadcasting'): Promise<void>
setClientRole(role: 'broadcaster'|'audience', options?: AgoraClientRoleOptions): Promise<void>

事件与回调

接口事件名监听器参数
AgoraRtcClientuploadLogResult{requestId:string;success:boolean;reason:number;}
AgoraRtcClientjoinChannelSuccess{channelId:string;uid:number;elapsed:number;}
AgoraRtcClientleaveChannelAgoraRtcStatsPayload
AgoraRtcClientrejoinChannelSuccess{channelId:string;uid:number;elapsed:number;}
AgoraRtcClientconnectionInterruptedRecord<string,never>
AgoraRtcClientconnectionStateChanged{state:number;reason:number;}
AgoraRtcClientlocalVideoTextureReady{slotId:number;width:number;height:number;}
AgoraRtcClientremoteVideoTextureReady{uid:number;slotId:number;width:number;height:number;}
AgoraRtcClientlocalVideoTextureReleased{slotId:number;}
AgoraRtcClientremoteVideoTextureReleased{uid:number;slotId:number;}
AgoraRtcClientrenderBackendState{backend:string;phase:string;result:number;uid:number;fallbackBackend?:string;platform?:string;}
AgoraRtcClientuserJoined{uid:number;elapsed:number;}
AgoraRtcClientuserOffline{uid:number;reason?:number;}
AgoraRtcClientremoteVideoStateChanged{uid:number;state:number;reason:number;elapsed:number;}
AgoraRtcClientlocalVideoStateChanged{sourceType:number;state:number;error:number;}
AgoraRtcClientfirstLocalAudioFramePublished{elapsed:number;}
AgoraRtcClientaudioMixingFinishedRecord<string,never>
AgoraRtcClientaudioMixingStateChanged{state:number;reason:number;}
AgoraRtcClientremoteAudioStateChanged{uid:number;state:number;reason:number;elapsed:number;}
AgoraRtcClientvolumeIndication{speakers:Array<{uid:number;volume:number;vad:number;voicePitch:number;}>;totalVolume:number;}
AgoraRtcClientrtcStatsAgoraRtcStatsPayload
AgoraRtcClientcontentInspectResult{result:number;}
AgoraRtcClienterror{code?:number|string;message:string;}

错误码

常量值
BridgeUnavailablenull
NativeFailurenull
ProtocolErrornull
Timeoutnull

平台 REST 层用 REST 错误码;SDK 层把连接/鉴权失败映射成声网错误号,映射表见 各端 SDK 错误标识。

本页由文档构建流水线生成 · 2026-10-31 01:24:02 UTC · 文档中心 v1.1.0.

内容依据公开 API 定义.

ni-meet 是自建 RTC PaaS,媒体面基于 LiveKit(Apache-2.0),并与声网 API 兼容。