虚拟背景与美颜作用于同一条共享摄像头采集链路,设置对全部频道实例同时生效。两者同时开启时顺序固定为美颜在前、虚拟背景在后:人像分割的输入是美颜后的图,边缘才与最终画面一致。
step 1:装载虚拟背景组件
建议在需要用到虚拟背景前装载,例如进入会议页面时。modelPath 传 nil 使用 SDK 内置的人像分割模型。
step 2:设置背景效果
背景虚化与背景替换互斥,后调用的生效。两个接口在装载前调用也会被记住,装载完成后自动生效,因此不必关心与installVirtualBackground: 的先后顺序。
step 3:开启或关闭虚拟背景
装载后默认不开启,需要显式打开。关闭后是零开销直通,不再跑推理。RTCEngineErrorConflict。关闭时会清掉帧间状态,下次开启从首帧重新收敛,不会闪出过期蒙版。
step 4:低端机保帧率(可选)
默认每帧都跑一次人像分割。低端机上可以调大推理间隔,用蒙版复用换帧率;此时再按需打开蒙版对齐消除拖影。inferenceInterval 为 1 时,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 通常不需要调大,更低端机型仍建议按上一节实测后再决定。