Skip to main content
虚拟背景在摄像头采集链路上做人像分割,把人像之外的区域替换成虚化或指定图片。它是自研组件,与美颜不同,装载不需要授权密钥
虚拟背景与美颜作用于同一条共享摄像头采集链路,设置对全部频道实例同时生效。两者同时开启时顺序固定为美颜在前、虚拟背景在后:人像分割的输入是美颜后的图,边缘才与最终画面一致。
虚拟背景依赖 onnxruntime,SDK 内部只保留其未定义符号,由接入 App 在链接期解决。使用 CocoaPods 集成时依赖会自动带入,最低系统要求为 iOS 16.0,详见 集成方式

step 1:装载虚拟背景组件

建议在需要用到虚拟背景前装载,例如进入会议页面时。modelPathnil 使用 SDK 内置的人像分割模型。
返回值说明:

step 2:设置背景效果

背景虚化与背景替换互斥,后调用的生效。两个接口在装载前调用也会被记住,装载完成后自动生效,因此不必关心与 installVirtualBackground: 的先后顺序。

step 3:开启或关闭虚拟背景

装载后默认不开启,需要显式打开。关闭后是零开销直通,不再跑推理。
组件未装载时调用开关会返回 RTCEngineErrorConflict。关闭时会清掉帧间状态,下次开启从首帧重新收敛,不会闪出过期蒙版。

step 4:低端机保帧率(可选)

默认每帧都跑一次人像分割。低端机上可以调大推理间隔,用蒙版复用换帧率;此时再按需打开蒙版对齐消除拖影。
inferenceInterval1 时,setVirtualBackgroundMaskSync: 开与不开没有任何区别——它只在调大推理间隔后才起作用。

性能开销

3.1.1 起人像分割固定走 CPU 推理,不再启用 CoreML。该模型只有 256×256,算子无法被 CoreML 完整承接,每帧在 CPU 与 CoreML 之间反复搬运数据的开销超过省下的算力,实测是负优化。 iPhone XS Max / iOS 18.7.9 实测(720p@25fps 采集,300 帧均值,inferenceInterval 为默认 1): 3.1.0 上单帧 53 ms 已超出 25 fps 的 40 ms 预算,会把编码器拖到丢帧;3.1.1 在该机型上默认每帧跑分割即可满足 25 fps,inferenceInterval 通常不需要调大,更低端机型仍建议按上一节实测后再决定。

step 5:卸载虚拟背景组件

不再使用时卸载,释放推理会话与相关缓冲。
引擎销毁时会自动卸载,无需重复调用。

与美颜同时使用

两者相互独立装载、独立开关,可以只开其中一个。同时开启时处理顺序固定为美颜在前、虚拟背景在后。
美颜或虚拟背景任一开启时,本地预览显示的是处理后的画面;两者都关闭时本地预览回到摄像头原始画面。美颜相关接口见 视频美颜