Skip to content

iOS API 参考

本页描述 Darwin SDK TiRTC_AV 在 iOS 上当前公开的 Swift / Objective-C 可见 API,适用于用 iOS 原生应用接入 TiRTC 的开发者。

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

对象总览

对象作用最终清理
TiRtcInitOptions组织 runtime 初始化参数调用方自行持有
TiRtc初始化和关闭全局 runtimeTiRtc.shutdown()
TiRtcConn建连、断连、收发命令、收发流内消息、手动订阅媒体、请求关键帧invalidate()
TiRtcAudioOutputOptions组织音频播放参数调用方自行持有
TiRtcAudioOutput播放一条远端音频流invalidate()
TiRtcVideoOutput播放一条远端视频流,并绑定 iOS 视图invalidate()
TiRtcDebugging上传 SDK 日志

通用约束

  • 先调用 TiRtc.initialize(_:),再使用 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput
  • Darwin 当前公开 client surface 不会把 callback 自动切回主线程;如果 delegate 里要更新 UI,请你自己切回主线程或主 actor。
  • connect(...) 返回 0 只表示建连请求已提交,不表示已经连上;真正连接结果以后续 conn(_:didChangeState:errorCode:) 为准。
  • attach(...) / detach() 只控制本地播放绑定;subscribeAudio() / subscribeVideo() / unsubscribe*() 才是向远端发起媒体发送控制。
  • disconnect() 只断开连接,detach() / detachView() 只解除当前播放绑定;对象本身仍可复用。
  • invalidate() 才是 TiRtcConnTiRtcAudioOutputTiRtcVideoOutput 的最终清理动作。
  • 调用 TiRtc.shutdown() 前,先 invalidate() 所有仍存活的连接和输出对象。
  • 当前公开互通范围里,streamIdstream_id 的约定使用 0..15
  • TiRtcVideoOutput.attachView(_:) 在 iOS 下接收 UIView,并且必须在主线程调用。

TiRtcInitOptions

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

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

TiRtc

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

API说明
initialize(_ config: TiRtcInitOptions) -> Int32初始化共享 runtime。返回统一的 TiRTCError 错误码。
shutdown() -> Void关闭共享 runtime。它本身不返回错误码,也不会替你清理仍存活的对象。

TiRtcConn

状态

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

TiRtcConnDelegate

回调说明
conn(_:didChangeState:errorCode:)连接状态变化回调。当前公开 surface 把状态和错误码统一放在同一个回调里。
conn(_:didReceiveCommand:data:)收到命令通道消息时回调;业务侧看到的是 commandId + Data
conn(_:didReceiveStreamMessage:data:streamId:)收到流内消息时回调。参数顺序是 timestampMsdatastreamId

当前公开 iOS client 主线里,没有额外的 didDisconnectdidFailWithCode delegate 方法。

属性和方法

API说明
init(delegate: TiRtcConnDelegate?)创建连接对象。delegate 只在这里传入,并且是 weak 持有。native bridge 不是在 init 时立即创建,而是在第一次 connectsendrequestKeyFrame 等需要它的调用里按需创建。
state: TiRtcConnState当前连接状态。只读。
connect(to remoteId: String, token: String) -> Int32发起到目标 remote_id 的连接。参数任一为空时返回 invalid argument。返回 0 只表示请求提交成功。
disconnect() -> Void断开当前连接,但不释放对象。
send(commandId: UInt32, data: Data) -> Int32在命令通道上发送业务自定义命令。iOS 当前公开参数名是 commandId
sendStreamMessage(timestampMs: UInt32, data: Data, streamId: UInt8) -> Int32发送流内消息。iOS 当前公开参数顺序是 timestampMsdatastreamId
subscribeVideo(streamId: UInt8) -> Int32可选的手动视频订阅控制。它只负责请求远端开始发送,不会自动创建本地播放。
unsubscribeVideo(streamId: UInt8) -> Int32取消手动视频订阅。它不等于 TiRtcVideoOutput.detach()
subscribeAudio(streamId: UInt8) -> Int32可选的手动音频订阅控制。它只负责请求远端开始发送,不会自动创建本地播放。
unsubscribeAudio(streamId: UInt8) -> Int32取消手动音频订阅。它不等于 TiRtcAudioOutput.detach()
requestKeyFrame(streamId: UInt8) -> Int32向指定远端视频流请求关键帧。
invalidate() -> Void最终释放连接对象。重复调用是安全 no-op。

TiRtcAudioOutputOptions

TiRtcAudioOutput.updateOptions(_:) 使用的参数对象。

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

TiRtcAudioOutput

状态

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

TiRtcAudioOutputDelegate

回调说明
audioOutput(_:didChangeState:)播放状态变化
audioOutput(_:didFailWithCode:message:)播放错误

属性和方法

API说明
delegate音频输出回调入口;weak 持有。
updateOptions(_ options: TiRtcAudioOutputOptions) -> Int32更新播放参数。若 bridge 尚未创建,这个调用也会触发按需创建。
attach(to conn: TiRtcConn, streamId: UInt8) -> Int32绑定指定连接上的一条远端音频流。它只决定本地播放哪一条流;如需控制远端开始或停止发送,还要配合 TiRtcConn.subscribeAudio() / unsubscribeAudio()
detach() -> Void解除当前音频绑定,但对象仍可复用。
invalidate() -> Void最终释放音频输出对象。

当前公开 iOS surface 没有额外暴露只读 state 属性;如果你需要感知播放状态,应以 delegate 回调为准。

TiRtcVideoOutput

状态

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

TiRtcVideoOutputDelegate

回调说明
videoOutput(_:didChangeState:)播放状态变化
videoOutput(_:didChangeRenderSize:)渲染尺寸变化
videoOutput(_:didFailWithCode:message:)播放错误

属性和方法

API说明
delegate视频输出回调入口;weak 持有。
attachView(_ view: TiRtcPlatformView) -> Int32把 output 绑定到 iOS 视图。在 iOS 下,TiRtcPlatformView 就是 UIView。必须在主线程调用。
detachView() -> Void解除当前视图绑定,但不解除远端视频绑定。
attach(to conn: TiRtcConn, streamId: UInt8) -> Int32绑定指定连接上的一条远端视频流。它只决定本地播放哪一条流;如需控制远端开始或停止发送,还要配合 TiRtcConn.subscribeVideo() / unsubscribeVideo()
detach() -> Void解除当前视频绑定,但对象仍可复用。
invalidate() -> Void最终释放视频输出对象。

当前公开 iOS surface 没有额外暴露 staterenderSize 只读属性;如果你需要感知这些信息,应以 delegate 回调为准。

TiRtcDebugging

API说明
uploadLogs(completion:) -> Int32异步上传当前 SDK 日志。调用成功只表示上传任务已成功启动;真正结果通过 completion(code, logId) 返回。

常见误用

  • 按旧文档去找 TiRtcConfigenvironment、连接级 didDisconnect、连接级 didFailWithCode 这类当前 Darwin client 主线里已经不存在的 surface。
  • connect(to:token:) 返回 0 误解成已经连上;真正连接结果要以后续 conn(_:didChangeState:errorCode:) 为准。
  • 以为 SDK 会自动把 delegate 切回主线程;如果要更新 UI,应自行切回主线程或主 actor。
  • disconnect()detach()detachView() 当成最终清理;真正的最终清理是 invalidate()
  • 把视频状态写成 playing;当前 Darwin 公开状态名是 TiRtcVideoOutputState.rendering
  • 在非主线程调用 attachView(_:)
  • 以为 TiRtcAudioOutput / TiRtcVideoOutput 暴露了可直接读取的 staterenderSize 属性;当前公开 surface 里这些信息都通过 delegate 回调给出。
  • 设备端按订阅再发时,只做 attach(...) 没有配合 subscribeAudio() / subscribeVideo(),结果一直无声或黑屏。
  • 退出前只调用 TiRtc.shutdown(),却没有先 invalidate() 仍存活的对象。

相关文档

Ti RTC 开发文档