继承关系
SRTCEngine.createLocalXxxTrack() 创建,远端轨道由 SDK 在收到信令后创建、
经 channel.getRemoteTrack() 取得。两边都不要自己 new。
Track(基类)
getRtcTrack() / setRtcTrack() / updateInfo() / updatePartialInfo()
是 SDK 内部接口,业务侧不要调。LocalTrack
所有本地轨道的共同部分。
LocalAudioTrack
抛出:
captureError(权限未授予、设备被占用等)
子类
LocalVideoTrack
captureWidth / captureHeight 与你设定的值可能不同:采集分辨率受设备档位限制,
底层会吸附到最近的档位。要看实际值就读这两个字段。SRTCVideoView 渲染时不需要自己碰 addRenderer —— 组件内部已经处理。
LocalCameraTrack
变焦
setZoom() 在不支持或超范围时不抛错:相机变焦是连续调节,手势滑到端点是常态,抛错会让调用方每次都得自己判边界。超范围的值会被夹到范围内。排障看 hdc shell hilog -x | grep -a SetZoomRatio,native 侧三种结果各有日志:clamped=(已生效)、ignored: zoom not supported by device、ignored: capture session not active。LocalScreenTrack
RemoteAudioTrack
stopPlay() 只停本地播放,不退订 —— 带宽照旧消耗,但切回来是瞬时的。
要真正省带宽得用 channel.unsubscribeRemoteTrack()。按用户维度控制播放更方便的做法是
channel.setUserAudioPlayback(uid, enabled)。RemoteAudioMixTrack
云端混音轨道。SeaStart 引擎在服务端把多路音频混成一路下发,客户端只订阅这一条,
省掉 N 路解码。
轨道
id 与 desc 固定是 audio_mix,与其它端一致 —— 服务端按这个字符串识别混音轨。
RemoteVideoTrack
用
SRTCVideoView 时不需要自己管:
渲染层
SRTCVideoView
ArkUI 自定义组件。参数:
另有
ScalingMode 控制填充方式。
surface 与轨道的生命周期不同步,两个方向都要考虑:
- surface 比轨道晚到:远端轨道是信令先建对象、订阅协商完成后才绑底层轨道; 本地轨道则可能在组件挂载前就采集好了。
- surface 会重建:切后台、旋屏都会走一遍 destroy → create。
onTrackBindRtcTrack 补挂),
但前提是保持同一个组件实例 —— 不要每次 build 都换 key。SRTCVideoRenderer / VideoRendererRegistry
需要自己接渲染(画到自定义画布、做录制等)时用这一层。VideoRendererRegistry
维护 trackKey → 渲染器的映射,SRTCVideoView 内部走的也是它。
绝大多数业务不需要碰这层。
相关阅读
- 静音与停止发布 ——
mute与unpublish该用哪个 - 设备管理
- SRTCEngine 与 Channel
- 类型定义