跳到主要内容

水印处理

RTCLib SDK 支持在视频流上添加水印。添加水印有两种控制方式,本文仅介绍方案一:

水印方案对比

方案一:客户端水印

使用客户端 SDK 提供的 setWaterMark:position: 方法添加图片水印。客户端发布的视频流即带有图片水印,因此订阅分流或合流的直播观众均会看到带水印的视频流。

适用场景:App 客户端用户自主添加个性化水印

方案二:服务端水印

使用服务端 API 的 /rtc/mcu/config 接口,在服务端处理,添加时间戳水印、文字水印或图片水印。这种方式支持为单人视频流或合流视频添加水印,但只有订阅合流的观众可看到带水印的视频流。

适用场景:App 添加统一风格的水印

提示
  • 客户端与服务端添加的水印相互独立
  • 如果同时使用,则订阅合流的观众可能会看到水印叠加
  • 服务端水印方案请参见服务端文档直播合流

客户端水印设置

提示

SDK 从 5.1.16 版本开始,提供内置水印接口。

RTCLib SDK 内置了设置水印的接口,通过调用 RCRTCVideoOutputStreamsetWaterMark:position: 方法即可为相机/自定义文件/共享桌面采集到的视频流添加水印。每一道视频流水印设置是独立的。

接口原型

Objective C
- (BOOL)setWaterMark:(nullable UIImage *)image position:(CGRect)position;

参数说明

参数类型是否必填说明
imageUIImage *水印图片,传入 nil 时则清除水印
positionCGRect水印的位置和尺寸参数,取值范围 0 ~ 1,左上角为原点,SDK 内部会根据视频分辨率计算水印实际的像素位置和尺寸

返回值

设置成功返回 YES,失败返回 NO

代码示例

Objective C
#import <RongRTCLib/RongRTCLib.h>

// 添加水印
UIImage *waterMarkImage = [UIImage imageNamed:@"chat_water_mark"];
BOOL success = [[RCRTCEngine sharedInstance].defaultVideoStream setWaterMark:waterMarkImage
position:CGRectMake(0.1, 0.1, 0.14, 0)];
if (success) {
// 水印设置成功
}

// 清除水印
[[RCRTCEngine sharedInstance].defaultVideoStream setWaterMark:nil position:CGRectZero];

位置参数说明

position 参数的 CGRect 各字段含义:

字段说明
x水印左上角横坐标,取值范围 0.0 ~ 1.0
y水印左上角纵坐标,取值范围 0.0 ~ 1.0
width水印宽度,取值范围 0.0 ~ 1.0
height水印高度,设置为 0 时自动按图片宽高比计算
提示
  • 所有位置和尺寸参数都是相对值(0 ~ 1),SDK 会根据实际视频分辨率进行换算
  • 建议将 height 设置为 0,让 SDK 根据图片宽高比自动计算合适的高度