nimeet 文档中心
English

Cocos2d-x(C++ 绑定) 快速开始与功能指南

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

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

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

Cocos2d-x 端以 C++ 绑定库的形式提供:公开头文件定义与声网 C++ API 对齐的成员名与签名,实现层通过 IRtcEngineCore 接缝转发到 ni-meet C++ 核心,媒体能力由宿主工程注入。

cpp
#include <nimeet/cocos2dx/rtc_engine.h>   // 公开 C++ 接口
#include <nimeet/cocos2dx/core_seam.h>    // 核心适配接缝(宿主实现)

前置条件

  • Cocos2d-x 3.17+(C++17);Android NDK / Xcode 由宿主工程提供。
  • 宿主应用里已集成 ni-meet C++ 核心,并实现 nimeet::cocos2dx::IRtcEngineCore 接缝(1:1 转发,不含媒体逻辑)。
  • App ID 与 Token 服务(见 控制台开通服务与获取凭证)。

安装

把 SDK 的头文件目录加入头文件搜索路径,并把源文件加入构建列表即可。当前以源码方式提供,不发布独立包。

cmake
target_include_directories(your_game PRIVATE path/to/nimeet/cocos2dx/include)
target_sources(your_game PRIVATE path/to/nimeet/cocos2dx/src/rtc_engine_adapter.cpp)

获取 Token

与其他端一致:Token 由你的后端 POST /v1/tokens 签发。绑定层的 joinChannel(token, channelId, uid) 直接接收 Token 字符串, 语义见 AccessToken2 语义。

加入频道

cpp
#include "nimeet/cocos2dx/rtc_engine.h"
#include "nimeet/cocos2dx/core_seam.h"

class AppHandler : public nimeet::cocos2dx::IRtcEngineEventHandler
{
public:
    void onJoinChannelSuccess(const char* channel, nimeet::cocos2dx::uid_t uid, int elapsed) override { /* update UI */ }
    void onUserJoined(nimeet::cocos2dx::uid_t uid, int elapsed) override { /* attach remote view */ }
    void onError(int err, const char* msg) override { /* err 是文档错误码 */ }
};

nimeet::cocos2dx::RtcEngineAdapter engine(core);   // core 实现 nimeet::cocos2dx::IRtcEngineCore
AppHandler handler;
nimeet::cocos2dx::RtcEngineContext context;
context.appId = appId;
context.eventHandler = &handler;
engine.initialize(context);
engine.joinChannel(token, "channel-a", "info", 1234);

initialize 之后才能 joinChannel / leaveChannel:否则返回文档错误码 -7(ERR_NOT_INITIALIZED)。 initialize 缺 App ID 返回 -2(ERR_INVALID_ARGUMENT)。

发布与订阅

绑定层只暴露文档化的开关语义,不管理 track:

  • 音频:enableAudio / disableAudio / enableLocalAudio / muteLocalAudioStream / muteRemoteAudioStream / muteAllRemoteAudioStreams;
  • 视频:enableVideo / disableVideo / enableLocalVideo / muteLocalVideoStream / muteRemoteVideoStream / muteAllRemoteVideoStreams;
  • 预览与渲染:startPreview() / startPreview(VIDEO_SOURCE_TYPE) / stopPreview(…) / switchCamera /

setupLocalVideo(VideoCanvas) / setupRemoteVideo(VideoCanvas)(setupRemoteVideo 的 uid == 0 返回 -2);

  • 编码:setVideoEncoderConfiguration(宽高非正数返回 -2)。

事件

回调由 IRtcEngineEventHandler 承载,14 个成员与固定的 C++ 对齐基准逐签名一致:

onJoinChannelSuccess、onRejoinChannelSuccess、onLeaveChannel、onUserJoined、onUserOffline、 onConnectionStateChanged、onError、onAudioVolumeIndication、onLocalAudioStateChanged、onRemoteAudioStateChanged、 onLocalVideoStateChanged、onRemoteVideoStateChanged、onRtcStats、onRequestToken。

initialize 把 eventHandler 交给核心(IRtcEngineCore::SetEventHandler),核心推事件、绑定层不解释事件内容。

错误处理

成员返回文档化的 Agora C++ 错误码(0 成功;负数失败),绑定层从不把失败改写成成功:

code含义触发点
0成功——
-1一般错误核心返回
-2参数无效缺 App ID、空频道名、空 Token、uid == 0 的远端视图、非正编码尺寸、音量越界
-3尚未就绪——
-4不支持核心接缝返回,绑定层原样透传(本端没有成员级 暂不支持的接口,不支持列表 为空)
-7未初始化initialize 之前调用需要引擎的成员
-8状态无效核心返回

错误码枚举与错误号见 错误码全表。

排障

现象原因处理
链接报 undefined reference只加了头文件、没编译 sdk/cocos2dx/src/rtc_engine_adapter.cpp把 src/*.cpp 加入构建
所有调用返回 -7没有成功 initialize先 initialize(context) 并检查核心接缝返回值
画面不出现只做了 setVideoEncoderConfiguration,没做 setupLocalVideo / startPreview按文档顺序:预览 → 绑定画布

下一步

平台信息

项值
平台Cocos2d-x(C++ 绑定)
语言C++
SDK 包nimeet_rtc_cocos2dx
接口版本4.7.0
兼容参考声网 cocos2dx 端 API

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

可用性

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

加入频道链路

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

步骤接口方法重载数
开启视频与本地预览NimeetCocos2dxRtcEngineenableVideo1
创建实例 / 初始化NimeetCocos2dxRtcEngineinitialize1
加入频道NimeetCocos2dxRtcEnginejoinChannel2
离开频道NimeetCocos2dxRtcEngineleaveChannel2
订阅远端媒体NimeetCocos2dxRtcEnginemuteRemoteAudioStream1
续期 TokenNimeetCocos2dxRtcEnginerenewToken1
频道场景NimeetCocos2dxRtcEnginesetChannelProfile1
切换角色NimeetCocos2dxRtcEnginesetClientRole2
绑定本地画面NimeetCocos2dxRtcEnginesetupLocalVideo1
typescript
enableVideo(): int
initialize(context: const RtcEngineContext&): int
joinChannel(token: const char*, channelId: const char*, info: const char*, uid: uid_t): int
leaveChannel(): int
muteRemoteAudioStream(uid: uid_t, mute: bool): int
renewToken(token: const char*): int
setChannelProfile(profile: CHANNEL_PROFILE_TYPE): int
setClientRole(role: CLIENT_ROLE_TYPE): int
setupLocalVideo(canvas: const VideoCanvas&): int

事件与回调

回调注册在 IRtcEngineEventHandler 上;不同端的命名可能不同,完整清单见同端 API 参考页。

回调签名用途
onConnectionStateChangedonConnectionStateChanged(state: CONNECTION_STATE_TYPE, reason: CONNECTION_CHANGED_REASON_TYPE): void入会结果 / 连接状态变化:据此更新 UI 并决定是否重连。
onUserJoinedonUserJoined(uid: uid_t, elapsed: int): void远端用户加入:分配画面容器。
onRemoteVideoStateChangedonRemoteVideoStateChanged(uid: uid_t, state: REMOTE_VIDEO_STATE, reason: REMOTE_VIDEO_STATE_REASON, elapsed: int): void远端视频状态:首帧解码后即可渲染。
onUserOfflineonUserOffline(uid: uid_t, reason: USER_OFFLINE_REASON_TYPE): void远端用户离开:释放容器与订阅。
onRequestTokenonRequestToken(): voidToken 即将过期:调用服务端续期后 `renewToken`。
onErroronError(err: int, msg: const char*): void运行时错误:`err` 为声网错误号,按错误码表分流。

错误码

该端 SDK 未提供错误码常量。平台侧错误见 错误码全表,跨端 SDK 错误标识见 各端 SDK 错误标识。

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

内容依据公开 API 定义.

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