Skip to content

Flutter API 参考

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

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

对象总览

对象作用清理方式
TiRtcInitOptions组织 SDK 初始化参数无需显式清理
TiRtc初始化和关闭 SDK 运行环境,格式化错误码TiRtc.shutdown()
TiRtcConn建连、断连、收发命令、收发流消息、请求关键帧、手动订阅媒体dispose()
TiRtcAudioOutputOptions组织音频播放参数无需显式清理
TiRtcAudioOutput播放一条远端音频流,读取排查快照dispose()
TiRtcVideoOutputOptions组织视频解码选项无需显式清理
TiRtcVideoOutput播放一条远端视频流、生成 Flutter 视图,读取排查快照dispose()
TiRtcLogging写 SDK 日志、上传日志

TiRtcInitOptions

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

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

TiRtc

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

API说明
initialize(TiRtcInitOptions config): Future<int>初始化 SDK 运行环境。成功返回 0,失败返回错误码;初始化完成后才能创建或使用 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput
shutdown(): int关闭 SDK 运行环境。调用前必须先 dispose() 所有 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput;否则会返回错误码,不会强制释放这些对象。
errorToString(int code): String把错误码转成稳定错误标识字符串。
formatError(int code): String把错误码格式化成可直接展示给用户或写进日志的字符串,例如 error XXX (1234)

TiRtcConn

本节所有 streamId 参数按 stream_id 的公开约定使用 0..15

状态

状态含义
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()创建连接对象。调用前需要先完成 TiRtc.initialize(...);它本身不发起建连。
connect({required String remoteId, required String token}): int发起到目标 remote_id 的连接。两个参数都必须是非空字符串。返回 0 只表示请求提交成功,不表示已经连上;真正连接结果以后续 onStateChanged 为准。
disconnect(): int断开当前连接,但不释放连接对象。成功后当前实例仍可再次 connect(...)
dispose(): void释放连接对象。调用后该实例不能再继续使用。
sendCommand({required int commandId, required Uint8List data}): int在命令通道上发送业务自定义命令。commandId 是两端约定的业务命令编号。
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向指定远端视频流请求关键帧。

TiRtcAudioOutputOptions

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

字段说明
volumePercent线性音量百分比,默认值为 100
agcLevel自动增益控制(AGC)等级,默认值为 0
ansLevel自动噪声抑制(ANS)等级,默认值为 0

TiRtcAudioOutput

状态

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

属性和回调

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

方法

API说明
TiRtcAudioOutput()创建音频输出对象。调用前需要先完成 TiRtc.initialize(...)
attach({required TiRtcConn connection, required int streamId}): int绑定指定连接上的一条远端音频流。它只决定本地播放哪一条流;如果远端配置为收到订阅后才发送媒体,还需要调用 TiRtcConn.subscribeAudio()
detach(): int解除当前音频绑定,但不释放对象;同一个音频输出对象仍可复用。
configure(TiRtcAudioOutputOptions options): int配置播放参数。应在 attach() 前调用;已经绑定后的音频输出不支持动态更新参数。
dispose(): void释放音频输出对象。调用后该实例不能再继续使用。
getDebugSnapshot(): ({int code, TiRtcAudioOutputDebugSnapshot? snapshot})获取音频排查快照。成功时 code0snapshot 才有值。

TiRtcVideoOutputOptions

TiRtcVideoOutput.setOptions(...) 使用的视频解码参数对象。普通播放不用设置;只有需要指定软件解码 / 硬件解码偏好时才使用。

字段说明
decoderPreference视频解码偏好,默认值为 00 表示自动选择,1 表示请求软件解码,2 表示请求硬件解码。

decoderPreference 只是请求偏好,不保证实际解码器一定按该值选择。实际结果取决于设备、系统、视频编码格式和当前可用能力。

TiRtcVideoOutput

状态

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

属性和回调

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

方法

API说明
TiRtcVideoOutput()创建视频输出对象。调用前需要先完成 TiRtc.initialize(...)
setOptions(TiRtcVideoOutputOptions options): int设置视频解码选项。建议在 attach() 前调用;普通播放不用调用。
attach({required TiRtcConn connection, required int streamId}): int绑定指定连接上的一条远端视频流。它只决定本地播放哪一条流;如果远端配置为收到订阅后才发送媒体,还需要调用 TiRtcConn.subscribeVideo()
detach(): int解除当前视频绑定,但不释放对象;同一个视频输出对象仍可复用。
view(): Widget返回这个视频输出对象对应的 Flutter 渲染视图。同一个 TiRtcVideoOutput 同时只支持挂载一个 view();未绑定、尚未完成绑定或暂时没有画面时,视图保持占位状态。
dispose(): void释放视频输出对象和相关系统资源。调用后该实例不能再继续使用。
getDebugSnapshot(): ({int code, TiRtcVideoOutputDebugSnapshot? 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})>异步上传当前 SDK 日志。成功时 logId 才有值。

排查快照类型

排查快照用于读取 SDK 当前已知的编码格式、分辨率、解码方式等信息。它们是查询 API,不会改变播放状态,也不会触发 onError

TiRtcAudioOutputDebugSnapshot

字段说明
codec当前已知的音频编码格式;0 表示 SDK 暂未获取到该信息

TiRtcVideoOutputDebugSnapshot

字段说明
codec当前已知的视频编码格式;0 表示 SDK 暂未获取到该信息
bitstreamFormat当前已知的视频码流格式;0 表示 SDK 暂未获取到该信息
width最近一次已知视频宽度;0 表示 SDK 暂未获取到该信息
height最近一次已知视频高度;0 表示 SDK 暂未获取到该信息
decoderPreference当前请求的视频解码偏好
resolvedDecoderBackend已锁定的实际解码器类型;0 表示尚未锁定,1 表示软件解码,2 表示硬件解码

常见误用

  • 没有先 await TiRtc.initialize(...) 就创建和使用连接或播放对象。
  • connect(...) 返回 0 误解成已经连上;真正连接结果要以后续 onStateChanged 为准。
  • disconnect()detach() 当成对象释放;业务结束后仍需要调用 dispose()
  • 在音频已经 attach() 之后再调用 configure(...),把它误当成动态调参入口。
  • TiRtcVideoOutputOptions.decoderPreference 当成常规必配项;普通播放使用默认自动策略即可。
  • decoderPreference 当成最终解码结果;实际解码器应以 TiRtcVideoOutputDebugSnapshot.resolvedDecoderBackend 为准。
  • 把视频状态写成 playing;当前 Flutter 公开状态名是 TiRtcVideoOutputState.rendering
  • 同一个 TiRtcVideoOutput 同时挂载多个 view()
  • 如果远端配置为收到订阅后才发送媒体,只做 attach(...) 没有配合 subscribeAudio() / subscribeVideo(),结果一直无声或黑屏。
  • 还有连接或播放对象没有 dispose() 时就调用 TiRtc.shutdown(),并误以为 SDK 运行环境一定已经关闭。

相关文档

TiRTC 开发文档