nimeet 文档中心
English

React Native 快速开始与功能指南

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

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

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

React Native 端是 RtcEngine + IRtcEngineEventHandler 形状,通过原生桥接(Android 走 Kotlin/Java,iOS 走 Objective-C)暴露给 JS。

前置条件

  • React Native 0.74+、Node.js ≥ 22、Xcode 16+ / Android SDK 35。
  • Android 需要 CAMERA、RECORD_AUDIO 运行时权限;iOS 需要 NSCameraUsageDescription / NSMicrophoneUsageDescription。
  • 已拿到 appId 与 Token 服务(见 控制台开通服务与获取凭证)。

安装

bash
# 包名以发布版本为准
npm install react-native-nimeet-rtc
cd ios && pod install

Expo 项目需要 prebuild(npx expo prebuild)后才能接入原生模块。

获取 Token

Token 由你的后端签发(POST /v1/tokens),RN 侧只保存 { appId, rtcToken, rtcUid };不要把 customerSecret 打进 JS bundle。

typescript
const { appId, rtcToken, rtcUid } = await fetch('/api/rtc-token?channel=weekly-sync&uid=10001').then(r => r.json());

加入频道

typescript
import {
  createAgoraRtcEngine,
  ChannelProfileType,
  ClientRoleType,
  IRtcEngineEventHandler,
} from 'react-native-nimeet-rtc';

const engine = createAgoraRtcEngine();

const handler: IRtcEngineEventHandler = {
  onJoinChannelSuccess: (connection, elapsed) => console.log('joined', connection.channelId),
  onUserJoined: (connection, remoteUid, elapsed) => console.log('remote joined', remoteUid),
  onUserOffline: (connection, remoteUid, reason) => console.log('remote left', remoteUid),
  onTokenPrivilegeWillExpire: () => refreshToken(),
  onError: (err) => console.warn('rtc error', err),
};

engine.initialize({ appId, logConfig: { level: 1 } });
engine.registerEventHandler(handler);
engine.setChannelProfile(ChannelProfileType.ChannelProfileLiveBroadcasting);
engine.enableVideo();
engine.startPreview();

engine.joinChannel(rtcToken, 'weekly-sync', rtcUid, {
  clientRoleType: ClientRoleType.ClientRoleBroadcaster,
});

发布与订阅

typescript
engine.muteLocalAudioStream(true);
engine.muteLocalVideoStream(true);
engine.enableLocalVideo(false);
engine.updateChannelMediaOptions({ clientRoleType: ClientRoleType.ClientRoleAudience });

屏幕共享依赖原生能力:Android 用 MediaProjection(前台服务),iOS 用 Broadcast Upload Extension; 方法名见同端 API 参考(startScreenCapture、getScreenCaptureSources 等)。

事件

IRtcEngineEventHandler 是普通对象,把需要的方法填进去即可。常用:onJoinChannelSuccess、onUserJoined、 onUserOffline、onFirstRemoteVideoDecoded、onTokenPrivilegeWillExpire、onError、onConnectionStateChanged。

错误处理

  • 同步方法返回数字错误码,0 成功,负值为声网错误号;
  • 异步错误走 onError;
  • 未实现能力返回 -4(ERR_NOT_SUPPORTED)。

排障

现象原因处理
TurboModule 报错新架构未适配版本确认 RN 版本与包支持矩阵
iOS 构建失败Pod 未安装cd ios && pod install
安卓黑屏缺运行时权限请求 CAMERA / RECORD_AUDIO
热重载后收不到事件handler 未重新注册在组件挂载时注册、卸载时 unregisterEventHandler
Expo Go 崩溃Expo Go 不含原生模块用 dev client / prebuild

下一步

平台信息

项值
平台React Native
语言TypeScript / Java / Objective-C
SDK 包react-native-nimeet-rtc
接口版本4.6.4
兼容参考声网 rn 端 API

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

可用性

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

加入频道链路

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

步骤接口方法重载数
订阅远端媒体IBaseSpatialAudioEnginemuteRemoteAudioStream1
创建实例 / 初始化ILocalSpatialAudioEngineinitialize1
续期 TokenIMusicContentCenterrenewToken1
开启视频与本地预览IRtcEngineenableVideo1
加入频道IRtcEnginejoinChannel1
离开频道IRtcEngineleaveChannel1
频道场景IRtcEnginesetChannelProfile1
切换角色IRtcEnginesetClientRole1
typescript
muteRemoteAudioStream(uid: number, mute: boolean): number
initialize(): number
renewToken(token: string): number
enableVideo(): number
joinChannel(token: string, channelId: string, uid: number, options: ChannelMediaOptions): number
leaveChannel(options?: LeaveChannelOptions): number
setChannelProfile(profile: ChannelProfileType): number
setClientRole(role: ClientRoleType, options?: ClientRoleOptions): number

事件与回调

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

回调签名用途
onConnectionStateChangedonConnectionStateChanged(connection: RtcConnection, state: ConnectionStateType, reason: ConnectionChangedReasonType): void入会结果 / 连接状态变化:据此更新 UI 并决定是否重连。
onUserJoinedonUserJoined(connection: RtcConnection, remoteUid: number, elapsed: number): void远端用户加入:分配画面容器。
onFirstRemoteVideoDecodedonFirstRemoteVideoDecoded(connection: RtcConnection, remoteUid: number, width: number, height: number, elapsed: number): void远端视频状态:首帧解码后即可渲染。
onUserOfflineonUserOffline(connection: RtcConnection, remoteUid: number, reason: UserOfflineReasonType): void远端用户离开:释放容器与订阅。
onRequestTokenonRequestToken(connection: RtcConnection): voidToken 即将过期:调用服务端续期后 `renewToken`。
onErroronError(err: ErrorCodeType, msg: string): void运行时错误:`err` 为声网错误号,按错误码表分流。
onNetworkQualityonNetworkQuality(connection: RtcConnection, remoteUid: number, txQuality: QualityType, rxQuality: QualityType): void网络质量:上报到水晶球或提示用户。

错误码

常量值
ErrAborted20
ErrAdmGeneralError1005
ErrAdmInitPlayout1008
ErrAdmInitRecording1011
ErrAdmStartPlayout1009
ErrAdmStartRecording1012
ErrAdmStopPlayout1010
ErrAdmStopRecording1013
ErrAlreadyInUse19
ErrBitrateLimit115
ErrBufferTooSmall6
ErrCertRaw1001
ErrClientIsBannedByServer123
ErrConnectionInterrupted111
ErrConnectionLost112
ErrDatastreamDecryptionFailed122
ErrDecryptionFailed120
ErrEncryptedStreamNotAllowedPublish130
ErrFailed1
ErrInitNetEngine21
ErrInvalidAppId101
ErrInvalidArgument2
ErrInvalidChannelName102
ErrInvalidState8
ErrInvalidTokennull
ErrInvalidUserAccount134
ErrInvalidUserId121
ErrJoinChannelRejected17
ErrLeaveChannelRejected18
ErrNoPermission9
ErrNoServerResources103
ErrNotInChannel113
ErrNotInitialized7
ErrNotReady3
ErrNotSupported4
ErrOk0
ErrPcmsendBufferoverflow201
ErrPcmsendFormat200
ErrRefused5
ErrResourceLimited22
ErrSetClientRoleNotAuthorized119
ErrSizeTooLarge114
ErrStreamMessageTimeout117
ErrTimedout10
ErrTokenExpired109
ErrTooManyDataStreams116
ErrVdmCameraNotAuthorized1501
IRtcEnginenull

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

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

内容依据公开 API 定义.

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