视频水印

更新时间: 2021/03/26 22:00:50

录制生成的文件中默认未添加水印设置,出于信息安全、版权声明、防伪、宣传等目的,您可以为录制生成的视频文件添加水印,也可以为屏幕共享的辅流视频添加水印,例如添加公司名称或标语等文字水印、添加录制时间等时间戳水印。

本地服务端录制 SDK 支持以下三种水印设置:

  • 文字水印:使用一段文字信息作为水印,支持设置字体和字号。
  • 动态时间戳水印:使用录制服务器的当前时间作为水印,显示格式为“2019-06-18 14:30:35"。
  • 静态图片水印:使用一张本地 PNG 图片作为水印。

添加水印

您可通过以下方法在录制文件中添加水印:

更新和删除水印

  • 调用 setVideoMixingLayoutupdateWatermarkConfigs 均可重新设置水印的个数和参数,也可以删除已添加的水印。
  • 通过 updateWatermarkConfigs 方法,可以在更新或删除水印时,指定操作的是哪位用户、哪种类型的视频水印,例如指定更新用户 A 的辅流视频水印、删除用户 B 的主流视频水印。
  • 删除全部已添加的水印,只能调用 updateWatermarkConfigs,将 wm_num 设为 0,configs 设置为空。
  • 调用 updateWatermarkConfigs更新合流布局时,如果没有水印信息, 即不对水印进行任何修改,因此不能删除所有已添加的水印。

例如,视频中已有 1 个图片水印和 1 个文字水印。如想删除图片水印,可以将 wm_num 改为 1,传入原文字水印的设置,再调用 updateWatermarkConfigs 更新水印设置。

设置水印

本地服务端录制 SDK 支持以下水印相关设置:

参数 说明
wm_num 设置水印的总个数。
最多可设 15 个水印,其中文字水印最多 10 个,时间戳水印最多 1 个,图片水印最多 4 个。
wm_configs 水印具体设置, 由多个 WatermarkConfig 组成的数组。一个 WatermarkConfig 对应一个水印。
WatermarkConfig 的个数需与 wm_num 参数中设置的水印个数保持一致。
WatermarkConfig
  • 通过 type 参数指定该水印的类型。
  • 通过 config 参数定义该水印的具体设置。

文字水印

添加文字水印时,需要设置以下参数:

参数 说明
type 水印类型,应设置为 kNERtcWatermarkTypeLitera。
config wm_litera 指定文字水印内容。
文字水印不支持自动换行。如果需要在文字水印中换行显示,可以在合适位置插入换行符 \n进行换行。
font_size 指定字号。
font_file_path 指定字体文件路径。支持 ttf,otf 等字体格式。
若未设置,则使用默认字体 NotoSansMonoCJKsc-Regular。
offset_x 设置水印的水平位置。
offset_y 设置水印的垂直位置。
  • 最多可添加 10 个文字水印。
  • 仅支持 UTF-8 编码。
  • 支持的字符取决于字体类型。默认字体为 NotoSansMonoCJKsc-Regular,支持的语言和字符详见字体介绍。

时间戳水印

添加时间戳水印时,需要设置以下参数:

参数 说明
type 水印类型,应设置为 kNERtcWatermarkTypeTimestamp。
config config 指定时间戳的字号。
offset_x 设置水印的水平位置。
offset_y 设置水印的垂直位置。
  • 只能添加 1 个时间戳水印。
  • 时间戳显示录制服务器的当前时间,当前时间是动态变化的,显示格式为 “2021-01-25 17:31:21"。

图片水印

添加图片水印时,需要设置以下参数:

参数 说明
type 水印类型,应设置为 kNERtcWatermarkTypeImage。
config image_path 指定图片路径。
offset_x 设置水印的水平位置。
offset_y 设置水印的垂直位置。
wm_width 设置水印的宽度。
wm_height 设置水印的高度。
  • 最多可添加 4 个图片水印。
  • 仅支持 Linux 服务器本地的 PNG 图片。
  • 图片分辨率建议设置为 480p 以内。

设置水印背景区域

添加文字和时间戳水印时,可以通过 config 中的 background 参数设置水印背景区域的相关参数,水印背景区域默认为包含所有文字或时间戳的最小矩形,背景区域位置与水印坐标相关,您可以通过以下参数设置水印区域的相关参数:

参数 说明
border 设置水印背景区域的边框宽度,从而设置整个水印框的大小和范围。
color 设置水印背景区域的颜色。
alpha 设置水印背景区域的透明度。范围为[0, 1],0 表示完全透明,1表示完全不透明。

示例代码

以下 C++ 示例代码演示了如何调用 setVideoMixingLayout 设置 3 个水印:1 个图片水印,1 个时间戳水印,1 个文字水印。

nerecord::IRecordEngine *engine = (nerecord::IRecordEngine *)createNERecordEngine();

nerecord::NERecordEngineContext ctx;
ctx.auto_subscribe_audio = true;
ctx.auto_subscribe_video = true;
ctx.audio_enable = true;
ctx.video_enable = true;
ctx.default_stream_type = nerecord::kNERtcRemoteVideoStreamTypeHigh;
ctx.mixed_audio_video = false;
ctx.mixing_enable = true;
ctx.decodeAudio = nerecord::kNERtcAudioFormatAAC;
ctx.decodeVideo = nerecord::kNERtcVideoFormatH264;
ctx.video_record_resolution.vanvasWidth = 640;
ctx.video_record_resolution.vanvasHeight = 480;
ctx.video_record_resolution.bps = 400000;
ctx.video_record_resolution.fps = 15;
ctx.snapshot_interval = 10;
ctx.audioProfile = nerecord::kNERtcAudioProfileHight;

engine->initialize(ctx);
engine->joinChannel(<token>, <channel_name>, <uid>);

nerecord::VideoMixingLayout layout;
nerecord::WatermarkConfig wms[3];

wms[0].type = kNERtcWatermarkTypeImage;
wms[0].config.image.image_path = "absolute_path_of_image";
wms[0].config.image.offset_x = <x0>;
wms[0].config.image.offset_y = <y0>;
wms[0].config.image.wm_width = <w0>;
wms[0].config.image.wm_height = <h0>; 

wms[1].type = kNERtcWatermarkTypeTimestamp;                        
wms[1].config.timestamp.font_file_path = NULL;
wms[1].config.timestamp.font_size = 20;
wms[1].config.timestamp.offset_x = <x1>;
wms[1].config.timestamp.offset_y = <y2>;
wms[1].config.timestamp.background.color = "white";
wms[1].config.timestamp.background.alpha = 0.3;
wms[1].config.timestamp.background.border = 5;

wms[2].type = kNERtcWatermarkTypeLitera;
wms[2].config.litera.wm_litera = "text";
wms[2].config.litera.font_file_path = NULL;
wms[2].config.litera.font_size = 20;
wms[2].config.litera.offset_x = <x2>;
wms[2].config.litera.offset_y = <y2>;
wms[2].config.litera.background.color = "white";
wms[2].config.litera.background.alpha = 0.3;
wms[2].config.litera.background.border = 5;

layout.wmNum = 3;
layout.wmConfigs = wms;
layout.layout = kNERtcLayoutGrid;
layout.backgroundColor = "#ffffff";
engine->setVideoMixingLayout(layout);

engine->startService();
/*录制中*/
engine->stopService();
engine->leaveChannel();
engine->release();
destroyNERecordEngine((void *&)engine);
此文档是否对你有帮助?
有帮助
去反馈
  • 添加水印
  • 更新和删除水印
  • 设置水印
  • 文字水印
  • 时间戳水印
  • 图片水印
  • 设置水印背景区域
  • 示例代码