虚拟背景
更新时间: 2023/10/19 08:03:41
NERoom SDK 通过人像分割技术,自动识别用户人像,虚化用户周围的真实环境,或者以指定颜色的图片或自定义图像替代真实背景,从而实现设置虚拟背景。在音视频会议或教育场景中,虚拟背景不仅可以保护与会者的隐私,还可以作为主题宣传的背景墙。
功能原理
NERoom SDK 支持的虚拟背景采用自研的深度学习算法,在对当前视频帧做背景分割时利用前一帧的分割结果作为先验信息,同时在 video matting 中利用时序信息解决视频分割中可能出现的闪烁问题,提升分割效果,让您在使用虚拟背景的同时也能享受优质的视频通话体验。
注意事项
-
建议您在满足以下条件的场景中使用虚拟背景功能:
- 采用高清摄像设备,避免遮挡摄像头且环境光线均匀。
- 捕获的视频场景中无冗余物件,用户人像尽量保持上半身在画面内且基本无遮挡。
- 背景色单一且尽量不与用户着装颜色相同。
-
开启虚拟背景对手机的性能有一定的要求,为了确保视频的清晰度和流畅度,强烈建议在 GPU 为 A13(例如 iPhone11 pro) 及以上的机型中开启虚拟背景。
-
若您设置背景图片为自定义本地图片,SDK 会在保证背景图片内容不变形的前提下,对图片进行一定程度上的缩放和裁剪,以适配视频采集分辨率。
-
暂不支持在 Texture 格式的视频或通过 Push 方法从自定义视频源获取的视频中设置虚拟背景。
配置步骤
-
调用addPreviewRoomListener接口,添加预览房间事件监听。
-
在成功加入房间后调用 unmuteMyVideo 方法开启本地视频采集。
-
调用 enableVirtualBackground 方法开启虚拟背景功能。
调用该方法时,您需要设置
enabled
参数为true
开启虚拟背景功能,并设置 backgroundSource参数自定义背景图片的类型。场景 配置步骤 设置背景图片为纯色图片(默认) 1. 设置 backgroundSourceType
参数为NERoomVirtualBackgroundSourceTypeColor
。
2. 设置color
参数自定义图片颜色,该参数的取值范围为 0x000000 ~ 0xFFFFFF,默认值为 0xFFFFFF,即白色。- 纯色图片的格式为 RGB 定义的十六进制整数,不带 # 号。
- 若 color 值设置无效,SDK 会将背景图片设置为白色图片。
设置背景图片为自定义本地图片 1. 设置 backgroundSourceType
参数为NERoomVirtualBackgroundSourceTypeImage
。
2. 设置source
参数为自定义背景图片的本地绝对路径。自定义背景图片仅支持 JPG 和 PNG 格式。 设置背景虚化 1. 设置 backgroundSourceType
参数为NERoomVirtualBackgroundSourceTypeBlur
。
2. 设置blurDegree
参数指定虚化程度,具体枚举值如下:- 虚化程度低:NERoomBlurDegreeLow(1)。
- 虚化程度中:NERoomBlurDegreeMedium(2)。
- 虚化程度高:NERoomBlurDegreeHigh(3)。
- 纯色图片的格式为 RGB 定义的十六进制整数,不带 # 号。
-
启用该方法后,SDK 会触发虚拟背景启用成功与否的 onRtcVirtualBackgroundSourceEnabled回调。
-
若您需要取消虚拟背景,请调用 enableVirtualBackground方法,设置
enabled
参数为false
,关闭虚拟背景功能。
示例代码
以设置虚拟背景为自定义本地图片为例。
// 房间外预览
let params = NEPreviewRoomParams()
let options = NEPreviewRoomOptions()
NERoomKit.shared.roomService.previewRoom(params, options: options) { [weak self] code, str, previewRoomContext in
guard let self = self, let context = previewRoomContext else { return }
context.addPreviewRoomListener(self)
let source = NERoomVirtualBackgroundSource()
source.backgroundSourceType = .image
source.source = "图片绝对路径"
let code = context.previewController.enableVirtualBackground(enable: true, backgroundSource: )
if code == 0 {
print("虚拟背景开启")
}
let canvas = NERoomVideoView()
canvas.container = xxx
context.previewController.startPreview(canvas: )
}
// 2. 房间内开启虚拟背景
let context = NERoomKit.shared.roomService.getRoomContext(roomUuid: "房间Id")
context.addRoomListener(listener: self)
let source = NERoomVirtualBackgroundSource()
source.backgroundSourceType = .image
source.source = "图片绝对路径"
let code = context.rtcController.enableVirtualBackground(enable: true, backgroundSource: )
if code == 0 {
print("虚拟背景开启")
}
context.rtcController.unmuteMyVideo()
/**
开启视频 会触发 NEPreviewRoomListener协议的 方法
reason对应的描述:
0: 虚拟背景开启成功
1:自定义背景图片不存在
2:自定义背景图片的图片格式无效
3:自定义背景图片的颜色格式无效
4:该设备不支持使用虚拟背景
*/
func onRtcVirtualBackgroundSourceEnabled(enable: Bool, reason: Int) {
}
API 参考
方法 | 功能描述 |
---|---|
enableVirtualBackground | 开启或关闭虚拟背景。 |
onRtcVirtualBackgroundSourceEnabled | 是否成功启用虚拟背景的回调通知。 |