在这些场景下,你可能需要对本地渲染和(或)发布到远端的视频画面进行水平翻转,使其呈现镜像效果。
行业 | 场景 |
---|---|
在线课堂 | 课堂直播真实还原线下课堂,例如:卡片跟读,游戏互动,音乐、舞蹈教学 |
互动娱乐 | 直播间内主播与其他主播或观众实时互动时,收到有关方位的指令 |
视频通话 | 会议通话时,参会者需要与主讲人的讲解方位保持一致 |
远程医疗 | 进行远程问诊、在线咨询时,针对正确部位进行看诊(例:左眼) |
本文介绍如何使用 RTC SDK 的镜像接口,实现不同的镜像需求。
你已经集成了 3.29 及以上版本的 RTC SDK,并实现音视频通话功能。
支持镜像功能的 SDK 详见API 参考。
MIRROR_TYPE_RENDER_AND_ENCODER(3)
)和无镜像(MIRROR_TYPE_NONE(0)
)选项有效,编码传输镜像选项 (MIRROR_TYPE_RENDER(1)
) 无效。rtcVideo.setLocalVideoMirrorType(MirrorType.MIRROR_TYPE_NONE);
在调用镜像接口设置镜像类型之前,不同视频源的镜像设置具有不同的初始值,如下表
前置摄像头/ PC 摄像头 | 后置摄像头 | 视频外部源 | |
---|---|---|---|
移动端 | |||
PC 端 | 不适用 |
SDK 支持三种镜像模式,分别为
假设现实中看到的人和物如下图:
设置不同的镜像模式后,本地用户预览效果和远端用户看到的效果如下表。
镜像模式 | 本地用户预览效果 | 远端用户看到的效果 |
---|---|---|
开启本地渲染镜像 | ||
开启本地渲染镜像和编码镜像 | ||
关闭镜像 |
在实际应用中,可能还需要对视频进行其他前处理,例如添加动态贴纸、虚拟背景等。
假设现实中看到的人和物如左图,前处理中添加的贴纸如右图。
现实中看到的人和物 | 在 RTC 中添加的笑脸贴纸 |
在添加贴纸的场景中设置不同的镜像模式后,本地用户预览效果和远端用户看到的效果如下表。
镜像模式 | 本地用户预览效果 | 远端用户看到的效果 | 本地和远端看到的图像是否一致 | 推荐使用场景 |
---|---|---|---|---|
开启本地渲染镜像 | 镜像 | 原始 | 否 | 视频通话 |
开启本地渲染镜像和编码镜像 | 镜像 | 镜像 | 是 | 视频直播 |
关闭镜像 | 原始 | 原始 | 是 | 视频直播 |
下图分别展示了,在不同镜像模式下,对视频流进行镜像处理和其他前处理的过程
在调用镜像接口设置镜像类型之前,调用 switchCamera 切换摄像头时,将自动恢复为初始值。
例如,在引擎的生命周期内没有调用过镜像接口的前提下,从后置摄像头切到前置摄像头后,本地渲染将从原始状态变成镜像。
初始值仅存在于调用镜像模式之前。一旦设置了镜像模式,即使调用 switchCamera 切换摄像采集源,镜像模式的设置也将继续生效,不会自动恢复为初始值。
例如,当前摄像头为后置摄像头,将镜像模式设置为本地渲染镜像和编码镜像,此后切换为前置摄像头时,镜像模式仍为本地渲染镜像和编码镜像,直到调用镜像接口重新设置为其他模式。
说明:表格中的 macOS API 接口为 Objective-C,而示例项目中的 macOS 项目使用的是 Windows SDK 中的 API 接口。
平台 | Android | iOS | macOS | Windows | Electron | Unity | Flutter | Web |
---|---|---|---|---|---|---|---|---|
版本 | 3.29 及以后版本 | 3.29 及以后版本 | 3.44 及以后版本 | 3.29 及以后版本 | 自首个对外版本 | 自首个对外版本 | 自首个对外版本 | 3.22.x 及以后版本 支持本地渲染镜像 |
设置镜像模式 | setLocalVideoMirrorType | setLocalVideoMirrorType: | setLocalVideoMirrorType: | setLocalVideoMirrorType | setLocalVideoMirrorType | SetLocalVideoMirrorType | setLocalVideoMirrorType | setLocalVideoMirrorType |
切换摄像头 | switchCamera | switchCamera | 无 | 无 | 无 | SwitchCamera | switchCamera | setVideoCaptureDevice |