Skip to content

Flutter API 参考

本页描述 Flutter plugin tirtc_av_kit 当前公开的 Dart API,适用于用 Flutter 开发 Android、iOS、macOS 客户端的接入者。

如果你还没有完成包接入、原生工程配置或连接主线准备,先看 集成到客户端。页面里提到的 AppIdremote_idtokenstream_id 等术语,以 名词解释 为准。

对象总览

对象作用最终清理
TiRtcInitOptions组织 runtime 初始化参数调用方自行持有
TiRtc初始化和关闭全局 runtime,格式化错误码TiRtc.shutdown()
TiRtcConn建连、断连、收发命令、收发流内消息、请求关键帧、手动订阅媒体、读取连接指标dispose()
TiRtcAudioOutputOptions组织音频播放参数调用方自行持有
TiRtcAudioOutput播放一条远端音频流并读取播放指标dispose()
TiRtcVideoOutput播放一条远端视频流、生成 Flutter 视图并读取播放指标dispose()
TiRtcLogging写 SDK 日志、上传日志

通用约束

  • await TiRtc.initialize(...),再创建或使用 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput
  • connect(...) 返回 0 只表示建连请求已成功提交,不表示已经连上;真正连接结果以后续 onStateChanged 为准。
  • attach() / detach() 只控制本地播放绑定;subscribeAudio() / subscribeVideo() / unsubscribe*() 才是向远端发起媒体发送控制。
  • disconnect() 只断开连接,detach() 只解除当前播放绑定;对象本身仍然存在,可继续复用。
  • dispose() 才是 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput 的最终清理动作。调用后该对象不能再继续使用。
  • TiRtc.shutdown() 只应放在应用级或一次完整播放流程结束后的最终 teardown。调用前先 dispose() 所有仍存活的连接和输出对象;否则 shutdown() 会返回错误码,而不是强制回收这些对象。
  • 当前公开互通范围里,streamIdstream_id 的公开约定使用 0..15
  • TiRtcVideoOutput.view() 返回的是这个 output 专属的渲染视图;同一个 TiRtcVideoOutput 同时只支持一个已挂载的 view()

TiRtcInitOptions

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

字段说明
appId你的 AppId。默认值为空字符串。
endpoint自定义服务入口。留空时使用 SDK 当前默认入口。
consoleLogEnabled是否把 SDK 日志镜像到宿主控制台。默认值为 false

TiRtc

TiRtc 管理共享 runtime。典型调用顺序是:initialize() -> 创建连接和播放对象 -> 业务结束后 dispose() 这些对象 -> shutdown()

API说明
initialize(TiRtcInitOptions config): Future<int>初始化共享 runtime。调用时会先通过 Platform Channel 向宿主获取可写日志目录;返回统一的 TiRTCError 错误码。
shutdown(): int关闭共享 runtime。只有在所有 runtime-backed 对象都已经 dispose() 后,才会返回成功。
errorToString(int code): String把错误码转成稳定错误 token。
formatError(int code): String把错误码格式化成可直接展示给用户或写进日志的字符串,例如 error XXX (1234)

TiRtcConn

状态

状态含义
TiRtcConnState.idle连接对象已存在,但还没有开始建连
TiRtcConnState.connecting建连请求已提交,正在等待后续结果
TiRtcConnState.connected连接已经建立,可开始收发命令、流内消息、绑定播放对象、手动订阅和请求关键帧
TiRtcConnState.disconnected连接已经断开;对象仍需要 dispose()

属性和回调

成员说明
state当前连接状态
onStateChanged连接状态变化回调,签名为 void Function(TiRtcConnState state, int errorCode)
onCommand收到命令通道消息时回调,签名为 void Function(int commandId, Uint8List data)
onStreamMessage收到流内消息时回调,签名为 void Function(int streamId, int timestampMs, Uint8List data)

方法

API说明
TiRtcConn()创建连接对象。它本身不发起建连。
connect({required String remoteId, required String token}): int发起到目标 remote_id 的连接。两个参数都必须是非空字符串。返回 0 只表示请求提交成功。
disconnect(): int断开当前连接。成功后当前实例仍可再次 connect(...)
dispose(): void最终释放连接对象。调用后该实例不能再继续使用。
sendCommand({required int commandId, required Uint8List data}): int在命令通道上发送业务自定义命令。Flutter 公开参数名是 commandId;如果链路里包含设备端 C SDK,这个值与设备侧看到的原始 cmdw 是同一份标识。
sendStreamMessage({required int streamId, required int timestampMs, required Uint8List data}): int发送流内消息。发送前两端应先约定好对应的 streamId 和消息语义。
subscribeVideo({required int streamId}): int可选的手动视频订阅控制。它只负责请求远端开始发送,不会自动创建本地播放。
unsubscribeVideo({required int streamId}): int取消手动视频订阅。它不等于 TiRtcVideoOutput.detach()
subscribeAudio({required int streamId}): int可选的手动音频订阅控制。它只负责请求远端开始发送,不会自动创建本地播放。
unsubscribeAudio({required int streamId}): int取消手动音频订阅。它不等于 TiRtcAudioOutput.detach()
requestKeyFrame({required int streamId}): int向指定远端视频流请求关键帧。
getMetricsSnapshot(): ({int code, TiRtcConnMetricsSnapshot? snapshot})获取连接侧指标快照。成功时 code0snapshot 才有值。

TiRtcAudioOutputOptions

TiRtcAudioOutput.configure(...) 使用的参数对象。

字段说明
volumePercent线性音量百分比,默认值为 100
gainLevel额外增益等级,默认值为 0
noiseReductionLevel降噪等级,默认值为 0

TiRtcAudioOutput

状态

状态含义
TiRtcAudioOutputState.idle当前没有绑定远端音频流
TiRtcAudioOutputState.buffering已绑定远端音频流,但还没有进入稳定播放
TiRtcAudioOutputState.playing正在播放远端音频
TiRtcAudioOutputState.failed播放路径发生错误

属性和回调

成员说明
state当前播放状态
onStateChanged播放状态变化回调,签名为 void Function(TiRtcAudioOutputState state)
onError播放错误回调,签名为 void Function(int code)

方法

API说明
TiRtcAudioOutput()创建音频输出对象。
attach({required TiRtcConn connection, required int streamId}): int绑定指定连接上的一条远端音频流。它只决定本地播放哪一条流;如需控制远端开始或停止发送,还要配合 TiRtcConn.subscribeAudio() / unsubscribeAudio()
detach(): int解除当前音频绑定,但对象仍可复用。
configure(TiRtcAudioOutputOptions options): int配置播放参数。当前公开语义里,这个方法应在 attach() 前调用;已 attach 的 output 不支持运行时更新参数。
dispose(): void最终释放音频输出对象。
getMetricsSnapshot(): ({int code, TiRtcAudioOutputMetricsSnapshot? snapshot})获取音频播放指标快照。成功时 code0snapshot 才有值。

TiRtcVideoOutput

状态

状态含义
TiRtcVideoOutputState.idle当前没有绑定远端视频流
TiRtcVideoOutputState.buffering已绑定远端视频流,但还没有进入稳定渲染
TiRtcVideoOutputState.rendering已经开始渲染远端视频
TiRtcVideoOutputState.failed视频播放路径发生错误

属性和回调

成员说明
state当前播放状态
renderSize最近一次由 native 层上报的远端渲染尺寸。初始值为 null;只有收到真实尺寸后才会更新。
onStateChanged播放状态变化回调,签名为 void Function(TiRtcVideoOutputState state)
onRenderSizeChanged渲染尺寸变化回调,签名为 void Function(Size size)
onError播放错误回调,签名为 void Function(int code)

方法

API说明
TiRtcVideoOutput()创建视频输出对象。
attach({required TiRtcConn connection, required int streamId}): int绑定指定连接上的一条远端视频流。它只决定本地播放哪一条流;如需控制远端开始或停止发送,还要配合 TiRtcConn.subscribeVideo() / unsubscribeVideo()
detach(): int解除当前视频绑定,但对象仍可复用。
view(): Widget返回这个 output 对应的 Flutter 渲染视图。把它挂到你自己的 Widget 树里后,SDK 会在内部管理 texture host 和视频显示。未 attach、尚未完成绑定或暂时没有画面时,视图保持占位状态。
dispose(): void最终释放视频输出对象;内部会清理 texture host 和 native 资源。
getMetricsSnapshot(): ({int code, TiRtcVideoOutputMetricsSnapshot? snapshot})获取视频播放指标快照。成功时 code0snapshot 才有值。

TiRtcLogging

API说明
d(String tag, String message): void写一条 debug 日志
i(String tag, String message): void写一条 info 日志
w(String tag, String message): void写一条 warning 日志
e(String tag, String message): void写一条 error 日志
upload(): Future<({int code, String? logId})>在后台 isolate 上传当前 SDK 日志。成功时 logId 才有值。

指标类型

如果你要做首帧耗时、连接耗时或卡顿观测,可以读取以下快照类型。

TiRtcConnMetricsSnapshot

字段 / 计算属性说明
hasConnectStart是否已经记录连接开始时间
hasConnected是否已经记录连接成功时间
connectStartMonotonicMs连接开始时的单调时钟时间戳
connectedMonotonicMs连接成功时的单调时钟时间戳
isReady连接耗时是否已经可计算
connectDurationMs连接耗时;只有 isReadytrue 时才有值

TiRtcAudioOutputMetricsSnapshot

字段说明
stutter音频播放卡顿指标,类型为 TiRtcOutputStutterMetrics
pending音频待消费时长指标,类型为 TiRtcPendingDurationMetrics

TiRtcVideoOutputMetricsSnapshot

字段说明
startup视频启动阶段指标,类型为 TiRtcVideoOutputStartupMetrics
stutter视频播放卡顿指标,类型为 TiRtcOutputStutterMetrics
pending视频待消费时长指标,类型为 TiRtcPendingDurationMetrics

TiRtcVideoOutputStartupMetrics

字段 / 计算属性说明
hasConnectStart / hasConnected是否已经记录连接起止时间
hasFirstVideoInput / hasFirstVideoDecoded / hasFirstVideoRendered是否已经记录首个输入帧、首个解码帧、首个渲染帧
connectStartMonotonicMs / connectedMonotonicMs连接阶段时间点
firstVideoInputMonotonicMs / firstVideoDecodedMonotonicMs / firstVideoRenderedMonotonicMs视频启动阶段关键时间点
hasFirstFrame首帧耗时是否已经可计算
firstFrameDurationMs从连接开始到首帧渲染完成的耗时;只有 hasFirstFrametrue 时才有值

TiRtcOutputStutterMetrics

字段说明
sessionStarted当前播放会话是否已经开始
sessionDurationMs当前会话总时长
sessionStutterTotalMs当前会话累计卡顿总时长
sessionStutterCount当前会话累计卡顿次数
sessionStutterPeakMs当前会话单次最大卡顿时长
sessionStutterRatio当前会话卡顿占比
recentWindowDurationMs最近观测窗口总时长
recentWindowStutterTotalMs最近观测窗口累计卡顿总时长
recentWindowStutterCount最近观测窗口累计卡顿次数
recentWindowStutterPeakMs最近观测窗口单次最大卡顿时长
recentWindowStutterRatio最近观测窗口卡顿占比

TiRtcPendingDurationMetrics

字段说明
undecodedDurationMs尚未完成解码的数据时长
decodedDurationMs已解码但尚未消费的数据时长

常见误用

  • 没有先 await TiRtc.initialize(...) 就创建和使用连接或播放对象。
  • connect(...) 返回 0 误解成已经连上;真正连接结果要以后续 onStateChanged 为准。
  • disconnect()detach() 当成最终清理;真正的最终清理是 dispose()
  • 在音频已经 attach() 之后再调用 configure(...),把它误当成运行时动态调参入口。
  • 把视频状态写成 playing;当前 Flutter 公开状态名是 TiRtcVideoOutputState.rendering
  • 同一个 TiRtcVideoOutput 同时挂载多个 view()
  • 设备端按订阅再发时,只做 attach(...) 没有配合 subscribeAudio() / subscribeVideo(),结果一直无声或黑屏。
  • 还有 live object 没有 dispose() 时就调用 TiRtc.shutdown(),并误以为 runtime 一定已经关闭。

相关文档

Ti RTC 开发文档