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

美颜和水印

更新时间:2021-02-05 17:03

1 功能简介

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

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

2 示例源码下载

请参考 下载示例源码

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

3 使用步骤

3.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];

3.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];

3.3 使用水印

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

注意:水印图片只支持 pngjpeg 两种图片格式,也即 .png.jpg.jpeg 三种后缀的图片文件

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

3.3.1 Bundle 形式

file://[图片在 Bundle 中的绝对路径]

需要将图片存放于项目 Bundle 内任意位置,通过 NSBundlepathForResource:ofType: 方法获取图片的绝对路径并加上 file:// 前缀

  • 调用示例:

    ZegoWatermark *watermark = [[ZegoWatermark alloc] init];
    
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"ZegoLogo" ofType:@"png"];
    watermark.imageURL = [NSString stringWithFormat:@"file://%@", imagePath];
    
    watermark.layout = [ZegoRect rectWithLeft:0 top:0 right:200 bottom:200];
    
    [self.engine setPublishWatermark:watermark isPreviewVisible:YES];

3.3.2 Assets 形式

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

需要将图片存放在 iOS 工程自带的 Assets.xcassets

  • 调用示例:

    ZegoWatermark *watermark = [[ZegoWatermark alloc] init];
    watermark.imageURL = @"asset://ZegoLogo";
    watermark.layout = [ZegoRect rectWithLeft:0 top:0 right:200 bottom:200];
    
    [self.engine setPublishWatermark:watermark isPreviewVisible:YES];

4 API 参考列表

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

5 Q&A

Q1: ZegoWatermark 中的 layout 如何指定?

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