You need to enable JavaScript to run this app.
导航
镜像
最近更新时间:2024.03.13 15:27:32首次发布时间:2021.07.18 15:07:02

适用场景

在这些场景下,你可能需要对本地渲染和(或)发布到远端的视频画面进行水平翻转,使其呈现镜像效果。

行业场景
在线课堂课堂直播真实还原线下课堂,例如:卡片跟读,游戏互动,音乐、舞蹈教学
互动娱乐直播间内主播与其他主播或观众实时互动时,收到有关方位的指令
视频通话会议通话时,参会者需要与主讲人的讲解方位保持一致
远程医疗进行远程问诊、在线咨询时,针对正确部位进行看诊(例:左眼)

本文介绍如何使用 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 支持三种镜像模式,分别为

    • 开启本地渲染镜像
    • 开启本地渲染镜像和编码镜像
    • 关闭镜像

    镜像模式的效果

    假设现实中看到的人和物如下图:

    alt

    设置不同的镜像模式后,本地用户预览效果和远端用户看到的效果如下表。

    镜像模式本地用户预览效果远端用户看到的效果
    开启本地渲染镜像altalt
    开启本地渲染镜像和编码镜像altalt
    关闭镜像altalt

    镜像模式下添加贴纸的效果

    在实际应用中,可能还需要对视频进行其他前处理,例如添加动态贴纸、虚拟背景等。

    假设现实中看到的人和物如左图,前处理中添加的贴纸如右图。

    altalt
    现实中看到的人和物在 RTC 中添加的笑脸贴纸

    在添加贴纸的场景中设置不同的镜像模式后,本地用户预览效果和远端用户看到的效果如下表。

    镜像模式本地用户预览效果远端用户看到的效果本地和远端看到的图像是否一致推荐使用场景
    开启本地渲染镜像镜像alt
  • 摄像头采集到的画面镜像
  • 笑脸贴纸为镜像
  • 原始alt视频通话
    开启本地渲染镜像和编码镜像镜像alt
  • 摄像头采集到的画面镜像
  • 笑脸贴纸为初始状态
  • 镜像alt
  • 摄像头采集到的画面镜像
  • 笑脸贴纸为初始状态
  • 视频直播
    关闭镜像原始alt原始alt视频直播

    数据流转图

    下图分别展示了,在不同镜像模式下,对视频流进行镜像处理和其他前处理的过程

    • 开启本地渲染镜像
      开启本地渲染镜像和编码镜像
    • 开启本地渲染镜像和编码镜像
      本地渲染镜像

    注意事项

    • 在调用镜像接口设置镜像类型之前,调用 switchCamera 切换摄像头时,将自动恢复为初始值。
      例如,在引擎的生命周期内没有调用过镜像接口的前提下,从后置摄像头切到前置摄像头后,本地渲染将从原始状态变成镜像。

    • 初始值仅存在于调用镜像模式之前。一旦设置了镜像模式,即使调用 switchCamera 切换摄像采集源,镜像模式的设置也将继续生效,不会自动恢复为初始值。
      例如,当前摄像头为后置摄像头,将镜像模式设置为本地渲染镜像和编码镜像,此后切换为前置摄像头时,镜像模式仍为本地渲染镜像和编码镜像,直到调用镜像接口重新设置为其他模式。

    示例项目

    API 参考

    说明:表格中的 macOS API 接口为 Objective-C,而示例项目中的 macOS 项目使用的是 Windows SDK 中的 API 接口。

    平台AndroidiOSmacOSWindowsElectronUnityFlutterWeb
    版本3.29 及以后版本3.29 及以后版本3.44 及以后版本3.29 及以后版本自首个对外版本自首个对外版本自首个对外版本3.22.x 及以后版本
    支持本地渲染镜像
    设置镜像模式setLocalVideoMirrorTypesetLocalVideoMirrorType:setLocalVideoMirrorType:setLocalVideoMirrorTypesetLocalVideoMirrorTypeSetLocalVideoMirrorTypesetLocalVideoMirrorTypesetLocalVideoMirrorType
    切换摄像头switchCameraswitchCameraSwitchCameraswitchCamerasetVideoCaptureDevice