Skip to main content
本文用最小代码跑通一次音视频通话:加入频道 → 开麦 → 开摄像头 → 订阅远端画面 → 离会。 开始之前请先完成 集成方式 中的依赖声明、权限配置与 SRTC.init

调用序列总览


第一步:创建引擎

SRTCEngine 是无参构造,日志级别通过属性设置:

第二步:加入频道

Token 由你的业务后端签发,SDK 不负责发号。
autoSubscribeAudioautoSubscribeVideo 默认都是 false,即入会后不会自动收流。这与部分同类 SDK 的默认值相反,典型现象是”入会成功但听不到、看不到别人”。

第三步:监听频道事件

delegates 是强引用,必须成对 add / removeArkTS 没有弱引用,也没有 deinit。注册后不摘除会导致监听者永不回收,而且离开页面后仍然收到回调。通常在组件的 aboutToAppear / aboutToDisappear 里配对处理:

第四步:推送本地音视频

开麦

之后开关麦不要重建轨道,用静音开关即可:

开摄像头

关摄像头与关麦不同,走”停止发布 + 停止采集”,而不是静音:
麦克风用 mute() 而摄像头用 unpublish + stopCapture,是因为两者的用户预期不同:静音时对方应当仍看到你在会中,而关摄像头时摄像头指示灯必须真的熄灭。

第五步:渲染画面

SRTCVideoView 是 SDK 提供的 ArkUI 组件,视频帧由底层直接写进 XComponent 的 surface。

本地预览

订阅并渲染远端

多路远端画面用 ForEachkey 必须带上 trackId
track 是普通成员变量,不能声明成 @PropArkTS 的 @Prop 对复杂类型做深拷贝,且拷贝过程中除基本类型 / Map / Set / Date / Array 之外会丢失类型 —— Track 拷过来会变成一个没有方法的普通对象,结果是画面黑屏、事件也收不到。轨道要按引用传入,换轨道靠组件重建(if 分支切换或 ForEach 的 key 带上 trackId)。

第六步:离会与清理

ArkTS 没有析构函数,委托、定时器、采集都必须显式收掉,否则会出现”页面永不回收 + 摄像头指示灯一直亮”。

自测建议

  • 本地预览不需要服务端:只做”创建摄像头轨道 → startCaptureSRTCVideoView”就能验证采集与渲染是否正常,模拟器上也能跑(本地预览不经过硬件编码器)。
  • 发布与订阅必须在真机上验证:所有视频预设都用 H264,而 H264 只有硬编、没有软编兜底,模拟器上编码器建不出来。
  • 不要以”看到画面”作为通过标准:缺少 H264 硬编能力的设备会静默退回 VP8,表现为和其它端互通不上。请确认实际协商到的编码格式。

下一步