Skip to content

React Native API 说明

React Native SDK 提供客户端 API,JavaScript 和 TypeScript 项目都可以使用。如果你还没有完成包接入、原生工程配置或连接流程准备,先看 React Native SDK 接入

适用范围

面向 Android 和 iOS 客户端应用。你的项目需要使用 React Native >=0.80.0,并启用 New Architecture

最低运行系统版本:

  • Android 6.0(API Level 23)及以上
  • iOS 15.1 及以上

导入对象和类型

在 React Native 业务代码中,从 tirtc-av-react-native 根入口导入运行时对象、组件和枚举。

ts
import {
  TiRtc,
  TiRtcConn,
  TiRtcAudioInput,
  TiRtcAudioOutput,
  TiRtcVideoOutput,
  TiRtcVideoOutputView,
  TiRtcLogging,
  TiRtcConnState,
  TiRtcAudioCodec,
  TiRtcAudioAecMode,
  TiRtcAudioAgcLevel,
  TiRtcAudioAnsLevel,
  TiRtcOutputBufferStrategy,
  TiRtcVideoDecoderPreference,
} from 'tirtc-av-react-native';

使用 TypeScript 时,只用于类型标注的类型可以用 import type 导入。JavaScript 项目不需要导入这些类型。

ts
import type {
  TiRtcInitOptions,
  TiRtcAudioInputOptions,
  TiRtcAudioOutputOptions,
  TiRtcVideoOutputOptions,
  TiRtcLoggingUploadResult,
} from 'tirtc-av-react-native';

生命周期与调用顺序

典型客户端流程是:连接一个设备端,播放设备端音视频,并按需收发命令或发起语音对讲。主干从 TiRtc.initialize(...) 开始,以 disconnect()dispose() 收尾。

  1. 初始化:传入 AppId,启动 SDK 运行时。

    ts
    await TiRtc.initialize({appId});
  2. 创建连接:创建 TiRtcConn,并在连接前设置状态、命令和流消息回调。

    ts
    const conn = new TiRtcConn();
    conn.onStateChanged = handleConnStateChanged;
    conn.onCommand = handleCommand;
    conn.onStreamMessage = handleStreamMessage;
  3. 准备播放:在发起连接前创建音频输出和视频输出,并指定要播放的 streamId

    ts
    const audioOutput = new TiRtcAudioOutput();
    audioOutput.attach(conn, audioStreamId);
    
    const videoOutput = new TiRtcVideoOutput();
    videoOutput.attach(conn, videoStreamId);
  4. 渲染视频:在界面中渲染 TiRtcVideoOutputView,让视频输出有对应的显示位置。

    tsx
    <TiRtcVideoOutputView output={videoOutput} />
  5. 发起连接:传入目标设备的 device_id 和业务服务端签发的 token

    ts
    conn.connect(remoteId, token);
  6. 请求媒体:连接进入 connected 后,按需请求设备端发送音频流和视频流。

    ts
    conn.subscribeAudio(audioStreamId); // 设备端需要显式请求音频时调用
    conn.subscribeVideo(videoStreamId); // 设备端需要显式请求视频时调用
  7. 命令交互:连接进入 connected 后,按需通过命令通道和设备端交换业务数据。

    ts
    conn.sendCommand(commandId, data); // 需要命令交互时调用
    // 收到设备端命令时,在 handleCommand(commandId, data) 中处理。
  8. 语音对讲(按需):应用获得系统麦克风权限后,创建音频输入,绑定到同一条连接,并启动采集发送。

    ts
    const talkbackInput = new TiRtcAudioInput();
    talkbackInput.setOptions(talkbackOptions);
    talkbackInput.attach(conn, talkbackStreamId);
    talkbackInput.start();
  9. 收尾释放:业务结束时先释放按需创建的输入对象,再按订阅、输出、连接的顺序收尾。

    ts
    talkbackInput.stop(); // 创建了 talkbackInput 时调用
    talkbackInput.detach(conn);
    talkbackInput.dispose();
    
    conn.unsubscribeAudio(audioStreamId); // 之前调用过 subscribeAudio 时调用
    conn.unsubscribeVideo(videoStreamId); // 之前调用过 subscribeVideo 时调用
    
    audioOutput.detach();
    videoOutput.detach();
    audioOutput.dispose();
    videoOutput.dispose();
    
    conn.disconnect();
    conn.dispose();

TiRtcInitOptions

TiRtcInitOptionsTiRtc.initialize(...) 的参数对象。

初始化时必须传 appId,取值为你的 AppId

ts
type TiRtcInitOptions = Readonly<{
  appId?: string; // 必填:你的 AppId
  endpoint?: string; // 切换自部署云端实例或测试、联调环境时传,例如 "https://ep-tirtc.my-domain.com";其他情况不传
  consoleLogEnabled?: boolean; // true 时同时把 SDK 日志打印到控制台
}>;

TiRtc

TiRtc 提供初始化、错误码名称转换入口。

ts
// 初始化 SDK。resolve 0 表示成功,非 0 为错误码。
// 重复调用成功时返回 0,不会替换已生效的配置。
static initialize(config: TiRtcInitOptions): Promise<number>

// 把错误码转成错误名称。
static errorToString(code: number): string

// 返回形如 "error TIRTC_ERROR_INVALID_ARGUMENT (6000)" 的字符串。
static formatError(code: number): string

示例:

ts
const code = await TiRtc.initialize({
  appId: 'your-app-id',
});
if (code !== 0) {
  console.warn(`initialize failed: ${TiRtc.formatError(code)}`);
}

TiRtcConn

TiRtcConn 表示客户端到远端设备的一条连接。创建对象不会立即发起连接;通常先设置回调,再调用 connect(...)。连接建立后,可以通过它发送命令、发送流消息、发起媒体订阅和请求视频关键帧。

音频播放和视频显示由 TiRtcAudioOutput / TiRtcVideoOutput 负责,TiRtcConn 本身不播放也不显示媒体。

状态

  • TiRtcConnState.idle:连接对象已创建,但还没有开始连接。
  • TiRtcConnState.connecting:连接请求已提交,正在等待结果。
  • TiRtcConnState.connected:连接已经建立,可收发命令、流消息,发起媒体订阅和关键帧请求。
  • TiRtcConnState.disconnected:连接失败、对端断开或调用 disconnect() 后进入该状态。

属性和回调

ts
// 当前连接状态。
state: TiRtcConnState

// 连接状态变化时触发。errorCode 为 0 表示本次状态变化没有错误;非 0 为错误码。
onStateChanged: TiRtcOnConnStateChanged | null

// 收到设备端命令时触发。
onCommand: TiRtcOnConnCommand | null

// 收到设备端的流消息时触发。
onStreamMessage: TiRtcOnConnStreamMessage | null

相关类型:

ts
type TiRtcOnConnStateChanged = (
  state: TiRtcConnState,
  errorCode: number,
) => void;

type TiRtcOnConnCommand = (
  commandId: number,
  data: Uint8Array,
) => void;

type TiRtcOnConnStreamMessage = (
  streamId: number,
  timestampMs: number,
  data: Uint8Array,
) => void;

方法

ts
// 创建连接对象;构造函数本身不会发起连接。通常先设置回调,再调用 connect。
new TiRtcConn()

// 发起连接;初始化完成并拿到连接凭证后调用。
// remoteId 是连接目标;连接设备端时传目标设备的 device_id,例如 "PRODFENGXXXX"。
// token 是业务服务端为本次连接签发的 token,二者不能为空。
// 返回 0 只表示请求已提交,最终连接结果看 onStateChanged;非 0 为错误码。
connect(remoteId: string, token: string): number

// 断开当前连接;业务结束、切换设备或重新连接前调用。对象仍可重新 connect。
disconnect(): number

// 释放连接对象;确认不再使用这条连接后调用。调用后不要再使用这个实例。
dispose(): number

// 在命令通道上发送自定义命令;连接进入 connected 后调用。
sendCommand(commandId: number, data: Uint8Array): number

// 发送流消息;连接进入 connected 后调用。
// streamId 按 stream_id 约定使用 0..15,两端需要提前约定消息语义。
sendStreamMessage(streamId: number, timestampMs: number, data: Uint8Array): number

// 请求远端开始发送指定 streamId 的音频流;连接进入 connected 后按需调用。
// streamId 按 stream_id 约定使用 0..15。
// 这个方法只请求远端发送音频,不会自动播放。
// 播放远端音频时,先调用 TiRtcAudioOutput.attach(...) 指定要播放的 connection 和 streamId,再发起连接。
// 如果设备端需要客户端显式请求发流,连接成功后再调用 subscribeAudio(...)。
subscribeAudio(streamId: number): number

// 请求远端停止发送指定 streamId 的音频流;streamId 按 stream_id 约定使用 0..15。
// 不会停止已经创建的 TiRtcAudioOutput。停止播放时再调用 TiRtcAudioOutput.detach()。
unsubscribeAudio(streamId: number): number

// 请求远端开始发送指定 streamId 的视频流;连接进入 connected 后按需调用。
// streamId 按 stream_id 约定使用 0..15。
// 这个方法只请求远端发送视频,不会自动显示。
// 显示远端视频时,先调用 TiRtcVideoOutput.attach(...) 指定要显示的 connection 和 streamId,再发起连接。
// 如果设备端需要客户端显式请求发流,连接成功后再调用 subscribeVideo(...)。
subscribeVideo(streamId: number): number

// 请求远端停止发送指定 streamId 的视频流;streamId 按 stream_id 约定使用 0..15。
// 不会停止已经创建的 TiRtcVideoOutput。停止显示时再调用 TiRtcVideoOutput.detach()。
unsubscribeVideo(streamId: number): number

// 向远端请求指定视频流的关键帧;连接已建立且远端正在发送该视频流时调用。
// streamId 按 stream_id 约定使用 0..15。
requestKeyFrame(streamId: number): number

示例:

ts
const conn = new TiRtcConn();

conn.onStateChanged = (state, errorCode) => {
  if (state === TiRtcConnState.connected) {
    console.info('connected');
    return;
  }
  if (state === TiRtcConnState.disconnected) {
    if (errorCode === 0) {
      console.info('disconnected');
      return;
    }
    console.warn(`disconnected: ${TiRtc.formatError(errorCode)}`);
  }
};

conn.onCommand = (commandId, data) => {
  console.info(`command=${commandId} bytes=${data.byteLength}`);
};

const code = conn.connect(remoteId, token);
if (code !== 0) {
  console.warn(`connect failed: ${TiRtc.formatError(code)}`);
}

// 结束时:
conn.disconnect();
conn.dispose();

TiRtcAudioOutputOptions

TiRtcAudioOutputOptions 配置 TiRtcAudioOutput 的音频输出参数。只需要填写要覆盖默认值的字段。

ts
type TiRtcAudioOutputOptions = Readonly<{
  agcLevel?: TiRtcAudioAgcLevel; // 自动增益等级
  ansLevel?: TiRtcAudioAnsLevel; // 自动噪声抑制等级
  bufferStrategy?: TiRtcOutputBufferStrategy; // 输出缓冲策略
  // 最大输出缓冲水位,单位为毫秒;仅 automatic 有效。
  // 不传表示由 SDK 自动决定。
  maxBufferWatermarkMs?: number;
}>;

相关取值:

ts
TiRtcAudioAgcLevel.disabled
TiRtcAudioAgcLevel.low
TiRtcAudioAgcLevel.medium
TiRtcAudioAgcLevel.high

TiRtcAudioAnsLevel.disabled
TiRtcAudioAnsLevel.low
TiRtcAudioAnsLevel.medium
TiRtcAudioAnsLevel.high

TiRtcOutputBufferStrategy.automatic
TiRtcOutputBufferStrategy.noBuffer

TiRtcAudioOutput

TiRtcAudioOutput 用来播放某条远端音频流。播放远端音频时,先创建 TiRtcConnTiRtcAudioOutput,调用 attach(...) 指定要播放的 connectionstreamId,再发起连接。连接成功后,如果设备端需要客户端显式请求发流,再按需调用 TiRtcConn.subscribeAudio(...)

attach(...) 成功只表示播放对象已经知道要播放哪路音频。如果远端还没有发送这路音频,用户仍然听不到声音。

attach(...) 只选择这路音频由哪个 TiRtcAudioOutput 播放;subscribeAudio(...) 只负责请求远端发送音频。

状态

  • TiRtcAudioOutputState.idle:还没有选择要播放的远端音频流,或已经 detach()
  • TiRtcAudioOutputState.buffering:已经选择要播放的远端音频流,正在等待可播放数据。
  • TiRtcAudioOutputState.playing:正在播放远端音频。
  • TiRtcAudioOutputState.failed:播放路径发生错误。

属性和回调

ts
// 当前音频播放状态。
state: TiRtcAudioOutputState

// 播放状态变化时触发。
onStateChanged: TiRtcOnAudioOutputStateChanged | null

// 音频输出对象发生错误时触发。
onError: TiRtcOnAudioOutputError | null

相关类型:

ts
type TiRtcOnAudioOutputStateChanged = (
  state: TiRtcAudioOutputState,
) => void;

type TiRtcOnAudioOutputError = (code: number) => void;

方法

ts
// 创建音频输出对象。
new TiRtcAudioOutput()

// 配置音频输出参数;创建对象后、attach 前调用。
// 返回 0 表示成功,非 0 为错误码;已绑定后调用会返回错误码。
configure(options: TiRtcAudioOutputOptions): number

// 指定这个输出对象要播放的远端音频流。通常在 connect(...) 前调用。
// 如果需要显式请求远端发流,应在 subscribeAudio(...) 前完成。
// 远端发送这路音频后,用户才会听到声音。
attach(connection: TiRtcConn, streamId: number): number

// 停止使用这个输出对象播放当前音频流;切换流或释放对象前调用。成功后状态回到 idle。
detach(): number

// 获取音频调试快照,包含当前解析到的音频编码、采样率和声道数。
getDebugSnapshot(): TiRtcAudioOutputDebugSnapshotResult

// 释放音频输出对象;通常在 detach 后调用。调用后不要再使用这个实例。
dispose(): number

示例:

ts
const audioOutput = new TiRtcAudioOutput();

audioOutput.onError = (code) => {
  console.warn(`audio output error: ${TiRtc.formatError(code)}`);
};

const code = audioOutput.attach(conn, 10);
if (code !== 0) {
  console.warn(`audio attach failed: ${TiRtc.formatError(code)}`);
}

// 结束时:
audioOutput.detach();
audioOutput.dispose();

TiRtcVideoOutputOptions

TiRtcVideoOutputOptions 配置 TiRtcVideoOutput 的解码和缓冲参数。只需要填写要覆盖默认值的字段。

ts
type TiRtcVideoOutputOptions = Readonly<{
  // 解码偏好:auto 自动,software 软件解码,hardware 硬件解码。
  // 这只是请求偏好,实际选择取决于设备、系统和视频编码格式。
  decoderPreference?: TiRtcVideoDecoderPreference;
  bufferStrategy?: TiRtcOutputBufferStrategy; // 输出缓冲策略
  // 最大输出缓冲水位,单位为毫秒;仅 automatic 有效。
  // 不传表示由 SDK 自动决定。
  maxBufferWatermarkMs?: number;
}>;

相关取值:

ts
TiRtcVideoDecoderPreference.auto
TiRtcVideoDecoderPreference.software
TiRtcVideoDecoderPreference.hardware

TiRtcOutputBufferStrategy.automatic
TiRtcOutputBufferStrategy.noBuffer

TiRtcVideoOutput

TiRtcVideoOutput 用来显示某条远端视频流。显示远端视频时,先创建 TiRtcConnTiRtcVideoOutput,调用 attach(...) 指定要显示的 connectionstreamId,再发起连接。连接成功后,如果设备端需要客户端显式请求发流,再按需调用 TiRtcConn.subscribeVideo(...)

attach(...) 成功只表示输出对象已经准备好。如果远端还没有发送这路视频,页面不会出画面。

attach(...) 只选择这路视频由哪个 TiRtcVideoOutput 显示;subscribeVideo(...) 只负责请求远端发送视频。

状态

  • TiRtcVideoOutputState.idle:还没有选择要显示的远端视频流,或已经 detach()
  • TiRtcVideoOutputState.buffering:已经选择要显示的远端视频流,正在等待可渲染数据或渲染视图准备。
  • TiRtcVideoOutputState.rendering:正在渲染远端视频。
  • TiRtcVideoOutputState.failed:视频输出路径发生错误。

属性和回调

ts
// 最近一次远端画面渲染尺寸。还没有画面或已经 detach 时可能为 null。
renderSize: TiRtcSize | null

// 播放状态变化时触发。
onStateChanged: TiRtcOnVideoOutputStateChanged | null

// 远端画面尺寸变化时触发。
onRenderSizeChanged: TiRtcOnVideoOutputRenderSizeChanged | null

// 视频输出对象发生错误时触发。
onError: TiRtcOnVideoOutputError | null

相关类型:

ts
type TiRtcSize = Readonly<{
  width: number;
  height: number;
}>;

type TiRtcOnVideoOutputStateChanged = (
  state: TiRtcVideoOutputState,
) => void;

type TiRtcOnVideoOutputRenderSizeChanged = (
  size: TiRtcSize,
) => void;

type TiRtcOnVideoOutputError = (code: number) => void;

方法

ts
// 创建视频输出对象。
new TiRtcVideoOutput()

// 设置视频输出参数;创建对象后、attach 前调用。
// 返回 0 表示成功,非 0 为错误码;需要修改参数时先 detach,再重新 setOptions 和 attach。
setOptions(options: TiRtcVideoOutputOptions): number

// 指定这个输出对象要显示的远端视频流。通常在 connect(...) 前调用。
// 如果需要显式请求远端发流,应在 subscribeVideo(...) 前完成。
// 远端发送这路视频后,页面才会出画面。
attach(connection: TiRtcConn, streamId: number): number

// 停止使用这个输出对象显示当前视频流;切换流或释放对象前调用。成功后状态回到 idle,并清空 renderSize。
detach(): number

// 返回这个输出对象对应的 React 元素;需要显示远端视频时在渲染函数中使用。
// 同一个输出对象同时只支持挂载一个 view。
view(props?: Omit<TiRtcVideoOutputViewProps, 'output'>): React.ReactElement

// 获取视频调试快照,包含当前解析到的视频编码、尺寸、码流格式和解码后端。
getDebugSnapshot(): TiRtcVideoOutputDebugSnapshotResult

// 释放视频输出对象和相关系统资源;通常在 detach 后调用。调用后不要再使用这个实例。
dispose(): number

示例:

tsx
const videoOutput = new TiRtcVideoOutput();

videoOutput.onRenderSizeChanged = (size) => {
  console.info(`remote video size=${size.width}x${size.height}`);
};

const code = videoOutput.attach(conn, 11);
if (code !== 0) {
  console.warn(`video attach failed: ${TiRtc.formatError(code)}`);
}

export function RemoteVideo() {
  return (
    <TiRtcVideoOutputView
      output={videoOutput}
      resizeMode="contain"
      style={{width: '100%', height: '100%'}}
    />
  );
}

TiRtcVideoOutputView

TiRtcVideoOutputView 是远端视频输出的 React Native Fabric 组件。传入 TiRtcVideoOutput 对象,不要传 native id。

ts
type TiRtcVideoOutputViewProps = ViewProps &
  Readonly<{
    output: TiRtcVideoOutput;
    resizeMode?: 'contain' | 'cover' | 'stretch';
  }>;

如果 output 已经释放,或传入的不是 TiRtcVideoOutput,组件会退化为普通 View

TiRtcAudioInputOptions

TiRtcAudioInputOptions 配置 TiRtcAudioInput 的麦克风采集和本地音频发送参数。配置会在下一次采集启动时生效;运行中调用 setOptions(...) 会返回错误码。

ts
type TiRtcAudioInputOptions = Readonly<{
  codec?: TiRtcAudioCodec; // 本地音频传输编码
  sampleRate?: TiRtcAudioSampleRate; // 麦克风采样率
  channels?: TiRtcAudioChannelCount; // 声道数;公开能力只支持单声道
  aecMode?: TiRtcAudioAecMode; // 回声消除模式
  agcLevel?: TiRtcAudioAgcLevel; // 自动增益等级
  ansLevel?: TiRtcAudioAnsLevel; // 自动噪声抑制等级
}>;

相关取值:

ts
TiRtcAudioCodec.g711a
TiRtcAudioCodec.aac
TiRtcAudioCodec.pcm
TiRtcAudioCodec.opus
TiRtcAudioCodec.amr

TiRtcAudioSampleRate.rate8k
TiRtcAudioSampleRate.rate16k

TiRtcAudioChannelCount.mono

TiRtcAudioAecMode.disabled
TiRtcAudioAecMode.enabled

TiRtcAudioInput

TiRtcAudioInput 采集本地麦克风声音,并通过已建立的连接发送给远端设备。常见用途是语音对讲或语音回复。

应用需要自己申请麦克风权限;SDK 不会替应用弹出系统权限申请框。

状态

  • TiRtcInputState.idle:输入对象已创建,但还没有开始采集。
  • TiRtcInputState.running:正在采集并传输本地音频。
  • TiRtcInputState.stopped:已停止采集;当前绑定仍可保留给后续 start() 复用。
  • TiRtcInputState.failed:采集或传输路径发生错误。

属性和回调

ts
// 当前本地音频输入状态。
state: TiRtcInputState

// 输入状态变化时触发。
onStateChanged: TiRtcOnInputStateChanged | null

// 本地音频输入发生错误时触发。message 可能为空。
onError: TiRtcOnInputError | null

相关类型:

ts
type TiRtcOnInputStateChanged = (
  state: TiRtcInputState,
) => void;

type TiRtcOnInputError = (
  code: number,
  message: string | null,
) => void;

方法

ts
// 创建本地音频输入对象。
new TiRtcAudioInput()

// 设置下次采集使用的参数;创建对象后、start 前调用。
// resolve 0 表示成功,非 0 为错误码;正在采集时调用会返回错误码。
setOptions(options: TiRtcAudioInputOptions): Promise<number>

// 把本地麦克风音频通过指定连接和 streamId 发送给远端设备。
// 在 start 前调用;实际发送发生在连接已建立并 start 成功后,streamId 使用 0..15。
// 重复相同绑定返回 0;更换连接或 streamId 前先 detach。
attach(connection: TiRtcConn, streamId: number): Promise<number>

// 开始麦克风采集和传输;resolve 0 表示成功,非 0 为错误码。
// 调用 start 前,应用必须确保已经获得系统麦克风权限;SDK 不负责申请该权限。
// 还没有 attach 时会返回错误码。
start(): Promise<number>

// 停止采集和传输,但保留当前绑定;已经停止时调用也返回 0。
stop(): Promise<number>

// 移除当前连接上的本地音频绑定;停止发送、切换连接或切换 streamId 前调用。
// 运行中先 stop 再 detach。
detach(connection: TiRtcConn): Promise<number>

// 释放本地音频输入对象并清理绑定;通常在 stop 和 detach 后调用。调用后不要再使用这个实例。
dispose(): Promise<number>

示例:

ts
const input = new TiRtcAudioInput();

input.onError = (code, message) => {
  console.warn(`audio input error: ${TiRtc.formatError(code)} ${message ?? ''}`);
};

const attachCode = await input.attach(conn, 14);
if (attachCode === 0) {
  await input.start();
}

// 结束时:
await input.stop();
await input.detach(conn);
await input.dispose();

媒体参数快照

音频输出和视频输出可以读取最近解析到的媒体参数:

ts
audioOutput.getDebugSnapshot();
videoOutput.getDebugSnapshot();

code === 0snapshot !== null 表示读取成功。音频快照包含音频编码、采样率和声道数;视频快照包含视频编码、码流格式、宽高、解码偏好和实际解码后端。

TiRtcLogging

TiRtcLogging 用于写入应用侧 TiRTC 日志和上传当前 SDK 日志。排查问题时,把上传成功返回的 logId 提供给支持人员。

ts
// 写入应用侧日志。
static d(tag: string, message: string): void
static i(tag: string, message: string): void
static w(tag: string, message: string): void
static e(tag: string, message: string): void

// 上传当前 SDK 日志;code == 0 且 logId != null 表示上传成功。
static upload(): Promise<TiRtcLoggingUploadResult>

相关类型:

ts
type TiRtcLoggingUploadResult = Readonly<{
  code: number;
  logId: string | null;
}>;

示例:

ts
const result = await TiRtcLogging.upload();
if (result.code === 0 && result.logId !== null) {
  console.info(`TiRTC logId=${result.logId}`);
}

资源释放与权限

  • SDK 初始化成功后,再创建 TiRtcConn、输出对象或输入对象。
  • 对象构造不会发起连接、订阅或采集;创建后即可设置回调、配置参数或调用 attach(...)
  • dispose() 成功后会释放底层资源。再次调用 dispose() 是安全的;释放成功后再调用其他实例方法会返回对象已释放错误。
  • 输出对象释放前先 detach();输入对象释放前先 stop()detach(...)
  • 视图组件只接收 owner 对象,例如 TiRtcVideoOutput;不要保存或传递 native id。
  • Android 和 iOS 的麦克风权限由宿主应用负责申请,SDK 不会替应用弹出系统权限申请框。

错误码

React Native SDK 的公开方法用数字错误码表达失败,0 表示成功。常见错误码来源有两类:

范围来源说明
1008React Native host-side对象已经成功释放;继续调用该对象的非 dispose() 方法会返回这个错误。
6000+TiRTC runtime(C runtime / facade)底层 runtime、传输、音视频输入输出、日志上传等错误。

常见 runtime 错误码:

错误码名称常见含义
6000TIRTC_ERROR_INVALID_ARGUMENT参数类型、取值范围或对象绑定关系不合法。
6001TIRTC_ERROR_NOT_INITIALIZEDSDK 尚未初始化。
6007TIRTC_ERROR_ALREADY_DESTROYED底层对象已经销毁。
6009TIRTC_ERROR_TRANSPORT_TIMEOUT传输请求超时。
6010TIRTC_ERROR_TRANSPORT_BUSY传输侧忙,常见于发送缓冲区满。
6011TIRTC_ERROR_TRANSPORT_CONNECTION_TIMEOUT_CLOSED连接因心跳或等待超时关闭。
6012TIRTC_ERROR_TRANSPORT_REMOTE_CLOSED远端主动关闭连接。
6014TIRTC_ERROR_TRANSPORT_TOKEN_EXPIREDtoken 已过期。
6024TIRTC_ERROR_PERMISSION_DENIED系统权限或平台授权不足。
6026TIRTC_ERROR_IN_USE对象正在使用中,当前操作不能执行。
6028TIRTC_ERROR_NOT_CONNECTED连接尚未建立。
6029TIRTC_ERROR_NOT_BOUND输入或输出对象尚未绑定。
6032TIRTC_ERROR_APP_ID_REQUIRED初始化缺少 AppId
6034TIRTC_ERROR_VIDEO_ENCODER_CODEC_UNSUPPORTED当前视频编码格式不支持。
6036TIRTC_ERROR_VIDEO_DECODER_CODEC_UNSUPPORTED当前视频解码格式不支持。
6049TIRTC_ERROR_LOG_UPLOAD_FAILED日志上传失败。
6051TIRTC_ERROR_AUDIO_INPUT_OPEN_FAILED打开麦克风输入失败。
6053TIRTC_ERROR_AUDIO_OUTPUT_OPEN_FAILED打开音频输出失败。
6059TIRTC_ERROR_VIDEO_INPUT_OPEN_FAILED打开摄像头输入失败。
6061TIRTC_ERROR_VIDEO_OUTPUT_OPEN_FAILED打开视频输出失败。
6068TIRTC_ERROR_AUDIO_ENCODER_RUNTIME_FAILED音频编码运行失败。
6069TIRTC_ERROR_AUDIO_DECODER_RUNTIME_FAILED音频解码运行失败。
6074TIRTC_ERROR_VIDEO_PREVIEW_IN_USE本地视频预览已被占用。
6075TIRTC_ERROR_FACADE_PEER_ID_UNAVAILABLE当前连接缺少可用的对端标识。
6091TIRTC_ERROR_FACADE_HANDLE_UNAVAILABLE底层句柄不可用。

使用 TiRtc.errorToString(code)TiRtc.formatError(code) 可以把 runtime 错误码转换成可读名称。React Native host-side 错误 1008 表示对象已释放;重新创建对象,或修正释放后的调用顺序。

相关文档

TiRTC 开发文档