实时音视频
  • 平台类型
  • 框架 / 引擎

美颜水印

更新时间:2020-06-16 21:18

1 功能简介

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

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

2 使用步骤

2.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());

2.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);

2.3 使用水印

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

2.3.1 绝对路径的形式

file://[图片资源名称]

需要将图片存放在 Android 设备的某目录中, 例如 Android 的 app 的私有目录: /sdcard/Android/data/im.zego.zegoexpressapp/ZegoLogo.png

  • 调用示例:
// 支持 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);

2.3.2 Assets 形式

asset://[图片资源名称]

需要将图片存放在 Android 工程的 assets 目录中:

  • 调用示例:
// 支持 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 Q&A

Q1:ZegoWatermark 中的 imageURL 如何指定?

  答:支持 jpg 与 png 格式的图片, 如果图片是放在Android工程的资产assets目录, imageURL 则须使用 "asset://" 作为前缀, 如果是设备上的绝对路径, imageURL 则须使用 "file://" 为前缀 + 设备上的绝对路径

Q2: ZegoWatermark 中的 layout 如何指定?

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