SRTC
只做一件事:把宿主的 Context 交给 SDK。
SRTC.init(context)
在
UIAbility.onCreate 里调用一次。
SRTC.context
undefined 表示没有调用过 init()。
SRTCEngine
SDK 主入口。无参构造。
属性
SRTCEngine 没有 dispose()。要释放资源就 leaveChannel() 并把注册过的
delegate 逐一 remove。joinChannel(tokenString, options?)
加入频道。
返回:
Promise<Channel>
抛出:tokenExpired / tokenInvalid / alreadyJoined / apiRequestFailed /
signalingConnectFailed
可以调用多次加入多个频道,各频道互不干扰。
leaveChannel()
leaveChannelInstance(channel)
createLocalMicTrack(preset?)
preset 用默认参数。
创建 ≠ 采集 ≠ 发布。拿到轨道后还要
startCapture(),要让对端看到 / 听到还要
channel.publishLocalAudioTrack()。createLocalCameraTrack(preset?)
cameraPreset1080p() / cameraPreset720p() /
cameraPreset360p() / cameraPreset180p()。
LocalCameraTrack 本身是无参构造,预设必须经引擎传入 ——
new LocalCameraTrack(preset) 编不过。createLocalScreenTrack(preset?, audioPreset?)
audioPreset 时会同时采集系统音频,通过
screenTrack.audioTrack 取到那条音频轨。
startCapture() 会弹出系统授权窗,用户同意后才出帧。
enableIm(tokenString) / disableIm()
Im 对象上注册 ImDelegate 收消息。
IM 是只收不发的:SDK 提供
onImMessage 回调,但没有发送接口 ——
发消息由业务后端负责。频道内自定义消息(onCustomMessage)同理。Channel
一次已经完成鉴权和网络连接的 RTC 会话。由 joinChannel 返回,不要自己构造。
属性
发布
options 时用轨道的 defaultPublishOptions(预设里带的那份)。
抛出:trackAlreadyPublished / trackNotPublished / transportNotReady /
maxPublishLimitReached
轨道属于引擎而不是频道 —— 同一条采集轨道可以发布给多个频道,采集只做一次。
订阅
uid + trackId 来自 onTrackAdded 回调里的 UserInfo 与 TrackInfo。
unsubscribeRemoteTrack 的 debounceMs 用来抑制”快速滑动列表导致的反复订阅/退订”——
传 0 表示立即退订。
拿到
Track 对象不等于已经有帧。远端轨道是信令先建对象、订阅协商完成后才绑定底层
轨道,渲染时机看 onTrackBindRtcTrack(SRTCVideoView 内部已处理)。Simulcast
switchLayer 主动切到指定层(大流 / 小流)。getSubscribeHit 返回当前实际命中的
轨道 ID —— 服务端可能因带宽自动降级,这个值才是真相。
切换结果通过 onLayerSwitched 回调上报。
远端音频播放控制
成员
质量
onConnectionQualityChange,
它已经做过等级判定与抖动抑制。
统计
RtcStatsSnapshot。
与 getConnectionQuality() / onQualityReport 的分工:
所以网宿 CDN 路径上想拿到任何质量数据,只有
getStats() 这一条路;而”我实际编码出来是多少分辨率""编码器是被 CPU 还是被带宽限住了”这类问题服务端根本答不了,也只有这一条路。
logStats() 是排障快捷入口,采集一次并按每行一路流打成日志。
上新机型或升级底层库后先跑
rawStatsTypeCounts()。 底层 webrtc.d.ts 没有声明 outbound-rtp 等类型的字段,native 侧究竟填了哪些未经约定。类型缺失时上面所有统计读出来都是 undefined,而且不报错。离开
srtc.leaveChannel() / srtc.leaveChannelInstance(channel),
它们会同时维护引擎侧的频道列表。
Channel 上还有 refresh() / leaveWithReason() / onDisconnect /
isTrackPublishedInOtherChannel 等成员,那些是 SDK 内部在用的,业务侧不要调。User
频道成员。由 channel.getUser(uid) 取得。