跳到主要内容

水印处理

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

  • 方案一:使用客户端 SDK 提供的 setWaterMark:position: 方法添加图片水印。客户端发布的视频流即带有图片水印,因此订阅分流或合流的直播观众均会看到带水印的视频流。
  • 方案二:使用服务端 API 的 /rtc/mcu/config 接口,在服务端处理,添加时间戳水印、文字水印或图片水印。这种方式支持为单人视频流或合流视频添加水印,但只有订阅合流的观众可看到带水印的视频流。本文不介绍服务端的处理方案,如有需要,请参见服务端文档直播合流

方案一适用于实现 App 客户端用户自主添加个性化水印;方案二更适用于由 App 添加统一风格的水印。

客户端与服务端添加的水印相互独立。如果同时使用,则订阅合流的观众可能会看到水印叠加。

设置水印

提示

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

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

- (BOOL)setWaterMark:(nullable UIImage *)image position:(CGRect)position;
参数类型必填说明
imageUIImage水印图片,传入 nil 时则清除水印。
positionCGRect水印的位置和尺寸参数。 注意:参数取值范围 0 ~ 1,SDK 内部会根据视频分辨率计算水印实际的像素位置和尺寸。

示例代码

// 添加水印
// x, y, width 参数取值范围是 0 ~ 1
// 不用设置 height,内部会根据水印图片的宽高比自动计算一个合适的高度。
UIImage *waterMarkImage = [UIImage imageNamed:@"chat_water_mark"];
[[RCRTCEngine sharedInstance].defaultVideoStream setWaterMark:waterMarkImage
position:CGRectMake(0.1, 0.1, 0.14, 0)];

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