低延迟直播
  • 平台类型
  • 框架 / 引擎
  • iOS
  • Android
  • macOS
  • Windows
  • Linux
  • Web
  • 小程序

美颜和水印

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

1 功能简介

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

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

2 示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “/ZegoExpressExample/Topics/Beautify/ZGBeautifyViewController.m” 文件。

3 前提条件

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

4 使用步骤

4.1 开启美颜

  • 接口原型

    /// 美颜特性
    typedef NS_OPTIONS(NSUInteger, ZegoBeautifyFeature) {
        /// 无美颜
        ZegoBeautifyFeatureNone = 0,
        /// 磨皮
        ZegoBeautifyFeaturePolish = 1 << 0,
        /// 全屏美白
        ZegoBeautifyFeatureWhiten = 1 << 1,
        /// 皮肤美白
        ZegoBeautifyFeatureSkinWhiten = 1 << 2,
        /// 锐化
        ZegoBeautifyFeatureSharpen = 1 << 3,
    };
    
    /// 开/关美颜
    /// @discussion 识别视频中的人像进行美颜。开始推流前后都可以设置。
    /// @param featureBitmask 比特掩码格式,可选择同时开启 ZegoBeautifyFeature 中的几个特性
    - (void)enableBeautify:(ZegoBeautifyFeature)featureBitmask;
  • 调用示例

    // 开启磨皮和锐化
    [self.engine enableBeautify:ZegoBeautifyFeaturePolish | ZegoBeautifyFeatureSharpen];
    
    // 关闭所有美颜功能
    [self.engine enableBeautify:ZegoBeautifyFeatureNone];

4.2 自定义美颜参数

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

  • 接口原型

    /// 美颜参数对象
    @interface ZegoBeautifyOption : NSObject
    
    /// 美颜磨皮的采样步长,取值范围[0,1]。默认 0.2
    @property (nonatomic, assign) double polishStep;
    
    /// 美颜美白的亮度参数,取值范围[0,1],值越大亮度越亮。默认 0.5
    @property (nonatomic, assign) double whitenFactor;
    
    /// 美颜锐化参数,取值范围[0,1],值越大锐化越强。默认 0.1
    @property (nonatomic, assign) double sharpenFactor;
    
    @end
    
    /// 设置美颜参数
    /// @param option 美颜选项参数
    - (void)setBeautifyOption:(ZegoBeautifyOption *)option;
  • 调用示例

    ZegoBeautifyOption *option = [[ZegoBeautifyOption alloc] init];
    option.polishStep = 0.2;
    option.whitenFactor = 0.5;
    option.sharpenFactor = 0.1;
    
    [self.engine setBeautifyOption:option];

4.3 使用水印

水印图片只支持 “PNG” 与 “JPEG” 两种图片格式,即 “.png”、“.jpg”、“.jpeg” 三种后缀的图片文件。

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

  1. Bundle 形式

    file://[图片在 Bundle 中的绝对路径]:需要将图片存放于项目 Bundle 内任意位置,通过 “NSBundle” 的 “pathForResource:ofType:” 方法获取图片的绝对路径,并加上 “file://” 前缀。

  • 接口原型

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

    ZegoWatermark *watermark = [[ZegoWatermark alloc] init];
    
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"ZegoLogo" ofType:@"png"];
    watermark.imageURL = [NSString stringWithFormat:@"file://%@", imagePath];
    
    watermark.layout = CGRectMake(0, 0, 200, 200);
    
    [self.engine setPublishWatermark:watermark isPreviewVisible:YES];
  1. Assets 形式

    asset://[图片资源名称]:需要将图片存放在 iOS 工程自带的 “Assets.xcassets” 中。

  • 接口原型

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

    ZegoWatermark *watermark = [[ZegoWatermark alloc] init];
    watermark.imageURL = @"asset://ZegoLogo";
    watermark.layout = CGRectMake(0, 0, 200, 200);
    [self.engine setPublishWatermark:watermark isPreviewVisible:YES];

5 API 参考列表

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

6 常见问题

  1. ZegoWatermark 中的 layout 如何指定?

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