继承关系
SRTCEngine.createLocalXxxTrack() 创建,远端轨道由 SDK 在收到信令后创建、
经 channel.getRemoteTrack() 取得。两边都不要自己 new。
Track(基类)
getRtcTrack() / setRtcTrack() / updateInfo() / updatePartialInfo()
是 SDK 内部接口,业务侧不要调。LocalTrack
所有本地轨道的共同部分。
LocalAudioTrack
抛出(
startCapture / restartCapture / changeDeviceId):
micPermissionDenied(108251):麦克风未授权。采集前只读预检,SDK 不弹授权框,权限由宿主申请deviceNotFound(108021):没有麦克风,或指定的deviceId不在枚举结果里captureError(108018):其它采集失败(设备被占用等)
SRTCError,系统原码在 systemCode、原异常在 cause;1.0.1 及以前会直接抛系统异常。
子类
LocalVideoTrack
captureWidth / captureHeight 与你设定的值可能不同:采集分辨率受设备档位限制,
底层会吸附到最近的档位。要看实际值就读这两个字段。SRTCVideoView 渲染时不需要自己碰 addRenderer —— 组件内部已经处理。
LocalCameraTrack
startCapture / restartCapture):cameraPermissionDenied(108231,摄像头未授权,采集前只读预检、不弹授权框)/
deviceNotFound(108021)/ captureError(108018)。规则同 LocalAudioTrack,1.1.0 起。
变焦
setZoom() 在不支持或超范围时不抛错:相机变焦是连续调节,手势滑到端点是常态,抛错会让调用方每次都得自己判边界。超范围的值会被夹到范围内。排障看 hdc shell hilog -x | grep -a SetZoomRatio,native 侧三种结果各有日志:clamped=(已生效)、ignored: zoom not supported by device、ignored: capture session not active。LocalScreenTrack
startCapture / restartCapture):screenShareDenied(108039,系统授权未通过)/ captureError(108018),1.1.0 起;系统原码在 systemCode。用户点「取消」时实际落到哪个码尚待确认。
系统侧结束共享(1.2.0 起):用户点状态栏录屏胶囊等系统入口结束共享时,SDK 会自己走一遍 stopCapture() 并触发 TrackDelegate.onTrackEnd。SDK 只停采集,撤发布和通知其他人由业务层在 onTrackEnd 里做。
详见屏幕共享。
RemoteAudioTrack
stopPlay() 只停本地播放,不退订 —— 带宽照旧消耗,但切回来是瞬时的。
要真正省带宽得用 channel.unsubscribeRemoteTrack()。按用户维度控制播放更方便的做法是
channel.setUserAudioPlayback(uid, enabled)。RemoteAudioMixTrack
云端混音轨道。SeaStart 引擎在服务端把多路音频混成一路下发,客户端只订阅这一条,
省掉 N 路解码。
轨道
id 与 desc 固定是 audio_mix,与其它端一致 —— 服务端按这个字符串识别混音轨。
RemoteVideoTrack
用
SRTCVideoView 时不需要自己管:
onReceiveStreamStatusChange 只报跳变:已出过帧的轨道退订后再订阅,不会再报一次「恢复」。所以画面上的初始加载指示要按 isReceiveTimedOut 现判,后续变化再跟事件走。RemoteVideoMcuTrack
1.2.0 起频道级 MCU 合成视频轨道,继承
RemoteVideoTrack,由 channel.subscribeRemoteVideoMcuTrack() 返回,不要自己构造。
渲染、收流状态与普通远端视频一致,见
Channel 接口「MCU 合成画面」一节。
渲染层
SRTCVideoView
ArkUI 自定义组件。参数:
另有
ScalingMode 控制填充方式。
surface 与轨道的生命周期不同步,两个方向都要考虑:
- surface 比轨道晚到:远端轨道是信令先建对象、订阅协商完成后才绑底层轨道; 本地轨道则可能在组件挂载前就采集好了。
- surface 会重建:切后台、旋屏都会走一遍 destroy → create。
onTrackBindRtcTrack 补挂),
但前提是保持同一个组件实例 —— 不要每次 build 都换 key。SRTCVideoRenderer / VideoRendererRegistry
需要自己接渲染(画到自定义画布、做录制等)时用这一层。VideoRendererRegistry
维护 trackKey → 渲染器的映射,SRTCVideoView 内部走的也是它。
绝大多数业务不需要碰这层。
相关阅读
- 静音与停止发布 ——
mute与unpublish该用哪个 - 设备管理
- SRTCEngine 与 Channel
- 类型定义