ZWMAP 水印类型规范
1. 概述
水印类型用于描述视频画面上叠加的水印元素,支持图片水印、文字水印、动态游走水印和铺满水印。常用于品牌标识、版权声明、用户追踪和防录屏保护。
水印数据通过 watermarks 参数传入播放器,支持三种输入格式:
- URL 字符串:指向一个 ZWMAP JSON 文件的地址
- ZWMAP 对象:包含完整协议头的 JSON 对象
- 水印数组:直接传入
watermarks数组(无协议头)
2. ZWMAP 头部
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "watermark"
}
3. 数据结构
3.1 根级别字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
zwp_protocol |
string | 是 | — | 协议标识,固定 "ZWMAP/1.0" |
zwp_type |
string | 是 | — | 固定 "watermark" |
zwp_version |
string | 否 | "1.0" |
数据格式版本 |
watermarks |
array | 是 | — | 水印条目数组 |
3.2 水印条目通用字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
id |
string | 否 | — | 水印条目唯一标识 |
type |
string | 是 | — | 水印类型:"image" 或 "text" |
behavior |
string | 否 | "static" |
行为模式:"static"、"dynamic"、"tile" |
dock |
string | 否 | "right" |
停靠方向:"left" 或 "right",影响 x 的参考原点 |
x |
string | 否 | "5%" |
水平位置,支持像素值或百分比 |
y |
string | 否 | "5%" |
垂直位置,支持像素值或百分比 |
width |
string | 否 | "5%" |
宽度,支持像素值或百分比 |
height |
string | 否 | "auto" |
高度,支持像素值、百分比或 "auto" |
opacity |
number | 否 | 70 |
不透明度,0-100 |
hidden |
boolean | 否 | false |
是否隐藏 |
3.3 图片水印字段(type: "image")
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
icon |
string | 是 | — | 图片 URL(支持 Base64 data URI) |
3.4 文字水印字段(type: "text")
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
text |
string | 是 | — | 水印文本内容,支持模板变量 |
font_size |
number | 否 | 14 |
字体大小(px) |
font_color |
string | 否 | "rgba(255,255,255,0.4)" |
字体颜色,支持 RGBA |
3.5 动态行为字段(behavior: "dynamic")
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
movement |
object | 否 | — | 运动参数 |
movement.direction |
string | 否 | "diagonal" |
移动方向:"horizontal"、"vertical"、"diagonal"、"random" |
movement.speed |
number | 否 | 2 |
移动速度,1-10 |
movement.interval |
number | 否 | 0 |
隐藏等待时间(秒),0 表示持续显示 |
movement.duration |
number | 否 | 0 |
每次显示持续时间(秒),0 表示持续显示 |
3.6 铺满行为字段(behavior: "tile",仅 type: "text")
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
tile |
object | 否 | — | 铺满参数 |
tile.angle |
number | 否 | -30 |
倾斜角度(度),-90 到 90 |
tile.rowSpacing |
number | 否 | 120 |
行间距(px) |
tile.colSpacing |
number | 否 | 300 |
列间距(px) |
4. 行为模式
4.1 static — 静态水印
水印固定在指定位置,适合品牌 Logo 和固定版权声明。
dock决定 x 坐标的参考原点(左边缘或右边缘)- 切换
dock方向时,x 值需相应转换(如5%→95%)
4.2 dynamic — 动态游走
水印在画面上移动,是防录屏的关键手段。
- 水印在容器内移动,碰到边界自动反弹
- 设置
interval和duration可实现显示/隐藏的周期循环 - 隐藏后重新出现时,从上次消失的位置继续移动
4.3 tile — 铺满水印(仅文字)
文字以倾斜网格铺满整个画面,形成密集水印矩阵。
- 网格尺寸按画面对角线计算,确保旋转后无空白
- 仅
type: "text"支持
5. 模板变量
文字水印的 text 字段支持 {key} 模板变量,在播放时动态解析。
5.1 内置变量
| 变量 | 说明 | 更新频率 |
|---|---|---|
{sys_time} |
客户端本地时间(YYYY-MM-DD HH:mm:ss) |
每秒 |
5.2 自定义变量
通过播放器的 variables 参数传入:
new ZWPlayer({
url: 'video.mp4',
watermarks: config.watermarks,
variables: {
user_id: '138****1234',
user_name: 'John',
department: 'Engineering'
}
});
未解析的变量原样显示。
6. 完整示例
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "watermark",
"zwp_version": "1.0",
"watermarks": [
{
"id": "wm-logo",
"type": "image",
"behavior": "static",
"icon": "https://cdn.example.com/logo.png",
"dock": "right",
"x": "3%",
"y": "3%",
"width": "8%",
"opacity": 70
},
{
"id": "wm-text",
"type": "text",
"behavior": "static",
"text": "{user_name} | {department}",
"dock": "left",
"x": "3%",
"y": "90%",
"font_size": 16,
"font_color": "rgba(255,255,255,0.5)",
"opacity": 60
},
{
"id": "wm-dynamic",
"type": "text",
"behavior": "dynamic",
"text": "{user_id} | {sys_time}",
"font_size": 14,
"font_color": "rgba(255,255,255,0.3)",
"opacity": 40,
"movement": {
"direction": "diagonal",
"speed": 3,
"interval": 0,
"duration": 0
}
},
{
"id": "wm-tile",
"type": "text",
"behavior": "tile",
"text": "Confidential",
"font_size": 16,
"font_color": "rgba(255,255,255,0.08)",
"opacity": 20,
"tile": {
"angle": -30,
"rowSpacing": 120,
"colSpacing": 300
}
}
]
}
7. 约束规则
watermarks数组不得为空- 每个条目必须包含
type字段 type为image时,必须提供icontype为text时,必须提供textopacity取值范围 0-100,推荐值 20-70behavior: "tile"仅适用于type: "text"- 动态水印推荐透明度 20-40,平衡防录屏效果与观看体验
- 多个水印可同时使用,位置不应完全重叠
- 水印不响应鼠标事件,不阻塞播放器交互