水印处理
RTCLib SDK 支持在视频流上添加水印。添加水印有两种控制方式,本文仅介绍方案一:
水印方案对比
方案一:客户端水印
使用客户端 SDK 提供的 setWaterMark:position:
方法添加图片水印。客户端发布的视频流即带有图片水印,因此订阅分流或合流的直播观众均会看到带水印的视频流。
适用场景:App 客户端用户自主添加个性化水印
方案二:服务端水印
使用服务端 API 的 /rtc/mcu/config
接口,在服务端处理,添加时间戳水印、文字水印或图片水印。这种方式支持为单人视频流或合流视频添加水印,但只有订阅合流的观众可看到带水印的视频流。
适用场景:App 添加统一风格的水印
提示
- 客户端与服务端添加的水印相互独立
- 如果同时使用,则订阅合流的观众可能会看到水印叠加
- 服务端水印方案请参见服务端文档直播合流
客户端水印设置
提示
SDK 从 5.1.16 版本开始,提供内置水印接口。
RTCLib SDK 内置了设置水印的接口,通过调用 RCRTCVideoOutputStream
的 setWaterMark:position:
方法即可为相机/自定义文件/共享桌面采集到的视频流添加水印。每一道视频流水印设置是独立的。
接口原型
Objective C
- (BOOL)setWaterMark:(nullable UIImage *)image position:(CGRect)position;
参数说明
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
image | UIImage * | 否 | 水印图片,传入 nil 时则清除水印 |
position | CGRect | 是 | 水印的位置和尺寸参数,取值范围 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 根据图片宽高比自动计算合适的高度