实时音视频
  • 平台类型
  • 框架 / 引擎
  • iOS
  • Android
  • macOS
  • Windows
  • Linux
  • Web
  • 小程序

美颜和水印

更新时间:2021-04-25 20:25

1 功能简介

当在视频通话或直播时,希望向对方呈现出良好的肌肤状态,可使用 SDK 的基础美颜功能来实现。开发者可以开启美颜开关,调整美白、磨皮等美颜参数。 当需要为教育类的教学课件设置版权方 Logo 等场景下,可使用 SDK 的水印功能来实现。

本文主要讲述如何利用其 API 实现相关功能。

2 前提条件

在实现美颜和水印功能之前,请确保:

3 使用步骤

3.1 开启美颜

  • 接口原型

    /** 美颜特性 */
    public enum ZegoBeautifyFeature {
        /** 无美颜 */
        NONE(0),
        /** 磨皮 */
        POLISH(1 << 0),
        /** 全屏美白 */
        WHITEN(1 << 1),
        /** 皮肤美白 */
        SKIN_WHITEN(1 << 2),
        /** 锐化 */
        SHARPEN(1 << 3);
    
        // 枚举的其它方法 ...
    }
    
    /**
     * 开/关美颜
     *
     * 识别视频中的人像进行美颜。开始推流前后都可以设置。
     * @param featureBitmask 比特掩码格式,可选择同时开启 ZegoBeautifyFeature 中的几个特性
     */
    public void enableBeautify(int featureBitmask)
  • 调用示例

    // 开启磨皮和锐化,sdk 为 ZegoExpressEngine 的实例
    sdk.enableBeautify(ZegoBeautifyFeature.POLISH.value()|ZegoBeautifyFeature.SHARPEN.value());
    
    // 关闭所有美颜功能
    sdk.enableBeautify(ZegoBeautifyFeature.NONE.value());

3.2 自定义美颜参数

开启美颜功能之后,SDK 将采用默认的美颜参数来进行美颜,用户可根据实际的需求来自定义美颜参数。

  • 接口原型

    public class ZegoBeautifyOption {
    
        /** 美颜磨皮的采样步长,取值范围[0,1],默认 0.2 */
        public double polishStep;
    
        /** 美颜美白的亮度参数,值越大亮度越亮,取值范围[0,1],默认 0.5 */
        public double whitenFactor;
    
        /** 美颜锐化参数,值越大锐化越强,取值范围[0,1],默认 0.1 */
        public double sharpenFactor;
    
    }
    
    /**
     * 设置美颜参数
     *
     * @param option 美颜选项参数
     */
    public void setBeautifyOption(ZegoBeautifyOption option) 
  • 调用示例

    ZegoBeautifyOption option = new ZegoBeautifyOption();
    option.polishStep = 0.4;
    option.whitenFactor = 0.5;
    option.sharpenFactor = 0.2;
    sdk.setBeautifyOption(option);

3.3 使用水印

ZegoWatermark 对象中的 “imageURL” 参数支持传两种路径格式。

  1. 绝对路径的形式

    file://[图片资源名称]:需要将图片存放在 Android 设备的某目录中,例如 Android 的 app 的私有目录:“/sdcard/Android/data/im.zego.zegoexpressapp/ZegoLogo.png”。

  • 接口原型

    /**
    * 设置推流水印
    *
    * 推流前设置,水印的布局不能超出推流的视频编码分辨率。
    * @param watermark 水印布局左上角为坐标系原点,区域不能超过编码分辨率设置的大小。若为空表示取消水印。
    * @param isPreviewVisible 是否本地预览能看见水印
    */
    public void setPublishWatermark(@Nullable ZegoWatermark watermark, boolean isPreviewVisible)
  • 调用示例

    // 支持 JPG 与 PNG 格式的图片, 如果图片是放在Android工程的资产assets目录, imageURL 则须使用 "asset://" 作为前缀, 如果是设备上的绝对路径, imageURL 则须使用 "file://" 为前缀 + 设备上的绝对路径
    String imageURL = "file:///sdcard/Android/data/im.zego.zegoexpressapp/ZegoLogo.png";
    
    Rect layout = new Rect(0,0,300,600);
    ZegoWatermark watermark = new ZegoWatermark(imageURL, layout);
    
    sdk.setPublishWatermark(watermark, true);
  1. Assets 形式

    asset://[图片资源名称]:需要将图片存放在 Android 工程的 “assets” 目录中。

  • 接口原型

    /**
    * 设置推流水印
    *
    * 推流前设置,水印的布局不能超出推流的视频编码分辨率。
    * @param watermark 水印布局左上角为坐标系原点,区域不能超过编码分辨率设置的大小。若为空表示取消水印。
    * @param isPreviewVisible 是否本地预览能看见水印
    */
    public void setPublishWatermark(@Nullable ZegoWatermark watermark, boolean isPreviewVisible)
  • 调用示例

    // 支持 JPG 与 PNG 格式的图片, 如果图片是放在Android工程的资产assets目录, imageURL 则须使用 "asset://" 作为前缀, 如果是设备上的绝对路径, imageURL 则须使用 "file://" 为前缀 + 设备上的绝对路径
    String imageURL = "asset://ZegoLogo.png";
    
    Rect layout = new Rect(0,0,300,600);
    ZegoWatermark watermark = new ZegoWatermark(imageURL,layout);
    
    sdk.setPublishWatermark(watermark, true);

4 API 参考列表

方法 描述
enableBeautify 开启美颜功能
setBeautifyOption 设置美颜参数
setPublishWatermark 设置推流水印

5 常见问题

  1. ZegoWatermark 中的 imageURL 如何指定?

    支持 JPG 与 PNG 两种格式的图片,如果图片是放在 Android 工程的 “assets” 目录文件夹中,imageURL 则须使用 “asset://” 作为前缀,如果是设备上的绝对路径,imageURL 则须使用 “file://” 为前缀 + 设备上的绝对路径。

  2. ZegoWatermark 中的 layout 如何指定?

    水印的布局不能超过当前设置的推流的视频编码分辨率,对推流编码分辨率的设置可参考 setVideoConfig 接口。